1. Webhook 回调
錢包中台服務
  • 用户钱包
    • 创建用户钱包
      POST
    • 查询用户信息
      GET
    • 查询用户充值地址
      GET
  • 提现
    • 发起提现
      POST
    • 查询提现记录
      GET
    • 查询单笔提现
      GET
  • 地址订阅
    • 订阅监控地址
      POST
    • 修改订阅
      PUT
    • 取消订阅
      DELETE
    • 查询订阅列表
      GET
  • Webhook 回调
    • 充值确认通知
      POST
    • 提现成功通知
      POST
    • 监控地址到账通知
      POST
    • 提现拒绝通知
      POST
  • 错误码
    • 错误码说明
      GET
  • 支持的链与币种
    • 链与币种说明
      GET
  • 租户余额
    • 查询所有币种余额
      GET
    • 查询单币种余额
      GET
  • Schemas
    • CreateAccountRequest
    • BaseResponse
    • WithdrawalApplyDTO
    • WatchAddressDTO
    • R_UserAccountResp
    • UserAccountResp
    • WithdrawalVO
    • R_WithdrawalRequest
    • PageResult_WithdrawalRequest
    • PageResult_WithdrawalVO
    • WithdrawalRequest
    • WalletAccountUser
    • R_Page_WithdrawalRequest
    • WebhookPayload_DepositConfirmed
    • WalletUserBalance
    • R_Object
    • WebhookPayload_WithdrawalSuccess
    • WatchAddressResp
    • WebhookPayload_WatchDeposit
    • TenantBalanceVO
    • WebhookPayload_WithdrawalEvent
  1. Webhook 回调

提现成功通知

POST
/webhook/withdrawal.success
提现交易链上确认成功后推送。
触发条件: 提现单的链上交易已被打包并达到对应链的确认块数。

通用规则(所有 webhook 共用)#

出站请求 Header#

Header说明
X-SIGNATUREBase64 RSA 签名,平台私钥对 timestamp={X-TIMESTAMP}&body={raw body} 做 SHA1WithRSA
X-TIMESTAMP毫秒时间戳
X-EVENT-TYPE事件类型(同 body 中 eventType)
商户用平台公钥验签即可。

ACK 规则#

返回 HTTP 200 且 body 满足以下任一条件视为成功,否则触发重试:
JSON {"code": 0}
JSON {"success": true}
JSON {"status": "ok"}
纯文本 ok(不区分大小写)

重试策略#

次数间隔累计
15 秒5 秒
230 秒35 秒
35 分钟5 分 35 秒
430 分钟35 分 35 秒
52 小时2 小时 35 分
624 小时26 小时 35 分
共 6 次重试(含首次共 7 次尝试),超过后不再重试。

回执签名(可选)#

ACK body 可携带签名供平台验证:
{"code": 0, "timestamp": "<毫秒>", "signature": "<Base64>"}
签名原文:tenantId={tenantId}&timestamp={timestamp}&code={code}
算法:SHA1WithRSA,商户私钥签名,平台用商户公钥验证
timestamp 偏移容忍:5 分钟
验签失败不会触发重试,仅在审计日志(receipt_verified 字段)中标记
启用方式:联系平台运营注册商户 RSA-2048 公钥(Base64 X.509,不含 -----BEGIN PUBLIC KEY----- 头尾,
openssl rsa -in priv.pem -pubout -outform DER | base64 -w0 即可生成)

Fire-and-Forget 模式#

联系运营把租户配置 webhookRequireAck=0,此模式下平台只推一次,不重试。

幂等性#

每个事件携带唯一 eventId(UUID),商户应使用 eventId 做幂等去重。

Request

Header Params

Body Params application/jsonRequired

Example
{
    "eventId": "660e8400-e29b-41d4-a716-446655440001",
    "eventType": "withdrawal.success",
    "timestamp": 1777010600000,
    "tenantId": 1,
    "data": {
        "orderId": "WD-ADB108F2372040068D27D9CE44BC2C35",
        "externalOrderId": "TENANT-WD-20260506-0001",
        "network": "BNB",
        "currency": "USDT",
        "toAddress": "0x789...abc",
        "amount": "1.370000",
        "fee": "0.050000",
        "txHash": "0xdef...123"
    }
}

Request Code Samples

Shell
JavaScript
Java
Swift
Go
PHP
Python
HTTP
C
C#
Objective-C
Ruby
OCaml
Dart
R
Request Request Example
Shell
JavaScript
Java
Swift
curl --location '/webhook/withdrawal.success' \
--header 'X-SIGNATURE;' \
--header 'X-TIMESTAMP;' \
--header 'X-EVENT-TYPE;' \
--header 'Content-Type: application/json' \
--data '{
    "eventId": "660e8400-e29b-41d4-a716-446655440001",
    "eventType": "withdrawal.success",
    "timestamp": 1777010600000,
    "tenantId": 1,
    "data": {
        "orderId": "WD-ADB108F2372040068D27D9CE44BC2C35",
        "externalOrderId": "TENANT-WD-20260506-0001",
        "network": "BNB",
        "currency": "USDT",
        "toAddress": "0x789...abc",
        "amount": "1.370000",
        "fee": "0.050000",
        "txHash": "0xdef...123"
    }
}'

Responses

🟢200
接收成功
This response does not have a body.
Modified at 2026-05-07 09:40:42
Previous
充值确认通知
Next
监控地址到账通知
Built with