回调验签
平台只对交易 SUCCESS 发送回调,签名规则与商户请求一致(HMAC-SHA256 + Base64)。
回调 Headers
| Header | 必填 | 说明 |
|---|---|---|
X-Merchant-Id | 是 | 商户主键 ID |
X-Timestamp | 是 | Unix 时间戳(毫秒) |
X-Nonce | 是 | 32 位随机字符串 |
X-Sign | 是 | HMAC-SHA256 签名(Base64) |
HTTP Header 名称不区分大小写。
签名算法
签名串固定顺序(| 分隔):
timestamp|nonce|rawBody签名计算:
signature = Base64(HMAC_SHA256(SignData, merchant_secret))rawBody 为实际接收的原始 JSON 字符串,不可二次格式化或重排字段。
回调示例
json
{
"payNo": "P202312230001",
"tradeNo": "T202312230001",
"merchantOrderNo": "ORDER_001",
"amount": 10000,
"currency": "USD",
"tradeStatus": "SUCCESS",
"finishTime": 1734921000000,
"notifyTime": 1734921005000
}验签步骤
- 读取 Headers 中的
X-Timestamp、X-Nonce、X-Sign。 - 使用原始请求体拼接签名串并计算签名。
- 比对计算结果与
X-Sign是否一致。
处理建议
- 必须先验签再处理业务逻辑。
- 回调可能重复发送,需做幂等处理。
- 处理完成后尽快返回
200 OK,避免平台重试。