入账判断
为什么 10 个区块即可认为到账?基于 Ethereum 2.0 Beacon Chain 的 Finalize 机制,10 个区块后交易被回退的概率已极低。官方建议的完全确认为 100 个区块(15-20 分钟),但 10 个区块已满足绝大多数业务场景的安全要求。
Payload 示例
字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
event_id | string | 事件唯一标识 |
type | string | 事件类型(wallets.transaction.created / updated / succeeded) |
created_timestamp | number | 事件创建时间戳(毫秒) |
data.transaction_id | string | 交易唯一标识 |
data.wallet_id | string | 商户钱包 ID |
data.type | string | 交易类型(Deposit = 充值) |
data.status | string | 交易状态(Confirming / Completed) |
data.source.addresses | array | 充值来源地址(终端用户的地址) |
data.destination.amount | string | 充值金额 |
data.destination.address | string | 充值目标地址(商户的收款地址) |
data.chain_id | string | 链标识 |
data.token_id | string | 代币标识 |
data.confirmed_num | number | 当前区块确认数 |
data.confirming_threshold | number | 所需最小确认数 |
data.transaction_hash | string | 链上交易哈希 |
data.block_info | object | 区块信息(区块号、时间戳) |
data.timeline | array | 状态变更时间线 |
处理建议
幂等处理
幂等处理
同一笔充值可能触发多次 Webhook(created → updated → succeeded)。请使用
transaction_id 做幂等判断,避免重复入账。验证 wallet_id
验证 wallet_id
收到事件后,先校验
data.wallet_id 是否为您的项目钱包,非本项目的事件应忽略。对账兜底
对账兜底
除 Webhook 外,建议定期调用 交易记录 接口做对账兜底,防止 Webhook 丢失。
Manual 收单场景
Manual 收单复用本回调:付款方向后台创建的固定地址转账后,系统通过正常的 Webhook 通道推送与线上充值完全相同的事件结构。没有新的通知机制——商户直接复用已有的入账处理代码即可。项目区分方式与线上一致:事件中的
data.wallet_id 即项目收单钱包 ID(现成字段),各项目对应的钱包 ID 由 NUSDpay 在接入时提供,商户据此路由(如仅将线下入账转发到运营通知群)。常用字段对照
从第三方收单服务迁移时,常见通知字段与本回调的映射关系:| 常见字段 | NUSDpay Webhook 字段 | 说明 |
|---|---|---|
walletName(地址备注) | — | Webhook 不下发地址备注。商户侧以 data.destination.address 反查创建地址时填写的「描述」,自行维护映射 |
chain | data.chain_id | 链标识(上文 Payload 示例中的 TBSC_BNB 为测试网值,生产取值以实际回调为准) |
toAddress | data.destination.address | 固定收款地址 |
notifyTime | created_timestamp | 毫秒时间戳(UTC) |
orderAmount | data.destination.amount | 链上收到的原始金额(服务费与汇率换算前) |
currency | data.token_id | 代币标识,含链前缀(如 TRON_USDT),完整列表见 支持的币种与公链 |
hash | data.transaction_hash | 链上交易哈希 |
txId | data.transaction_id | NUSDpay 交易 ID(幂等键) |
status | type + data.status | type 为 wallets.transaction.succeeded 且 status 为 Completed 即成功;或 confirmed_num ≥ 10(同上文「入账判断」) |
mchNo(商户号/项目号) | data.wallet_id | 以项目钱包 ID 区分项目(现成字段),各项目对应的 ID 由 NUSDpay 提供 |