跳转到主要内容

Documentation Index

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

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

Webhook 是您的服务器实时了解支付事件的主要方式。无需轮询网关 API,您只需注册一个回调 URL,XPayLabs 就会在订单或收款状态变更时发送已签名的 POST 请求。

Webhook 如何工作?

  1. 您在网关配置中设置 callback-urlwebhook-secret
  2. 当事件发生时(例如检测到支付),网关构建一个 NotifyPayload 并发送到您的 URL。
  3. 您的服务器验证 HMAC-SHA256 签名并处理事件。

Webhook 负载格式

每个 Webhook 遵循 NotifyPayload 格式:
字段类型描述
signstring使用您的 webhook 密钥对 data 字段的 HMAC-SHA256 签名
timestampinteger事件的 Unix 时间戳
noncestring用于去重的唯一事件标识符
notifyTypestring事件类型标识符
dataobject事件负载(NotifyOrder 或相关对象)

有哪些 Webhook 事件类型?

订单事件

事件描述
ORDER_PENDING订单已创建,等待支付
ORDER_PENDING_CONFIRMATION检测到交易,等待区块确认
ORDER_SUCCESS支付已完全确认
ORDER_EXPIRED订单过期,未收到支付
ORDER_FAILED订单失败

收款(结算)事件

事件描述
COLLECT_PENDING热转冷归集已发起
COLLECT_SUCCESS归集成功完成
COLLECT_FAILED归集交易失败

签名验证

每个 Webhook 都包含一个按如下方式计算的 sign 字段:
sign = HEX(HMAC-SHA256(JSON.stringify(data), webhook_secret))
您必须在处理任何 Webhook 之前验证此签名。请参阅 Webhook 参考 获取 Node.js、Python 和其他语言的代码示例。

投递保证

  • 至少投递一次。 在极少数情况下,同一事件可能多次到达。使用 nonce 字段进行去重。
  • 带退避的重试。 如果您的端点返回非 2xx 状态或超时,XPayLabs 会使用指数退避重试。
  • 顺序性。 单个订单的事件按顺序投递。不同订单的事件可能乱序到达。

最佳实践

  1. 始终验证签名。 在处理 Webhook 之前,务必验证 sign 字段。
  2. 快速返回 200。 立即确认接收,然后异步处理事件。
  3. 使用 nonce 去重。 存储已处理的 nonce 以安全处理重复投递。
  4. 使用 ORDER_PENDING_CONFIRMATION 优化用户体验。 在交易完全确认之前,在 UI 中显示”检测到支付”。
  5. 使用 ORDER_SUCCESS 进行履约。 这是交付商品或服务的信号。
Last modified on May 31, 2026