问题描述
在用户支付完之后,要将支付结果推送到我们的业务系统,之前使用axios一直正常。
微信小程序云函数、业务系统都没有做任何调整,发现最近一直收不到客户付款的推送。
问题分析
结过排查发现,axios执行请求的代码,没有执行。
包的依赖情况(我看有人反馈axios版问题,我的正好是0.27.2,应该要是正常才对。)
{
"dependencies": {
"axios": "^0.27.2",
"md5": "^2.3.0",
"qs": "^6.11.0",
"wx-server-sdk": "*"
}
}
日志结果
代码片段1、2、3都没有执行到,也不报错,也没有异常信息。
结论
之前axios请求一切正常,突然不请求,结合日志打印的情况,应该是最近云函数的环境有什么调整,具体什么原因,怎么回事,怎么修改,坐等回复。
问题解决方案
从昨天咨询到今天,售后一直在跟进这个问题,感觉售后对问题也表示怀疑,因为售后那边反馈node16环境下验证代码逻辑没有问题,axios能正常执行请求。面对这种答复,我再次表示本地正常,云上不正常。 然后,售后说在 axios 调用前加上 await 试试,然后这么一试,加上await之后云上就正常了。
问题产生的原因
axios 请求是异步,云函数执行完之后,生命周期就结束了,而异步执行的还没执行。导致业务异常。
在这里对售后服务的耐心点赞。
意外收获
解决了业务上的小Bug
之前没有加await,从严格意义上来讲,也是有bug的。在没有完成axios请求后,就给微信返回了成功,如果通知真的失败了,就形成了支付通知的特殊情况。因为之前不加await,axios请求也能正常请求,而且基本上没有出现过异常情况,所以之前隐藏的小bug也没有出现过。现在因为云上环境异步执行的axios存在不执行的情况,加上了await变成了同步,也解决了之前业务上的小bug。
问题补充
1.本地正常执行axios
2.云上axios请求不执行。云上axios请求不执行的问题,是最近才发现的。我这边的记录显示 2023-05-31 的支付通知都是正常的。 后来我关闭支付功能,最近又重新开启的。 问题应该是 2023-05-31 到8月初这个时间里形成的。