合单支付-支付成功通知
当订单支付成功后,微卡收付通平台会将结果通知给接入方。
合单支付以母单维度通知客户。
对后台通知交互时,如果收付通收到应答不是成功或超时,收付通认为通知失败,收付通会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但收付通不保证通知最终能成功
-
同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。 推荐的做法是,当商户系统收到通知进行处理时,先检查对应业务数据的状态,并判断该通知是否已经处理。如果未处理,则再进行处理;如果已处理,则直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。
-
如果在一定时间内(推荐60s)或所有通知频率后没有收到收付通侧回调。商户应调用查询订单接口确认订单状态。
特别提醒: 商户系统对于开启结果通知的内容一定要做签名验证,并校验通知的信息是否与商户侧的信息一致,防止数据泄露导致出现“假通知”,造成资金损失。
通知规则
用户在支付成功后,微卡收付通平台将通知商户系统支付结果,商户系统接收处理,并返回应答。
商户系统对收付通的回调通知进行验签,在处理成功后需要响应 200 HTTP 状态码。验签方式见:回调请求验签
对后台通知交互时,如果收付通收到应答不是成功或超时,收付通认为通知失败,收付通会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但收付通不保证通知最终能成功。(通知频率为 5/5/10/30/60/60/60/60/60/60,单位:秒)
接口说明
请求参数
母单ID
收单通道
支付渠道
返回支付参数。扫码支付则返回二维码串,js支付则返回json字符串;云闪付的JS支付返回支付的链接,商户只需跳转到此链接即可完成支付;支付宝App支付返回支付信息串
支付参数类型。APP、JSAPI、SCAN、SWIPE等
订单状态,枚举值
母单金额,单位:分
失败原因,支付失败则返回
交易完成时间,格式: 2023-03-05 11:54:20
订单交易时间,秒级时间戳,如:1702982291
是否等待用户确认支付(等待输入密码),true:是,false:否;目前适用于被扫场景
附加信息,在查询API和支付通知中原样返回,可作为自定义参数使用,实际情况下只有支付完成状态才会返回该字段
子单列表
{
"CombineOrderId": "unittest1601940939456770",
"ChannelName": "WECHATECPAY",
"PayChannel": "WXPAY",
"PayType": "PUBLIC",
"PayChlPayerId": "oXLUp5Kursw0GMH8zA_Cd9Ayto2s",
"OrderStatus": "SUCCESS",
"PayInfoType": "APP",
"PayInfo": "{\"appId\":\"wxad53ca7fbb5gg5f2\",\"timeStamp\":\"1681867396\",\"nonceStr\":\"94981e22ac0b4663949a442f31739b53\",\"package\":\"prepay_id=wx190923168532565900979a7da2170000000\",\"signType\":\"RSA\",\"paySign\":\"rhOR5lnhv6w2asdMiqRHU/aEZjhk1J4fGT2/Z5vxqtNcaLyHYmqDiIZZqxlSgSibWb/Z1a8SJdzLH9u0nnBKa0u0wtVaXgB6WKUahYtwQZC2ZadaYj6AkAeKLRIUHObVgAClbiiaiUjiaC9JUhj11m7JkClwpRvJkXQi4QzTdjA+kYv+32cgUido8SWIt6WZZXyH1qJTG1rYJC8IeUMgktH8oOoGzlxpaJbgB41j+pBd10b4R4DExlJ+KWP7N8iPj5YrbIzGJ2MsZ8L2U0jKLjpfKF/3d4hsc4or7EKIXdffgsreedaW6JzZ77gyb5ounChaea6CEP1UpUUAvgrkJwgw==\"}",
"SubOrders": [
{
"OutOrderId": "unittest1601940939456776",
"ThirdPayOrderId": "wx1234567890",
"PayChlOrderId": "4000002025041411571",
"PayChlPayerId": "oXLUp5Kursw0GMH8zA_Cd9Ayto2s",
"OrderStatus": "SUCCESS",
"TotalAmount": 20,
"PayAmount": 16,
"ChannelName": "WECHATECPAY",
"PayChannel": "WXPAY",
"MerchantFeeAmount": 2,
"TimeFinish": "2024-09-13 22:34:42",
"ExternalPaymentData": "{\"WxAppId\": \"wx43f1e0956821a03e\", \"WxOpenId\": \"oXLUp5Kursw0GMH8zA_Cd9Ayto2s\"}",
"CouponAmount": 1,
"PromotionInfos": [
{
"PromotionType": "COUPON",
"PromotionAmount": 1,
"OtherContributeAmount": 1
}
],
"ChannelOrderId": "6831200562079122025689777"
},
{
"OutOrderId": "unittest1601940939456777",
"ThirdPayOrderId": "wx1234567891",
"PayChlOrderId": "4000002025041411572",
"PayChlPayerId": "oXLUp5Kursw0GMH8zA_Cd9Ayto2s",
"OrderStatus": "SUCCESS",
"TotalAmount": 30,
"PayAmount": 24,
"ChannelName": "WECHATECPAY",
"PayChannel": "WXPAY",
"MerchantFeeAmount": 3,
"TimeFinish": "2024-09-13 22:34:42",
"ExternalPaymentData": "{\"WxAppId\": \"wx43f1e0956821a03e\", \"WxOpenId\": \"oXLUp5Kursw0GMH8zA_Cd9Ayto2s\"}",
"ChannelOrderId": "6831200562079122025755313"
}
]
}
返回数据
商户系统如果接受并处理回调通知成功,需要返回 200 HTTP 状态码,否则需要返回 5xx 或 4xx 的 HTTP 状态码。
如果接受失败,可以返回 message 字段表述处理失败原因。