当终端用户向商户的收款地址充值时,NUSDpay 通过 Webhook 推送充值事件。

入账判断

满足以下任一条件,即可判断充值已到账:
  1. 事件 type 为 wallets.transaction.succeeded 且 status 为 Completed
  2. 区块确认数 confirmed_num ≥ 10
为什么 10 个区块即可认为到账?基于 Ethereum 2.0 Beacon Chain 的 Finalize 机制,10 个区块后交易被回退的概率已极低。官方建议的完全确认为 100 个区块(15-20 分钟),但 10 个区块已满足绝大多数业务场景的安全要求。

Payload 示例

字段说明

处理建议

同一笔充值可能触发多次 Webhook(created → updated → succeeded)。请使用 transaction_id 做幂等判断,避免重复入账。
收到事件后,先校验 data.wallet_id 是否为您的项目钱包,非本项目的事件应忽略。
除 Webhook 外,建议定期调用 交易记录 接口做对账兜底,防止 Webhook 丢失。

Manual 收单场景

Manual 收单复用本回调:付款方向后台创建的固定地址转账后,系统通过正常的 Webhook 通道推送与线上充值完全相同的事件结构。没有新的通知机制——商户直接复用已有的入账处理代码即可。
项目区分方式与线上一致:事件中的 data.wallet_id 即项目收单钱包 ID(现成字段),各项目对应的钱包 ID 由 NUSDpay 在接入时提供,商户据此路由(如仅将线下入账转发到运营通知群)。

常用字段对照

从第三方收单服务迁移时,常见通知字段与本回调的映射关系:
典型用法:订阅本回调 → 校验 wallet_id 为 Manual 收单钱包 → 按上表组装消息 → 推送到内部 IM 群机器人(如飞书/企微),运营无需登录后台即可实时看到线下入账。