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

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

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

举例:某些语言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;
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 5

微信支付2.0 不就是这种

2年前 评论

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

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

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