签名与验签
请求签名
- 排除请求中的
sign。 - 排除值为
""或null的字段;保留数值0和字符串"0"。 - 按参数名 ASCII 升序排序。
- 用
&连接key=value,最后追加&secret=app_secret。 - 对完整 UTF-8 字符串计算 MD5,得到 32 位小写十六进制
sign。
不要对参数值做 URL 编码,不要改变金额表示,不要把 app_secret 做 Base64 解码。密钥若本身是 Base64 外观字符串,仍使用提供的原字符串。
可核算示例
示例密钥: DEMO_SECRET_NOT_A_LIVE_CREDENTIAL。
json
{
"tenant_id": "DEMO0001",
"app_key": "demo_app_key",
"timestamp": "1791199800",
"sign": "4ec5f59fa281ba9a12439f3adbb29fca"
}text
app_key=demo_app_key&tenant_id=DEMO0001×tamp=1791199800&secret=DEMO_SECRET_NOT_A_LIVE_CREDENTIALtext
MD5 = 4ec5f59fa281ba9a12439f3adbb29fca回调验签
使用该订单所属应用的密钥,以及回调收到的全部非空字段。算法相同,但排除的是 signature,不是 sign。不要额外加入请求中的 app_key、timestamp 或 secret 字段。
pay_time 和 created_at 如果存在,就按收到的原值参与签名;不要改为 ISO8601、转换时区或改写小数后再验签。字段缺省或为空时按上述规则处理。
离线辅助工具
项目提供纯本地签名工具和签名函数。工具不发请求、不创建订单;替换应用凭证并设置当前时间戳后才能用于自己的请求。
回调示例的签名可使用上述密钥复算。