跳转到主要内容

Documentation Index

Fetch the complete documentation index at: https://docs.gate.com/llms.txt

Use this file to discover all available pages before exploring further.

概述

本页提供一个面向正式接入环境的最小可运行示例,帮助商户从 0 到 1 跑通第一条 GatePay 支付链路。 本文档以正式接入流程为主。在开始联调前,建议先完成商户资质、应用创建、密钥配置与回调地址准备。 如果你是第一次接入,建议按以下顺序完成:
  1. 获取 ClientId 与签名密钥
  2. 按签名规则生成请求头
  3. 创建第一笔收银台订单
  4. 接收并验证异步回调
  5. 使用查单接口做最终确认

第一步:准备凭证

在商户后台完成应用创建后,至少准备以下信息:
凭证用途
ClientId作为 X-GatePay-Certificate-ClientId 请求头传入
Payment API Secret用于生成支付类接口签名
回调地址用于接收异步通知
如果你尚未完成这一步,请先参见 总览认证

第二步:构造签名请求头

GatePay 请求签名至少需要以下头信息:
  • X-GatePay-Certificate-ClientId
  • X-GatePay-Timestamp
  • X-GatePay-Nonce
  • X-GatePay-Signature
签名串的核心结构为:
timestamp\nnonce\nbody\n
接入建议:
  • timestamp 使用 UTC 毫秒时间戳
  • nonce 使用一次性随机串
  • body 必须与实际发送报文完全一致
  • 先本地打印签名串,再计算签名,最容易定位联调问题

Python 签名示例

import hmac
import hashlib

timestamp = "1710000000000"
nonce = "abc123xyz789"
body = '{"merchantTradeNo":"M202604150001","currency":"USDT","orderAmount":"10.00"}'
secret = "your_payment_api_secret"

payload = f"{timestamp}\n{nonce}\n{body}\n"
signature = hmac.new(
    secret.encode("utf-8"),
    payload.encode("utf-8"),
    hashlib.sha512,
).hexdigest()

print(signature)

Node.js 签名示例

const crypto = require("crypto");

const timestamp = "1710000000000";
const nonce = "abc123xyz789";
const body = '{"merchantTradeNo":"M202604150001","currency":"USDT","orderAmount":"10.00"}';
const secret = "your_payment_api_secret";

const payload = `${timestamp}\n${nonce}\n${body}\n`;
const signature = crypto
  .createHmac("sha512", secret)
  .update(payload, "utf8")
  .digest("hex");

console.log(signature);
完整签名规则请参见 安全与签名

第三步:创建第一笔支付订单

下面示例使用托管收银台支付作为第一条链路,因为它最适合快速验证签名、下单、回调和查单。 请求接口
POST /v1/pay/checkout/order
最小请求示例 说明:
  • 当前公开文档中的普通商户 API 示例默认不展示 X-GatePay-On-Behalf-Of 请求头。
  • 实际对接时,该字段的具体取值应按你的主体归属方案与接口定义填写。
curl -X POST "https://openplatform.gateapi.io/v1/pay/checkout/order" \
  -H "Content-Type: application/json" \
  -H "X-GatePay-Certificate-ClientId: your_client_id" \
  -H "X-GatePay-Timestamp: 1710000000000" \
  -H "X-GatePay-Nonce: abc123xyz789" \
  -H "X-GatePay-Signature: generated_signature" \
  -d '{
    "merchantTradeNo": "M202604150001",
    "currency": "USDT",
    "orderAmount": "10.00",
    "goods": {
      "goodsName": "Demo Order",
      "goodsDetail": "First payment integration test"
    },
    "callbackUrl": "https://merchant.example.com/webhook/gatepay",
    "returnUrl": "https://merchant.example.com/result"
  }'
普通商户请求仅需携带 GatePay 标准签名请求头。 响应中重点关注
字段说明
prepayIdGatePay 预订单号,后续查单会用到
location托管收银台跳转地址
qrContent某些模式下返回的二维码内容链接
创建成功后,商户前端应直接使用返回的 location 跳转,不要手动拼接页面地址。

第四步:接收异步回调

用户完成支付后,GatePay 会向你配置的回调地址发送异步通知。 回调示例
{
  "bizType": "PAY",
  "bizId": "6948484859590",
  "bizStatus": "PAY_SUCCESS",
  "client_id": "your_client_id",
  "data": "{\"merchantTradeNo\":\"M202604150001\",\"orderAmount\":\"10.00\"}"
}
你的回调处理逻辑至少应做到:
  1. 验签
  2. 按业务唯一标识做幂等
  3. 更新本地订单状态
  4. 返回 HTTP 200 与约定成功响应
统一回调说明请参见 通知

第五步:查单做最终确认

对于支付链路,推荐采用“回调优先,查单兜底”的方式。 请求接口
GET /v2/pay/order/query
最小查询示例
curl -X GET "https://openplatform.gateapi.io/v2/pay/order/query?merchantTradeNo=M202604150001" \
  -H "X-GatePay-Certificate-ClientId: your_client_id" \
  -H "X-GatePay-Timestamp: 1710000005000" \
  -H "X-GatePay-Nonce: query123" \
  -H "X-GatePay-Signature: generated_signature" \
对支付确认链路,建议把以下两个信号分开处理:
  • 回调用于实时推进业务流程
  • 查单用于最终确认和对账

首次上线前检查清单

  • 已确认 ClientId、Secret 与回调地址配置无误
  • 已在服务端实现签名与验签
  • 已保存 merchantTradeNoprepayId
  • 已实现回调幂等
  • 已接入查单接口作为兜底
  • 已准备生产监控与失败告警

下一步建议

  • 如果你要接入完整收款能力,继续阅读 支付
  • 如果你要接入法币结算,继续阅读 OTC
  • 如果你要接入批量出金,继续阅读 出金