我们首先看整个交易流程:
看「15、异步通知支付结果」,这个结果是来自微信支付系统,商户在需要做16.17这两步。
也就是需要保存微信发过来的$massage,并且返回成功给微信。
而微信官方对比关闭订单,是这样说的。
什么时候需要关闭订单?
微信支付在2020.10.10的文档中提到,以下情况需要调用关单接口:
- 商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付
- 系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口。
也就是正常情况下,是不需要进行关闭订单操作,我们可以在页面上进行限制,以防用户多次刷新页面创建多个订单,或者在逻辑上进行优化。
1 2 3 4 5 6 7 8 9 10 11 |
if(session('prepay.err_code')) { echo "<script>alert('".session('prepay.err_code_des')."请等待后台处理1!');window.history.back(-1);</script>";die; }elseif(session('prepay.appid')){ // dump(session('prepay.appid')); $payConfig = $jssdk->sdkConfig(session('prepay.prepay_id')); // 返回数组 $json = $jssdk->bridgeConfig(session('prepay.prepay_id')); } else{ } |
比如上面,如果收到微信的错误返回,那么读取这个错误描述,并且前端提示。。
如果连数据中有appid,一般来说流程就是正常的,正常返回数据给前端发起微信支付即可。
什么时候需要查询订单?
微信官方的描述是这样的:
该接口提供所有微信支付订单的查询,商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。
需要调用查询接口的情况:
- 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
- 调用支付接口后,返回系统错误或未知交易状态情况;
- 调用被扫支付 API,返回 USERPAYING 的状态;
- 调用关单或撤销接口 API 之前,需确认支付状态。
结论
所以,在正常的流程中,我们收到微信的回调,正确储存并返回即可,不需要特意去操作查询及关闭订单。
原创文章,作者:蓝洛水深,如若转载,请注明出处:https://blog.lanluo.cn/10056