【开源项目笔记:platform-wechat-mall】小程序支付中的坑 (续)

本文接上篇:【开源项目笔记:platform-wechat-mall】小程序支付中的坑
在上一篇文章中,我们搞定了小程序的付款流程,由于我的小程序是经营虚拟商品(线上服务)的,还需要在用户付款成功后就立即开始提供服务。
先上图:
在这里插入图片描述

1、理想方案

通常微信后台推送支付给商户系统后台,商户后台会根据支付结果更新订单付款状态。
在上篇文章中确认了商户后台能够正常刷新订单状态为“已付款”或“待付款”,说明收到微信后台的支付通知是没问题的。按照理想的做法:找到商户后台更新订单状态为“已付款”的位置,把我的业务内容加进去就行了。:)

那就搜索“更新订单状态为已付款”(setPay_status(2))好了,发现居然有三处,分别为:
1、apiOrderController下的 修改订单(updateSuccess);
2、apiPayController 下的 查询订单状态(orderQuery);
3、apiPayController 下的 订单通知回调(orderNotify);

第一项 修改订单 目前暂不支持,先不管他;
第二项 并不是 微信支付流程的标配;
第三项 看来就是微信后台推送支付结果的接口了。

话不多说,输出个日志观察一下:结果出乎意料,实际生效的居然是第二项 查询订单状态,而不是第三项 订单通知回调!

2、订单通知回调为何不生效?

仔细查看发现:小程序中支付回调地址配置的并不正确:

#支付回调地址
wx.notifyUrl=https://xxxx.cn/platform-framework/api/notify

正确的地址应该是

#支付回调地址
wx.notifyUrl=https://xxxx.cn/platform-framework/api/pay/notify

再来一遍,发现orderNotify还是没有被调用???

咨询一下网络大神,发现微信后台推送支付结果是不会推送到本地的(废话,配置的是网站地址好吗?)。原来我一直用本地的后台系统在调试,切换到云服务器上的正式后台后,ok!

现在可以加入我的业务代码了。不过有一点要注意,微信后台推送支付结果如果没有收到正确的支付回应,会定时重发好几次,要记得做好重发容错处理。我这里就直接用订单状态(2)进行过滤了。

3、 就用 查询订单状态 不行吗?

回过头来看,如果不利用微信后台推送支付结果这个标准流程,就用原小程序自己的 查询订单状态(orderQuery)这个流程来完成业务,是不是也可以呢?

首先要看看 这个查询订单状态 是怎样的过程(参见上面的支付流程图):

在小程序端 “展示支付结果” 后,由小程序端向商户后台发起订单查询,然后商户后台向微信后台发起查询,然后微信后台向商户后台返回查询结果。其目的大概就是为了更新商户后台的订单状态。
(为何不走微信后台支付回调流程这条寻常路,而要另起炉灶呢,估计两个原因 :1、没发现支付回调地址配错了。2、这种方式在本地后台也能更新商户后台的订单状态,调试方便。)

不使用该流程的原因:

1、小程序端发起订单查询有个前提条件(工具测试结论):用户得在微信支付的成功页面点击“完成”按钮,才能发起订单查询。可是不管用户点不点咱都得给他提供业务,毕竟他付完钱了。

2、从小程序端发起订单查询,到完成订单状态更新,涉及三方联动:小程序、商户后台、微信后台。而使用微信后台支付结果通知,则只涉及两方:商户后台、微信后台,掉链子的可能性更小。

That’s All ! Thank you!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值