认证与安全
本页为 GatePay API 的认证机制、安全协议及签名生成提供完整参考。协议要求
所有 GatePay API 请求必须遵守以下规范:| 项目 | 要求 |
|---|---|
| 传输协议 | HTTPS,TLS 1.2 及以上 |
| 数据格式 | JSON(Content-Type: application/json) |
| 签名算法 | HMAC-SHA512 |
统一响应结构
所有 API 响应均遵循以下统一格式:| 字段 | 类型 | 说明 |
|---|---|---|
status | string | 请求结果:SUCCESS 或 FAIL |
code | string | 错误码(成功时为 null) |
label | string | 错误名称(成功时为 null) |
errorMessage | string | 错误描述(成功时为 null) |
data | object/array/string/null | 业务数据 |
请求头
所有 API 请求必须包含以下请求头:| 请求头 | 说明 | 示例 |
|---|---|---|
X-GatePay-Certificate-ClientId | 创建应用后分配的 ClientId,唯一标识你的应用 | app_abc123def456 |
X-GatePay-On-Behalf-Of | (可选)机构子账户 ID,仅在代理子账户发起请求时传入 | sub_account_123 |
X-GatePay-Timestamp | UTC 毫秒时间戳。时间偏差超过 10 秒的请求将被拒绝 | 1704067200000 |
X-GatePay-Nonce | 随机字符串,用于防重放攻击。建议长度 ≤ 32,仅限字母和数字 | abc123xyz789 |
X-GatePay-Signature | 使用 HMAC-SHA512 计算的请求签名,见下方签名生成说明 | <64位十六进制字符串> |
签名生成
签名用于保证请求的完整性与真实性。请按以下步骤生成有效签名:签名串格式
签名串由三行组成,每行以换行符(\n)结尾:
- 第一行: X-GatePay-Timestamp 的值
- 第二行: X-GatePay-Nonce 的值
- 第三行: 请求体的原始 JSON 字符串(无请求体时为空字符串)
- 末尾换行: 第三行之后必须保留一个换行符
签名步骤
-
生成请求头: 创建
X-GatePay-Timestamp(当前 UTC 毫秒时间戳)和X-GatePay-Nonce(随机字符串,≤ 32 位字母数字)。 - 准备请求体: 取请求体的原始 JSON 字符串。如无请求体(如 GET 请求),则使用空字符串。
-
拼接签名串: 按如下格式拼接:
- 计算 HMAC-SHA512: 以 Payment API Secret 为密钥,对签名串计算 HMAC-SHA512,结果以十六进制字符串输出。
-
设置请求头: 将计算结果填入
X-GatePay-Signature请求头。
示例:POST 请求签名
请求信息:- 时间戳:
1704067200000 - Nonce:
abc123xyz789 - Payment API Secret:
my_secret_key - 请求体:
{"merchantTradeNo": "order_123", "currency": "USDT", "orderAmount": "100"}
示例:GET 请求签名
GET 请求无请求体时: 请求信息:- 时间戳:
1704067200000 - Nonce:
xyz789abc123 - Payment API Secret:
my_secret_key - 请求体:(空)
回调验签
GatePay 向你的回调地址发送通知时,需使用相同方式验证回调签名:回调请求头
回调请求包含以下用于验签的请求头:| 请求头 | 说明 |
|---|---|
X-GatePay-Timestamp | 回调发送时的 UTC 时间戳 |
X-GatePay-Nonce | 签名生成时使用的随机串 |
X-GatePay-Signature | 回调签名 |
验签步骤
-
从回调请求头中取出
X-GatePay-Timestamp、X-GatePay-Nonce、X-GatePay-Signature。 - 读取回调请求体的原始 JSON 字符串。
-
按以下格式拼接签名串:
- 以 Payment API Secret 为密钥计算 HMAC-SHA512。
-
将计算结果与
X-GatePay-Signature对比,一致则验签通过。 - 同时校验时间戳是否在合理范围内(如 5 分钟内),防止重放攻击。
签名验证工具
测试和调试签名时,可使用 GatePay 提供的在线工具: GatePay 签名验证工具 该工具支持:- 生成测试签名
- 验证签名正确性
- 排查签名不匹配问题
最佳实践
- 时间戳校验: 始终验证请求时间戳与服务器当前 UTC 时间的偏差是否在 10 秒以内。
- Nonce 唯一性: 每次请求使用不同的 Nonce 以防重放攻击。可将已用 Nonce 存入缓存,设置较短的 TTL(如 15 分钟)。
- 密钥管理: 妥善保管 Payment API Secret 和 Authorization Secret,切勿硬编码在源码中或提交至版本控制系统。
- 强制 HTTPS: 所有请求必须使用 TLS 1.2 及以上的 HTTPS,拒绝非 HTTPS 请求。
- 回调安全: 始终先验签再处理,并在回调端点实现幂等检查,防止重复投递导致业务异常。
- 错误处理: 签名错误时返回 HTTP 400,并记录日志供排查,注意不要在日志中暴露敏感数据。

