搜索结果

×

搜索结果将在这里显示。

提现结果通知

接口说明

接口描述:当钱包提现成功时,平台网关会向商户系统发起回调通知。如果商户系统没有正确返回,平台网关会延迟再次通知。

适用对象:特约商户

请求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;
        }
    }