网站如何接入 USDT 收款接口:下单、验签与到账通知
接入 USDT 收款接口,需要把网站订单与链上付款可靠地关联起来。UUGate 支持 TRC20-USDT 和 BEP20-USDT;下单、付款展示、状态查询与到账回调应使用同一个订单和网络。本文以一次固定金额的 TRC20 收款为例。
准备商户身份与回调地址
在商户后台准备 Merchant UID、API Key 和自己的公网 HTTPS 回调地址。API Key 只保存在服务端环境变量或受保护配置中,不放到网页、插件公开目录或浏览器请求里。先核对商户状态、费用账户和套餐限制,完整鉴权方式见请求签名说明。
创建订单并保存返回结果
服务端向 POST /openapi/payin/orders 发送以下请求体。它不是可直接执行的完整请求;仍需使用 SDK 或按文档添加五个鉴权请求头。
{
"chainCode": "TRON",
"tokenSymbol": "USDT",
"merchantOrderNo": "EXAMPLE-20260928-001",
"amount": "10.00",
"notifyUrl": "https://merchant.example.com/payments/uugate"
}
金额使用字符串。保存返回的 orderNo、merchantOrderNo、cashierUrl 和 expireAt,再把收银台链接交给付款人。返回 waiting_payment 表示已创建待付款订单,不代表收到资金。参数和响应见创建收款订单。
验证回调后完成业务
使用创建该订单时的 API Key,按回调时间戳、nonce 和原始请求体校验签名;不要重新序列化 JSON 再验签。还要核对商户、订单、网络、币种和实收金额。以平台订单号建立唯一约束,在同一事务中写付款记录和业务状态,成功持久化后返回 2xx;重复通知只确认已处理结果,避免再次发货或充值。实现细节见收款回调。
超时和缺失通知怎么处理
浏览器返回成功页不能作为付款依据。已经拿到平台订单号时,使用订单查询核对最终状态;本地业务确认成功以 status=completed 为准。创建请求超时但未拿到订单号时,先在后台核实创建结果,不能假定商户订单号具有自动幂等重试保证并直接再次下单。
上线前逐项验收
- 分别验证正常付款、错误签名、重复回调和回调暂时不可达。
- 验证过期、少付和错链付款不会直接触发发货。
- 保存订单号、交易哈希和回调处理结果用于对账,日志不记录 API Key。
- 从Node.js SDK或PHP / Laravel SDK开始联调;收费与适用网络同时参考USDT 收款接口和定价。