钱包 API
Webhook 用法

Webhook 用法#

Webhooks 允许你在每次触发指定事件类型时向特定 URL 发送 POST 请求。 当你订阅数据时可以启用此功能,为你的应用程序添加正确的 URL,一旦触发指定事件类型,我们就会发送 POST 请求,并在请求正文中包含指定事件类型消息。

消息的内容类型 是“application/json”。

重要安全声明
配置 Webhook 时,请确保请求参数中不包含登录凭据或密码等敏感信息。通过 Webhook 传输敏感数据可能会将其暴露给未经授权的各方并导致安全漏洞。始终使用安全、经过身份验证的端点并加密敏感数据来保护你的信息。

请注意,我们仅接受端口号为 80 和 443 的 URL,对带有任何其他端口号的 URL 的请求将被拒绝。如果你的服务器未返回200 的状态码 ,则我们将开始重试。

重试次数
每次重试之间的延迟会增加。在最初的尝试之后,我们将进行最多7次额外的尝试。重试间隔如下:1、5、10、30、60、120、240分钟

幂等
您实现的webhook回调接口需要支持幂等

暂停推送
当出现以下任一情况时,将暂停发送通知

  • 一周内至少有100次通知失败。
  • 在整个生命周期内至少有500个通知失败。

另请注意,IPv6 目前无法与 Webhooks 配合使用,但我们可能会在将来实现这一点。

订阅#

//定义你的参数
const postSubscribeParams = {
    chainIndex: '3'
    url: 'http://your.server.com/webhook',
    type: 'transaction',
  };

//定义辅助函数
const postSubscribetData = async () => {
    const apiRequestUrl = getRequestUrl(
      apiBaseUrl,
      '/api/v5/waas/wallet/webhook/subscribe',
      postSubscribeParams
    );
    return fetch(apiRequestUrl, {
      method: 'post',
      headers: headersParams,
    })
      .then((res) => res.json())
      .then((res) => {
        return res;
      });
  };

const { data: subscribeData } = await postSubscribetData();

更多信息,请参考Webhook

接收回调消息#

为了接收回调信息,你需要搭建一个服务来响应 HTTP POST 请求。

为了便于快速测试,你可以使用第三方站点 webhook.site。它提供了很多工具并且允许你直接在 Web 浏览器中轻松检查、测试和自动化任何传入的 HTTPS 请求或电子邮件。

当你首次访问 webhook.site 时,你会看到如下信息,你可以用它完成测试。

https://webhook.site/#!/e7a56c2f-61d8-4c56-bb0f-6fa3f4ddedc5

回调消息规范

  1. 当消息类型是交易时
{
        "chainIndex": "3",
        "blockHeight": "110637354",
        "blockHash": "0xc9c865d75d3018cde8b5bfc691491c2da4f4d08ed4f926cf1b44ffbc6b0351a0",
        "blockHeight": "110637354",
        "blockTime": "1689214654000",
        "orderId":"12345"
        "input":"0x12345698554",
        "vin" : [
                    {
                      "addr" : "bc1p077evnzjv9w697a523jxvhyyt0aptmgunkk2a8wsppy3mty7gj7q9j6azc",
                      "number" : "0",
                      "txHash" : "3aead5cb471bf2d30b6c2bc9961a579a91ad0a7562800356e6c29f9c5b05a964",
                      "amount" : "2990241",
                      "voutIndex" : "1"
                    }
                  ],
      "voutIndex" : [
            {
              "addr":"",
              "addrInVin" : false,
              "number" : "0",
              "amount" : "0"
            },
            {
              "addr" : "bc1p6eu0hkl3jy449wrm52exssure7a8083dcsfkydh02c4vyrs2y83shdcmsy",
              "addrInVin" : false,
              "number" : "1",
              "amount" : "330"
            }
        ],
        "fee": "21351600000000",
        "fromAddr": "0x80c67432656d59144ceff962e8faf8926599bcf8",
        "fromAmount": "202484827205115828530",
        "gasLimit": "429723",
        "gasPrice": "100000000",
        "gasUsed": "213516",
        "txHash": "0xc9c59a01a0bddcca4e2365c2283967c78e7b4742dce93df182361c0ed593c80f",
        "iType": "0",
        "logIndex": "-1",
        "nonce": "831889",
        "status": "1",
        "symbol": "ARBITRUM",
        "toAddr": "0x56ba2193dd79f0eeeda77df04f5060e714e38029",
        "value": "1101146000000000003"       
}
  1. 当消息类型是区块时
[{
        "blockHeight": "8455400",
        "blockTime": "1689216050",
        "blockHash": "0xda14230da73a0ea116b1d693a9cbfaaf241eb08be25bb190a588faff7841773d",
        "preBlockHash": "0xb4bdbad327065225a44fddac74bac9f6345d3b87c651876adafc0f18ec4f41e5"
}]