签名规则
为了保障 请求的安全性与完整性,我们强制要求对接口请求参数进行签名。
签名用途
- 防止参数被篡改
- 验证请求来源合法性
- 防止重放攻击
- 保证数据完整性
签名规则概览
支持的算法
签名算法支持MD5算法,签名后的结果转大写。
参数准备规则
- 所有 非空参数值(业务参数 + 通用参数)
- 除了
sign外,不排除其它字段,例如signType仍参与 - 交易金额:单位为分,参数值不能带小数
- 时间参数:所有涉及时间参数均使用精确到毫秒的13位数值,如:1622016572190。时间戳具体是指从格林尼治时间1970年01月01日00时00分00秒起至现在的毫秒数
参数排序
将所有有效参数按照 参数名 ASCII 字典升序排序 (ASCII 从小到大)。
注意
签名过程中,所有参与签名的参数必须按规则排序、拼接、并确保值准确无误。
拼接待签名字符串
按照键值对格式将 sorted 参数拼接:
ini
key1=value1&key2=value2&key3=value3...之后 在字符串尾部追加私钥:
ini
…&key=你的私钥例如:
ini
amount=1&appId=644742...&body=商品描述&...&wayCode=ALI_BAR&key=你的私钥计算签名值
把拼接后带 key 的字符串执行:MD5(待签名字符串)
请求签名示例(伪代码)
text
待签字符串 = amount=1&
appId=6447428682ca7458118af79f&
body=商品描述&
channelExtra={"authCode":"284957415846666792"}&
clientIp=192.166.1.132&
currency=CNY&
mchNo=M1682391685&
mchOrderNo=mho1694051705945&
notifyUrl=https://www.example.com&
reqTime=1694051706&
signType=MD5&
subject=商品标题&
version=1.0&
wayCode=ALI_BAR
待签字符串 += "&key=UNpEETkvMpqC9oDLBr9S2X7U..."
签名结果 = MD5(待签字符串).toUpperCase()最终请求体中应包含:
json
{
"amount": 1,
"mchOrderNo": "mho1694051705945",
"subject": "商品标题",
"wayCode": "ALI_BAR",
"sign": "924065BA077FA461A9B06D2E76E9ED3C",
...
}提示
签名过程中,所有参与签名的参数必须按规则排序、拼接、并确保值准确无误。
注意事项
- 私钥必须妥善保管,不要出现在前端页面或日志中
- 时间戳、参数格式、大小写务必一致
sign不参与签名计算