提现结果通知
接口说明
接口描述:当钱包提现成功时,平台网关会向商户系统发起回调通知。如果商户系统没有正确返回,平台网关会延迟再次通知。
适用对象:特约商户
请求URL:该链接是通过发起提现接口提交的参数notifyUrl设置,如果无法访问链接,商户系统将无法接收通知。
请求方式:POST
请求类型:application/x-www-form-urlencoded
通知参数
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 平台提现单号 | cashoutId | 是 | String(30) | C1724328933329321985 | 平台提现单号 |
| 商户号 | mchNo | 是 | String(30) | M1621873433953 | 商户号 |
| 应用ID | appId | 是 | String(24) | 60cc09bce4b0f1c0b83761c9 | 应用ID |
| 商户订单号 | mchOrderNo | 是 | String(30) | 20160427210604000490 | 返回商户传入的订单号 |
| 支付接口代码 | ifCode | 是 | String(30) | hnawalletpay | 支付接口代码 |
| 提现钱包用户编号 | walletId | 是 | String | 124442600 | 提现钱包用户编号 |
| 提现金额 | amount | 是 | long | 30 | 提现金额, 单位:分 |
| 提现状态 | state | 是 | int | 2 | 提现状态: 0-订单生成, 1-提现中, 2-提现成功, 3-提现失败 |
| 渠道提现单号 | channelOrderNo | 否 | String | T7812873321y8192 | 渠道提现单号,提现状态为2时返回 |
| 提现成功时间 | successTime | 否 | String | 2023-11-01 10:02:25 | 提现成功时间,提现状态为2时返回 |
| 扩展参数 | extParam | 否 | String | 134586944573118714 | 商户扩展参数,回调时会原样返回 |
| 备注 | remark | 否 | String | 备注 | 备注 |
| 渠道错误码 | errCode | 否 | String | 100E0047 | 渠道下单返回错误码 |
| 渠道错误描述 | errMsg | 否 | String | 账户余额不足 | 渠道下单返回错误描述 |
| 通知请求时间 | reqTime | 是 | String(30) | 1622016572190 | 通知请求时间,,13位时间戳 |
| 签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名值,详见签名算 |
返回结果
商户业务系统处理后同步返回给平台网关,返回字符串 success 则表示成功,返回非success则表示处理失败,支付中心会再次通知业务系统。(通知频率为0/30/60/90/120/150,单位:秒)
注意:返回的字符串必须是小写,且前后不能有空格和换行符。
通知示例数据
{
"amount": 1000,
"appId": "64e87b640d1480cf86ae4385",
"cashoutId": "C1724328933329321985",
"channelOrderNo": "",
"errCode": "",
"errMsg": "",
"extParam": "mchParams",
"ifCode": "hnawalletpay",
"mchNo": "M1692957540",
"mchOrderNo": "MT1699947028710",
"remark": "备注",
"state": 2,
"walletId": "2",
"reqTime": "1622016572190",
"sign": "099ECF5B1941F59A7319306F176CC5BA"
}
SDK验签代码示例
@RequestMapping("/mchJeepayWalletCashoutNotify")
public void mchJeepayWalletCashoutNotify(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 获取到请求参数
WalletCashoutNotifyResModel walletCashoutNotifyResModel = JeepayNotifyKit.convertWalletCashoutNotifyResModel(request);
// 获取到jeepay回调参数中的: mchNo 和 appId
String mchNo = walletCashoutNotifyResModel.getMchNo();
String appId = walletCashoutNotifyResModel.getAppId();
String mchOrderNo = walletCashoutNotifyResModel.getMchOrderNo(); // 商户请求单号
String mchAppSecret = ""; // TODO 根据[mchNo,appId]自行查询配置的秘钥
// 验签失败
if (!walletCashoutNotifyResModel.checkSign(mchAppSecret)) {
response.getWriter().print("sign fail");
return;
}
}