引言:App发生了用户完成支付,同时在后台却找不到用户支付记录的错误。经检查,原因是原支付流程中,由客户端向后端发起用户支付成功的记录请求,一旦用户完成支付却没有正常返回客户端,后端就不会记录用户支付结果。
从网上找到的支付时序图,有以下2种。
整个支付流程,可以分为三块,分别是生成支付订单、用户完成支付、校验支付并反馈支付结果。
在生成支付订单步骤,支付订单的生成时间,在用户选择支付方式并确定后再生成,会更合理,减少无效待完成的支付订单的生成。同时支付订单的生成,必须是服务端进行安全校验、价格校验后生成,避免前端的篡改或出错。
用户完成支付则是由前端调用各种在线支付方式(SDK或API)进行,这里不叙述。
在最后的步骤,怎么校验支付结果,则是常出问题的步骤,包括引言中遇到的问题。首先在用户支付成功时,前端和服务端,需要并行异步接收支付结果,这个过程由第三方支付工具回调前端或通知服务端,其中后端在接收支付结果过程中,必须要有被动接收和主动询问两种方式。其后,前端需要进一步向服务端确认支付结果后,才能最终向用户展示支付结果。
这里需要注意2点:
1)确保后端总是能没有遗漏地知道支付结果。首先是确保能接收支付结果,其次是在前端的验证请求后,能主动向第三方请求支付结果,方能万无一失。(备注:当前微信、支付宝,都会在通知服务端支付结果的环节,做到24小时内重复通知直至服务端收到并反馈,否则需要服务端补充在生成支付订单后定时查询支付结果的手段。)
2)前端没有接收支付结果或验证结果延迟,需要引导用户等待或刷新验证。如果用户没有按正常从微信或支付宝返回前端,而是切换返回,需要在页面上引导用户触发“是否已支付”的验证。如果验证结果延迟,需要有“等待中”的加载页面,及“刷新支付结果验证”的操作指引。参考下图表示。
小结:在支付环境已经十分完善的当下,产品在支付流程中,必须依据服务端的发起和接收结果,同时前端在异常情况下需要做好引导交互。
附:
微信App支付业务流程说明:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_3
支付宝App支付场景介绍:https://opendocs.alipay.com/open/204/105051
网友评论