问题描述:我们的使用场景是微信的当面付,当用户扫码支付的流程概括如下:
用户扫码(前端地址)-->前端请求后端获取跳转微信授权url-->前端发起重定向跳转微信--> 微信授权下发auth_code--> 重定向到后端接口-->请求后端携带auth_code请求微信获取openId-->微信返回openid给后端,后端携带openid重定向给前端(h5)-->前端(h5)发起预下单请求服务端(JSAPI) --> 预下单成功之后返回预下单成功微信支付需要参数给前端-(h5)->前端(h5)调用微信sdk唤起支付。
上面流程即为用户扫码到唤起支付的流程,当这个流程上线之后,微信唤起支付窗口包含回退按钮,如图:

这个回退按钮虽然不影响支付,但是还是并不是完美。这是因为总共进入前端页面两次,第一次扫码进入页面没有openId,第二次又重定向到页面发起支付。
修改流程为:
用户扫码(后端地址)-->后端重定向跳转微信--> 微信授权下发auth_code--> 重定向到后端-->后端携带auth_code请求微信获取openId-->携带openid重定向前端(h5)-->前端(h5)发起预下单请求服务端(JSAPI) --> 预下单成功之后返回预下单成功微信支付需要参数给前端-(h5)->前端(h5)调用微信sdk唤起支付。
上面这个流程,只有最终携带openId才会跳转到前端h5,故次解决该问题。
注意:上面微信重定向可以重定向前端/后端地址,建议跳转后端地址,因为微信回调的时候,会携带app_id等信息 。为了安全起见,建议跳转到后端。
本文详细阐述了微信当面付的原始流程及其存在的问题,包括用户扫码后需二次跳转的问题。通过调整流程,将扫码后的跳转直接导向后端处理,避免了前端页面的重复加载,提升了用户体验。
2792

被折叠的 条评论
为什么被折叠?



