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

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

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

举例:某些语言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 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5

微信支付2.0 不就是这种

2年前 评论

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

2年前 评论
忆往昔弹指间 (楼主) 2年前
lun1bz (作者) 2年前
哪吒的狗腿子 2年前

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