Skip to main content

3、回调

当下单成功后,会尝试发送消息通知发起方,在下单的时候指定 notifyUrl 参数覆盖默认回调地址。 当不传此参数时,会对商户的默认回调地址进行回调请求(创建商户时,默认回调地址由商户提供)
注:为满足业务发展需要,回调通知参数可能会在后续版本中进行扩展或新增字段,新增字段将按照签名规则自动参与签名计算(除非规则中明确排除)。


param.put("notifyUrl", "http://{域名}/callback/notifyUrl");

回调的方式是:POST application/json

回调参数JSON化示例:

{
"amount":"100",
"bizType":"WITHDRAW_ANY_DIGITAL_WALLET",
"blockchain": {
"network":"TRON",
"receiverAddress":"THcJ2FeNBkuzd4PZBpRans6tx9QGg9KHRt",
"senderAddress":"TE35TrUfHjbGEBsVS6zVXdHS8HxXCWwC2y",
"txId":"d848e4b62ec6925b8b3ff49dbc4d839f3f88508497c3af525f0c8293cb303ab3"
},
"currency":"CNY",
"localOrderId":"TestOTM0625ROB016",
"merchantActualAmount":"138.12",
"merchantCurrency":"CNY",
"merchantId":302992856974,
"merchantPaidAmount":"100",
"notifyTime":1772173006425,
"orderCreateTime":1772172958082,
"orderId":"472515854147845",
"status":"SUCCESS",
"type":"WITHDRAW",
"userAmount":"14.971722",
"userCurrency":"USDT",
"userMinerFee":"0",
"userReceivableAmount":"14.971722",
"sign":"2c27c7e8184cc709a64ad502ee42eab7",
"key":"9yUreYgTRtit39Dy"
}

回调参数说明:回调参数后

参数名称类型参与签名参数含义参数说明
amountdecimal订单金额
bizTypeenum订单类型bizType 类型说明如下
blockchainobject链交易信息当下单请求参数isBlockchain为true,回调请求会携带此对象信息。(只涉及链上交易时,isBlockchain参数会生效)
└networkString主网
└receiverAddressString接收地址
└senderAddressdecimal发送地址
└txIdString交易ID
currencyString币种
keyString商户 key
localOrderIdString本地订单号
merchantActualAmountdecimal商户实际收款金额
merchantCurrencyString商户收款币种默认币种
merchantIdString商户号
merchantPaidAmountdecimal商户收款金额
merchantUserIdString用户 id
notifyTimelong回调时间
orderCreateTimelong订单创建时间
orderIdString订单号
statusString支付状态SUCCESS:已完成 | FAIL:已失败
typeString订单类型PAYMENT:支付 WITHDRAW:提款
userAmountdecimal用户付款金额
userCurrencyString用户支付币种
userMinerFeeString矿工费提款矿工费
userReceivableAmountString应付/应收金额用户应付/应收金额
signStringmd5 签名详情看签名算法

bizType 类型说明:

1、PAYMENT_WALLET_SCAN MINPAY钱包扫码支付
2、PAYMENT_TRANSFER 数字币绑定地址直充
3、PAYMENT_ANY_DIGITAL_SCAN 数字币任意金额扫码支付
4、WITHDRAW_WALLET 提款至MINPAY钱包
5、WITHDRAW_ANY_DIGITAL_WALLET 提款数字币至任意钱包
6、PAYMENT_FIXED_DIGITAL_SCAN 数字币限定金额扫码支付
7、BATCH_PAY 批量代付

当您收到回调通知后,请在处理完成后直接返回字符串 success,表示已成功接收并处理该消息。 系统在收到 success 响应后,将不再对该笔回调进行重复发送。 若未收到期望响应(未返回 success 或返回异常),系统将按照阶梯式重试机制重新发送回调通知,最多重试 14 次。 当前重试时间间隔依次为: 15s, 15s, 30s, 180s, 600s, 1200s, 1800s, 1800s,1800s,3600s,10800s,10800s,21600s,21600s

签名校验

服务器在发送回调消息时,会使用下单的 API 进行签名,接收方需验证签名后进行逻辑处理,,服务器的签名过程和下单发起签名(文档2)的过程一致,接收方需要使用回调请求中的 body 进行加密,并校验回调的sign是否一致

代码示例

public void notify(JSONObject data){

log.info("收到回调通知 {}", data.toJSONString());

String key = "key";
String secret = "secret";

//验证签名
String sign = data.getString("sign");
data.put("key", key);
data.remove("sign");

String validStr = SignUtils.getSign(data, secret);

if(!validStr.equals(sign)){
throw new DxBizException("签名错误");
}
}