Skip to content

签名规则

为了保障 请求的安全性与完整性,我们强制要求对接口请求参数进行签名。

签名用途

  • 防止参数被篡改
  • 验证请求来源合法性
  • 防止重放攻击
  • 保证数据完整性

签名规则概览

支持的算法

签名算法支持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 不参与签名计算