机制概述
开放平台采用 app_key 对称签名机制:渠道商与平台共享一对凭据,使用 HMAC-SHA256 对请求/响应原文计算签名,通过 HTTP Header 传递。- 仅签名,不加密:报文内容以 HTTPS 传输保护;签名用于确认请求来源可信、内容未被篡改、防止重放攻击;
- 对称机制:同一密钥既用于请求签名(渠道商→平台),也用于响应验签(平台→渠道商);
- 防重放:时间戳 ±5 分钟窗口 + 随机串 5 分钟去重,双因子校验。
凭据获取
渠道商入驻(管理端开通)后,平台分配:请求头
Client-Id 的取值即为 app_key 本身。请求签名(渠道商 → 平台)
签名原文
对以下内容按顺序拼接,每行以换行符\n 结尾(包括最后一行的请求体后也有 \n):
"%s\n%s\n%s\n%s\n%s\n%s\n%s\n"。
签名算法
- 算法:HMAC-SHA256,密钥为
app_secret; - 输出:十六进制小写字符串,放入请求头
Signature。
计算示例
以进件提交接口为例,假设:
签名原文(第 7 行之后也有换行符):
平台验签流程
平台收到请求后依次校验,任何一步失败即拒绝:响应验签(平台 → 渠道商,可选但推荐)
平台对所有响应均签名(包括 4xx/5xx 错误响应),签名放入响应头Signature:
Client-Id/Signature-Type/Timestamp/Nonce-Str 与请求一致),仅最后一行替换为响应 body 原文,同样以 \n 结尾。
渠道商可用同一 app_secret 对响应验签,确认响应未被篡改。
防重放说明
Timestamp:限制请求在 5 分钟窗口内有效,过期请求拒绝(HTTP 401);Nonce-Str:同一 app_key 下 5 分钟窗口内不可重复,防止同一请求重放;- 两者同时校验,缺一不可。
注意事项
- 签名前不要格式化请求体(不要重新排序 JSON 字段、不要压缩/美化),对实际发送的字节签名;
- URL 必须包含完整协议与域名(
https://gw.xft.xin/openapi/v1/...),且与实际请求完全一致(含 query 参数原序); - 时间戳使用秒级;服务器时间与平台时间偏差过大时先校准系统时钟;
app_secret泄露时立即联系平台重置;- 对接期间可联系平台将接口加入验签豁免名单(仅限联调)。

