跳转至

商户回调签名规则

支付订单状态变更后,平台向下单时传入的 notify_url 发起 HTTP 回调请求。

请求格式

  • 方法:POST
  • 地址:订单的 notify_url
  • 超时:10 秒

请求头:

Content-Type: application/json

请求体:

字段 类型 说明
merchant_key string 商户标识
data string 回调业务参数 JSON 的小写十六进制编码
timestamp int64 平台发起回调时的 Unix 秒级时间戳
sign string 回调签名,小写 MD5 字符串
{
  "merchant_key": "YOUR_MERCHANT_KEY",
  "data": "7b226f726465725f6e6f223a224d5049313233343536373839222c226d63685f6f726465725f6e6f223a225049323032363037303130303031222c22616d6f756e74223a223130302e3530222c2261637475616c5f616d6f756e74223a223130302e3530222c22666565223a22312e3530222c22737461747573223a327d",
  "timestamp": 1782864000,
  "sign": "SIGNATURE_LOWERCASE_MD5"
}

验证签名

  1. 按以下顺序直接拼接签名原文,不添加分隔符:
data + timestamp + merchant_secret
  1. 对签名原文计算 MD5,并将摘要转为小写十六进制字符串。
  2. 将计算结果与请求中的 sign 进行比较。
  3. 签名通过后,将 data 从十六进制解码为 UTF-8 JSON。

伪代码:

sign_text = data + timestamp + merchant_secret
expected_sign = lowercase_hex(md5(sign_text))
valid = expected_sign == sign
business_data = json_decode(utf8(hex_decode(data)))

注意:

  • 回调签名不包含 version
  • data 使用小写十六进制;验签时必须使用请求中完全相同的 data 字符串。
  • timestamp 使用秒,不是毫秒。

接收方响应

处理成功后必须返回:

HTTP/1.1 200 OK
Content-Type: text/plain

success

响应体必须是精确的纯文本 success,区分大小写,不能包含 JSON、引号、空格或换行。

以下任一情况都会被判定为回调失败:

  • 请求超时或网络错误。
  • HTTP 状态码不是 200
  • 响应体不是精确的 success

回调失败后,平台按 5、10、30、60、120 分钟的间隔重试。达到重试次数上限后停止系统自动重试。