Skip to content

Webhooks ​

Webhooks 让 SlaunchX 向您的服务器推送实时事件通知,无需轮询 API 来获取状态变更。当某些事件发生时——转账完成、钱包创建、付款结算——SlaunchX 会向您注册的端点发送一个 HTTP POST 请求,其中包含描述事件的 JSON 载荷。

这在以下场景特别有用:

  • 异步工作流 -- 无需轮询即可响应转账完成事件。
  • 实时仪表盘 -- 即时更新余额和状态。
  • 审计追踪 -- 按发生顺序记录每个事件。

设置 Webhooks ​

通过 API ​

通过发送 POST 请求注册 webhook 端点:

通过管理面板 ​

  1. 在您的工作区管理面板中导航到 设置 > Webhooks。
  2. 点击 添加端点。
  3. 输入您的 HTTPS 端点 URL。
  4. 选择您要订阅的事件。
  5. 保存。SlaunchX 将为您生成一个签名密钥——请安全存储。

:::caution 需要 HTTPS Webhook 端点必须使用 HTTPS。SlaunchX 不会在生产环境中向纯 HTTP URL 发送事件。在沙箱模式下,允许使用 HTTP URL 进行本地开发。 :::


事件类型 ​

以下事件可用于 webhook 订阅:

事件说明
transfer.created新的转账订单已创建
transfer.completed转账已成功执行
transfer.failed转账执行失败
payment.created付款已发起
payment.completed付款已成功结算
payment.failed付款结算失败
wallet.created新的钱包账户已创建
wallet.updated钱包的状态或配置已变更
wallet.frozen钱包已被管理员冻结

您可以订阅单个事件,或使用 * 接收所有事件。


载荷格式 ​

每个 webhook 投递都是一个 HTTP POST 请求,JSON 请求体遵循以下结构:

json
{
  "id": "evt_8f4a2b3c7d9e",
  "type": "transfer.completed",
  "timestamp": 1709337600000,
  "data": {
    "transferId": "txn_789xyz",
    "sourceWalletId": "w_123",
    "targetWalletId": "w_456",
    "amount": "100.00",
    "currency": "USD",
    "status": "COMPLETED"
  }
}

载荷字段 ​

字段类型说明
idstring唯一事件标识符。用于幂等处理。
typestring事件类型(参见 事件类型)。
timestamplong事件时间戳(毫秒级 epoch)。
dataobject事件特定载荷。结构取决于事件类型。

投递请求头 ​

每个 webhook 请求包含以下 HTTP 请求头:

请求头说明
Content-Type始终为 application/json
X-Webhook-Id与载荷中的 id 字段相同
X-Webhook-Timestamp请求发送时的 Unix 时间戳(秒)
X-Webhook-Signature用于验证的 HMAC-SHA256 签名(见下文)
User-AgentSlaunchX-Webhooks/1.0

签名验证 ​

每个 webhook 投递都经过签名,以便您验证其来自 SlaunchX 且未在传输过程中被篡改。签名计算方式为:

signature = hex(HMAC-SHA256(webhookSecret, timestamp + "." + rawBody))

其中:

  • webhookSecret 是您在创建 webhook 端点时获得的签名密钥。
  • timestamp 是 X-Webhook-Timestamp 请求头中的值。
  • rawBody 是原始 HTTP 请求体(不要解析后再重新序列化)。

验证示例 ​

:::caution 始终验证签名 在处理 webhook 载荷之前务必先验证签名。这可以防止伪造的请求。此外,检查时间戳以防止重放攻击——拒绝任何时间戳超过 5 分钟的请求。 :::


重试策略 ​

如果您的端点在 5 秒 内没有返回 2xx 状态码,SlaunchX 会认为投递失败,并使用指数退避进行重试:

尝试失败后延迟
第 1 次重试1 分钟
第 2 次重试5 分钟
第 3 次重试30 分钟
第 4 次重试2 小时
第 5 次重试8 小时

经过 5 次重试失败(共 6 次尝试)后,该事件将被标记为失败。您可以从管理面板或通过 API 手动重试失败的投递。

自动禁用

如果您的端点连续 3 天持续失败,SlaunchX 将自动禁用该 webhook 并通过电子邮件通知您的账户管理员。端点恢复健康后,可从管理面板重新启用。


最佳实践 ​

快速响应 ​

在 5 秒 内返回 200 OK 响应。将任何耗时处理改为异步执行——先确认接收,然后在后台任务或队列中处理事件。

收到 webhook  -->  验证签名  -->  返回 200  -->  加入处理队列
                                                      |
                                               异步处理事件

幂等地处理事件 ​

Webhook 投递可能会被重试,这意味着您的端点可能多次收到同一个事件。使用 id 字段进行去重:

  1. 收到事件时,检查是否已处理过具有该 id 的事件。
  2. 如果是,返回 200 并跳过处理。
  3. 如果否,处理事件并记录该 id。

使用队列 ​

对于高吞吐量集成,将收到的事件写入消息队列(例如 RabbitMQ、SQS、Redis Streams),然后用单独的 worker 处理。这将接收和处理解耦,确保您始终在超时时间内响应。

处理前先验证 ​

始终在处理载荷之前验证 webhook 签名。即使请求看起来来自已知 IP,也不要在未验证的情况下信任 webhook 请求的内容。

监控投递健康状况 ​

定期检查管理面板中的 webhook 投递日志。失败的投递可能表明端点停机、证书问题或需要关注的网络问题。


测试 ​

沙箱环境 ​

沙箱环境支持完整的 webhook 功能。在上线前使用它来测试您的集成:

  1. 创建沙箱 webhook -- 注册您的开发端点(沙箱中允许使用 HTTP)。
  2. 触发测试事件 -- 使用沙箱 API 创建转账、钱包等。这些操作会向您的端点生成真实的 webhook 投递。
  3. 检查投递 -- 在沙箱管理面板中查看投递日志,了解载荷、响应码和时间信息。

发送测试事件 ​

您可以从管理面板发送测试事件,以验证您的端点是否可达并能正确处理:

  1. 进入 设置 > Webhooks。
  2. 点击要测试的端点。
  3. 点击 发送测试事件。
  4. 选择事件类型。
  5. SlaunchX 向您的端点发送示例载荷并显示响应。

本地开发 ​

对于本地开发,使用隧道服务将您的本地服务器暴露到互联网:

重放事件

如果您需要重新处理某个事件(例如在修复处理程序中的 bug 之后),可以使用管理面板重放特定的投递。每次重放都会使用原始载荷生成一次新的投递尝试。


后续步骤 ​

  • HMAC 认证 -- 了解如何使用 HMAC-SHA256 签名认证 API 请求。
  • 错误处理 -- 了解响应信封格式和错误码。

Elaypay API 文档