Skip to content

签名与验签 ​

请求签名 ​

  1. 排除请求中的 sign。
  2. 排除值为 "" 或 null 的字段;保留数值 0 和字符串 "0"。
  3. 按参数名 ASCII 升序排序。
  4. 用 & 连接 key=value,最后追加 &secret=app_secret。
  5. 对完整 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&timestamp=1791199800&secret=DEMO_SECRET_NOT_A_LIVE_CREDENTIAL
text
MD5 = 4ec5f59fa281ba9a12439f3adbb29fca

回调验签 ​

使用该订单所属应用的密钥,以及回调收到的全部非空字段。算法相同,但排除的是 signature,不是 sign。不要额外加入请求中的 app_key、timestamp 或 secret 字段。

pay_time 和 created_at 如果存在,就按收到的原值参与签名;不要改为 ISO8601、转换时区或改写小数后再验签。字段缺省或为空时按上述规则处理。

离线辅助工具 ​

项目提供纯本地签名工具和签名函数。工具不发请求、不创建订单;替换应用凭证并设置当前时间戳后才能用于自己的请求。

回调示例的签名可使用上述密钥复算。

OpenAPI v1 · Merchant integration