本文只讨论已成功调起微信支付后,无法返回自己的APP的问题,iOS微信H5支付不在讨论范围内。提供下列参考:
微信H5支付官方文档
微信H5支付官方Demo
知道你们都喜欢看结论,先放结论吧!此方案支付多APP
解决方案:
- 在微信支付管理后台注册一级域名,比如 company.com
- 在APP工程配置中设置URL Scheme,比如 A.company.com(A你可以随便写,后面的域名得和1.中一致)
- webView拦截微信下单请求,前缀https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb,追加或修改参数 redirect_url=URLEncode(A.company.com://)
- (可选)微信支付结束(可能不是真正结束后面会细说)会发起redirect_url的重定向,webView拦截 request.URL.scheme 包含 company.com:// 的请求,在这里可以做一些后续操作,比如 刷新页面,通知前端支付完成等。
需要注意的问题:
- 微信H5下单接口(https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb)请求header中有个Referer字段,如果这个请求中没有redirect_url参数,微信支付结束后默认回调Referer字段中地址
- Referer头和redirect_url中的域名,都必须在微信后台注册过
- redirect_url回调并不可靠,可能微信支付还没结束就回调了。
微信官方文档对redirect_url的描述:
由于设置redirect_url后,回跳指定页面的操作可能发生在:1,微信支付中间页调起微信收银台后超过5秒 2,用户点击“取消支付“或支付完成后点“完成”按钮。因此无法保证页面回跳时,支付流程已结束,所以商户设置的redirect_url地址不能自动执行查单操作,应让用户去点击按钮触发查单操作
作者:CocoaKier
链接:https://www.jianshu.com/p/c1973aacc774
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。