爱收集资源网

高效处理微信支付方案,商户后台必备技巧

网络整理 2023-09-29 16:04

1.背景

由于网路异常或则系统的波动,可能会造成用户支付成功,但是商户侧无法成功接收到支付结果通知,进而显示订单未支付的情况。商户侧的订单状态更新不及时,容易导致用户投诉,甚至是重复支付的情况发生。

2.目标

商户在无法收到支付结果通知时,也能及时、准确地获取到订单的支付状态,提升商户系统的健壮性,减少由于订单状态不同步造成的用户投诉。

3.方案概述

#0:c:c:4:7:9:4:3:b:d:d:b:4:c:3:9:b:c:c:1:d:6:1:9:e:d:c:8:9:7:e:6#

商户App或则后端页面收到支付返回时,商户须要调用商户查单插口确认订单状态,并把查询结果展示给用户。 商户后台须要确切、高效地处理微信支付发送的异步支付结果通知,并按插口规范把处理结果返回给微信支付。 商户后台未收到异步支付结果通知时,商户应当主动调用《微信支付查单插口》,同步订单状态。 商户在T+1日从微信支付侧获取T日的交易帐单,并与商户系统中的订单核实。如出现订单在微信支付侧成功,但是在商户侧未成功的情况,商户须要给用户补发货或则退货处理。 4.后端支付返回处理 4.1.公众号、小程序、App支付 后端调起支付和判定返回类型的方式请参考插口文档: 4.2.H5支付

![图片](/merchant-articles/development/media/call-2.png

"返回页面展示疗效(仅供参考)")

4.3.NATIVE支付

前端显示支付二维码以后,前端定时协程调用商户查单插口确认订单的状态。

#c:c:5:8:c:0:f:a:8:d:5:b:9:f:3:3:4:f:5:f:3:7:a:a:f:4:e:9:0:9:0:b#

页面展示疗效(仅供参考)

比如间隔2秒查询一次,一直协程60秒。(轮询时间间隔和次数,商户可以按照自身业务场景灵活设置)

5.前端服务处理 5.1.支付反弹处理

商户后台须要确切、高效地处理微信支付发送的异步支付结果通知,并按插口规范把处理结果返回给微信支付。详情请参考插口规范和注意事项

5.2.定时协程查单

如果长时间没有收到支付结果通知,商户后台应当定时协程调用《微信支付查单插口》去查证订单状态。

方案一:

以订单下单成功时间为基准(或者曾经端支付返回成功或则报错后,第一次调用商户查单插口未成功的时间为基准),每隔5秒/30秒/1分钟/3分钟/5分钟/10分钟/30分钟调用《[微信支付查单插口](/merchant-articles/apis/jsapi-payment/query-by-wx-trade-no.md查询一次,最后一次查询还是未返回支付成功状态,则停止后续查询,并调用《关单插口 (opens new window)》关闭订单。(轮询时间间隔和次数,商户可以按照自身业务场景灵活设置)

方案二:

定时任务每隔30秒启动一次,找出最近10分钟内创建而且未支付的订单,调用《微信支付查单插口》核实订单状态。系统记录订单查询的次数,在10次查询以后状态还是未支付成功,则停止后续查询,并调用《关单插口 (opens new window)》关闭订单。(轮询时间间隔和次数,商户可以按照自身业务场景灵活设置)

5.3.T+1日对帐处理

5.3.1. 商户在T+1日上午10点之后,调用《微信支付对账单下载插口 (opens new window)》,或者登陆陌陌商户平台手工下载T日交易帐单,然后按照对账单中的订单数据,逐笔与商户系统中的订单核实。

5.3.2. 核对时有如下几种情况:

6.常见问题 1、前端返回怎么分辨是成功返回,还是用户取消支付或则异常?

公众号支付,通过JSAPI返回的res.err_msg值判定:

描述 解决方案

get_brand_wcpay_request:ok

支付成功

get_brand_wcpay_request:cancel

支付过程中用户取消

get_brand_wcpay_request:fail

支付失败

小程序支付,通过反弹类型判定:

回调类型 errMsg 说明

success

requestPayment:ok

调用支付成功

fail

requestPayment:fail cancel

用户取消支付

fail

requestPayment:fail (detail message)

调用支付失败,其中 detail message 为后台返回的详尽失败缘由

App支付,通过onResp函数返回的errCode值判定:

名称 描述 解决方案

成功

展示页面成功

-1

错误

可能的诱因:签名错误、未注册AppID、项目设置AppID不正确、注册的AppID与设置的不匹配、其他异常缘由等

-2

用户取消

无需处理。发生场景:用户不支付了,点击取消,返回App

2、如何判定微信支付查单插口返回的订单状态是支付成功?

商户收到《微信支付查单插口》的响应报文,验证签名成功,并且返回的return_code、result_code、trade_state这3个参数值同时为SUCCESS,则觉得订单是支付成功;调用查单插口遇见网路超时,未收到返回,或者返回的return_code和result_code不同时为SUCCESS,则代表订单状态不明晰,需要再度调用查单插口确认。

微信没有联系商户选项