回调通知
入金到账、出金处理完成(成功或拒绝)后,平台会向你的回调地址发一个 POST 请求。
回调地址
| 订单 | 用哪个地址 |
|---|---|
| 入金 | 下单时传的 callbackUrl;没传就用商户后台的「入金回调地址」 |
| 出金 | 下单时传的 callbackUrl;没传就用商户后台的「出金回调地址」 |
回调地址必须是公网可以访问的 https 地址。只有通过开放接口创建的出金订单才会回调;在商户后台手动提交的出金不回调。
请求格式
http
POST /你的回调路径 HTTP/1.1
Content-Type: application/json
{"encryptedData":"Base64 字符串"}encryptedData 是用你的公钥加密的 JSON(PKCS#1 v1.5),用你的私钥解密。
入金回调内容
json
{
"OrderNo": "PI1845290017342758912",
"MerchantNo": "你的商户号",
"MerchantOrderNo": "A20261013001",
"PayTime": "2026-10-13T12:00:00",
"OrderState": 6,
"Quantity": 13.7,
"FiatCurrency": 100.0
}| 字段 | 类型 | 说明 |
|---|---|---|
OrderNo | string | 平台订单号 |
MerchantNo | string | 商户号 |
MerchantOrderNo | string | 你的商户订单号 |
PayTime | string | 客户付款时间,UTC+8,格式 yyyy-MM-ddTHH:mm:ss |
OrderState | int | 订单状态,回调时固定是 6(已释放:平台已确认收到钱,USDT 已记入你的余额) |
Quantity | number | 这笔订单折合的 USDT 数量(扣手续费前) |
FiatCurrency | number | 法币金额(就是下单金额) |
出金回调内容
json
{
"OrderNo": "PO1845290017342758913",
"MerchantNo": "你的商户号",
"MerchantOrderNo": "PO20261013001",
"PayTime": "2026-10-13T12:30:00",
"state": 4
}| 字段 | 类型 | 说明 |
|---|---|---|
OrderNo | string | 平台出款单号 |
MerchantNo | string | 商户号 |
MerchantOrderNo | string | 你的商户订单号 |
PayTime | string | null | 处理完成时间,UTC+8 |
state | int | 4 处理成功;5 拒绝(冻结的 USDT 已退回) |
字段名大小写
回调内容的字段名是大写开头(OrderNo),出金的状态字段是小写的 state,和接口返回的小驼峰不一样。建议解析时不区分大小写。回调内容里的数字没有四舍五入,以查询订单返回的为准。
你要返回什么
处理成功后,返回 HTTP 2xx,内容为下面任意一种:
- 纯文本
success(或ok,不区分大小写,前后不能有空格或换行) - JSON
{"code":200}
其他任何返回(包括超时、非 2xx、其他内容)都算失败,平台会重发。
重发规则
第一次回调在订单完成后 30 秒内发出。失败后按下面的间隔重发,最多一共 5 次:
| 第几次 | 距离上一次 |
|---|---|
| 1 | 订单完成后 30 秒内 |
| 2 | 3 分钟 |
| 3 | 9 分钟 |
| 4 | 27 分钟 |
| 5 | 81 分钟 |
5 次都失败就不再回调,订单状态可以在商户后台查看,或用查询订单主动查。回调失败不代表付款失败。
必须做的核对
回调没有签名
回调只是用你的公钥加密,没有签名。任何拿到你公钥的人都能伪造一条「已到账」的回调。所以不能只看回调内容就给客户入账。
收到回调后请按这个顺序处理(范例代码都已实现):
- 解密,解不开直接返回失败。
- 核对商户号是你自己的。
- 去重:同一个
OrderNo+ 同一个状态只处理一次。平台会重发,你的处理也可能在返回success之前中断。建议在数据库里给「平台订单号 + 状态」建唯一索引,和入账放在同一个事务里。 - 复核:用
MerchantOrderNo调查询订单,以接口返回为准:- 入金:状态必须是
6(已释放)或3(成功),金额要等于回调里的FiatCurrency,也要等于你自己系统里这笔订单的金额; - 出金:状态要和回调的
state一样,金额要等于你自己系统里的出款金额。
- 入金:状态必须是
- 都通过后再入账 / 更新订单,最后返回
success。
另外建议:回调接口限制请求体大小(几 KB 足够)、只接受 POST、日志里不要记录完整的请求内容。