接口参数签名效验设计讨论

想知道大家平日是如何设计接口参数签名效验的,大家讨论以下的签名方式如何?

本着简单明了、减少歧义、跨语言对接减少踩坑的原则来设计,降低对接沟通成本。

举例:某些语言md5后大小写都有。某些语言json编码会有不同的转义表现。

参数签名

  • Step 1:

    将所有参数(除sign参数外)按键值字典序进行升序排序

  • Step 2:

    对数据进行json编码(不转义中文)得到字符串

  • Step 3:

    字符串拼接上盐值salt后进行md5加密并转化为小写


PHP Example:

<?php

// Step1:
$args = [
    'TIMESTAMP'    => '1566267610',
    'device' => 'app',
    'guid'=> 'eiXEW6VmtoqcLCYsQ04GRHnwpdub9r2K',
    'sysLanguage' => 'zh',
    'username' => '907640',
];
unset($args['sign']);
ksort($args); // 排序

// Step2:
$str = json_encode($args, JSON_UNESCAPED_UNICODE); // 不转中文

// Step3:
$salt = '1kQrjKS4dm5WVCsPX6hzYoUNIvDta7F9';
// 生成签名
$sign = strtolower(md5($str . $salt)); // md5并小写

echo 'sign = ' . $sign;
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 2

微信支付2.0 不就是这种

2周前 评论

不要用json_encode,遇上整型和浮点有点坑

2周前 评论
忆往昔弹指间 (楼主) 2周前
lun1bz (作者) 1周前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!