代付回调
回调场景
- 支付完成后,支付中心会把相关支付结果和相关信息发送给商户,商户需要接收处理,并返回应答。 对后台通知交互时,如果支付中心收到商户的应答不是成功或超时,支付中心则认为通知失败,会在一定的策略定期重新发起通知,尽可能提高通知的成功率,但不保证通知最终能成功。 (通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)
提示
同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。 推荐的做法是,当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。
特别提醒:商户系统对于订单回调的内容一定要做签名验证,并校验返回的订单金额是否与商户侧的订单金额一致,防止数据泄漏导致出现“假通知”,造成资金损失。
回调网关
- 统一下单接口提交的参数 notify_url 设置
- 如果无法访问链接,您的业务系统将无法接收到支付中心的通知
回调请求
字段名 | 变量名 | 类型 | 必填 | 示例值 | 说明 |
---|---|---|---|---|---|
错误码 | result_code | string | TRUE | OK | 结果码. OK:成功,其他:失败 |
返回消息 | result_msg | string | TRUE | SUCCESS | 提示信息. SUCCESS:成功 |
数据对象 | charge | object | TRUE | 返回支付对象(请看下方具体数据) |
样例:
{
"result_code": "OK",
"result_msg": "SUCCESS",
"charge": {
"uid": 100000,
"userid": "U123456789",
"out_trade_no": "23092024183233784",
"trade_no": "9451fa8fac8569dab6443cb54270728a",
"in_trade_no": "",
"subject": "pay_test",
"body": "pay_test",
"channel": "vnpay_payout",
"paytype": 0,
"extra": "{\"accountname\":\"Nguyễn Thành Phát\",\"bankaccount\":\"0824287105\",\"bankcode\":\"MB\"}",
"currency": "VND",
"amount": "10000.000",
"order_amount": "10000.000",
"pay_amount": "10000.000",
"amount_paid": "10000.000",
"keyword": null,
"urate": "0.000",
"ufixed_fee": "0.000",
"user_in": "10000.000",
"client_ip": "127.0.0.1",
"return_url": "http://localhost:8001/demo.html",
"notify_url": "http://localhost:8001/cashier/demonotify",
"image_list": null,
"image_text": null,
"remark": null,
"create_time": 1727087554,
"update_time": 1727088044,
"out_status": 23,
"status": 2,
"is_status": 0,
"merchant_wallet": {
"uid": 100000,
"currency": "VND",
"total_limit_credits": "-1000000000.00",
"total_security_deposit_credits": "0.00",
"total_unsettled_credits": "126131.33",
"total_hold_credits": "0.00",
"total_commission_credits": "229.47",
"total_available_credits": "-42728.13"
}
}
}
提示
以下是成功通知的数据样例
[status] 为订单业务状态
- 0-关闭订单
- 1-等待支付
- 2-支付成功
- 3-支付失败
- 4-正在支付
- 5-结算成功
- 6-退款成功
- 7-投诉纠纷
[out_status] 为下游订单状态
- 0-玩家取消支付
- 10-商户取消支付
- 1-等待确认
- 21-玩家确认成功
- 22-商户确认成功
- 23-平台确认成功
- 24-卡商确认成功
- 31-玩家确认失败
- 32-商户确认失败
- 33-平台确认失败
- 34-卡商确认失败
- 4-正在支付
- 5-结算成功
- 6-退款成功
- 7-投诉纠纷
[amount] 下分金额:商户和会员的下分请以该金额为准
[order_amount] 下单金额:商户代付下单的原始金额
[pay_amount] 应付金额:我方银行和钱包应付给会员的金额
[amount_paid] 实付金额:我方银行和钱包实际付款金额
回调返回
- 以下是成功应答的数据样例
{
"result_code": "OK",
"result_msg": "SUCCESS"
}
- 以下是失败应答的数据样例
{
"result_code": "OK",
"result_msg": "FAIL"
}
提示
- 如果收到我们的通知并验证签名成功,则返回成功的响应
- 如果想继续收到相同的通知,则返回失败的响应