API 标准与协议
传输与数据格式
签名与验签
响应判定
请始终按以下方式判断 API 响应结果:- 先检查 HTTP 状态码
- 再检查响应体中的
status、code、label和errorMessage字段 - 如果请求成功,则从
data字段提取业务数据
统一响应结构
所有 GatePay API 响应均遵循以下标准结构:请求参数规范
商户订单号 (merchantTradeNo)
商户订单号是你为每笔交易分配的唯一标识:
交易金额
时间戳格式
请求头与签名
必填请求头
每个 API 请求都必须包含以下请求头:签名字符串格式
签名基于三行字符串计算,每行都以换行符结尾 (\n):
<request_timestamp>取值为X-GatePay-Timestamp<request_nonce>取值为X-GatePay-Nonce<request_body>为请求的原始 JSON 请求体;如果没有请求体,则为空字符串
签名生成步骤
按以下步骤计算X-GatePay-Signature 请求头的值:
- 生成唯一的
X-GatePay-Timestamp(当前 UTC 毫秒时间) - 生成随机
X-GatePay-Nonce(长度不超过 32 个字符,且仅包含字母和数字) - 将原始 JSON 请求体读取为
request_body; 如果没有请求体则使用空字符串 - 构造签名字符串:
timestamp\nnonce\nbody\n - 使用你的 Payment API Secret 作为密钥计算 HMAC-SHA512
- 将结果编码为十六进制字符串
- 将计算得到的签名放入
X-GatePay-Signature请求头
请求结构示例
以下示例仅用于说明签名字符串的组成方式,不表示某个具体业务接口的完整请求参数。实际字段应以对应 API Reference 页面和 OpenAPI 定义为准。支付结果回调
回调概述
GatePay 会通过 HTTP POST 请求向你配置的回调 URL 发送异步支付通知,用于告知你的系统支付状态变化。 有关回调事件和处理方式的完整说明,请参见 通知与回调 指南。回调载荷结构
以下示例用于帮助理解回调封装格式。不同业务线在data 字段中的业务对象会有所不同,处理时应结合具体产品文档和对应回调 reference 一并理解。
GatePay 会 POST 以下结构的 JSON 载荷:
预期回调响应
你的回调接口必须返回一个 JSON 对象,表示处理成功:
成功响应示例:
回调验签步骤
你收到的每个回调都必须进行验签,以确认其来自 GatePay 且未被篡改:- 提取
X-GatePay-Timestamp请求头 - 提取
X-GatePay-Nonce请求头 - 提取
X-GatePay-Signature请求头 - 读取原始 JSON 回调请求体
- 按以下格式构造签名字符串:
timestamp\nnonce\nbody\n - 使用你的 Payment API Secret 作为密钥计算 HMAC-SHA512
- 将计算得到的签名与
X-GatePay-Signature请求头值进行比对 - 仅当签名完全一致时才处理回调
回调请求头
GatePay 向你的接口发送回调时,会包含以下请求头:时间窗口说明
文档中涉及两个不同的时间窗口,它们分别服务于不同场景:
接入时建议这样理解:
10 秒约束的是你发往 GatePay 的请求。5 分钟是商户在接收回调时可采用的安全校验策略建议值。- 如果你的系统希望采用更严格的回调时间窗口,可以在可接受的网络延迟范围内自行收紧。
工具与资源
签名验证工具
GatePay 提供在线工具,帮助你在开发阶段调试和验证签名: GatePay 签名验证工具 该工具可用于:- 使用示例数据测试签名生成
- 验证计算签名是否与预期值一致
- 调试签名相关接入问题
错误处理
有关完整错误码和 API 错误处理最佳实践,请参见 错误码与最佳实践 指南。安全最佳实践
- 安全密钥存储: 在服务端安全存储 Payment API Secret 和 Authorization Secret。不要在客户端代码或版本控制中暴露这些密钥。
- nonce 唯一性: 确保每个请求都使用唯一 nonce,以防止重放攻击。
- 时间戳校验: 对商户主动请求,确保时间戳偏差不超过 10 秒;对回调验签,可使用不超过 5 分钟的本地校验窗口作为防重放策略。
- 签名验证: 处理任何敏感操作前始终验证回调签名。
- 仅使用 HTTPS: 与 GatePay 的所有通信都必须使用 HTTPS 和 TLS 1.2 或以上版本。
- 回调幂等性: 将回调处理器设计为幂等,因为 GatePay 在未收到成功响应时可能会重试回调。
- 错误消息: 不要在返回给客户端的错误消息中暴露敏感信息(如密钥或内部系统详情)。

