看到微信最近放开了微信 H5 支付, 公司决定把 H5 集成到多款 APP 上下面记录下了开发过程
由于是微信新推出的支付方式, 在网上搜索到的相关资料并不多, 其中有一篇文章 (点此跳转) 对我的整个开发过程起到了很大帮助, 在此表示感谢
首先去微信商户后台去申请开通 H5 支付
微信审核通过需要 3 至 5 个工作日
我们假设支付域名填写的 aaa.cn, 注意是顶级域名, 不是二级或三级的子域名
服务器端通过统一下单接口从微信拿到支付跳转链接(https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20180115115052bedf091fba0369993002&package=2975002856), 称为 mweb_url, 有效期为 5 分钟
由于这里是 APP 调起支付, 不是网页 H5 发起支付, 所以这里 mweb_url 值不需要再拼接上 redirect_url 参数
然后移动端进行请求 mweb_url, 就会调起微信 APP 支付
可能会出现以下问题:
出现商家参数格式有误, 请联系商家解决
说明在请求 mweb_url 时 referer 为空导致, 设置上就可以, 这里我们设置最先在商户后台注册的 aaa.cn 的一个多级子域名, 比如: b.aaa.cn
如果不是设置商户后台注册的顶级域名的多级子域名, 比如: b.ccc.cn
就会出现商家存在未配置的参数, 请联系商家解决异常
那就把 ccc.cn 注册到商户后台就可以解决了
到目前为止, 你就可能正常支付了, 但支付成功后, 并不能正常跳回原 APP, 严重影响了用户体验
解决方案: 把 referer 设置成: b.aaa.cn://,scheme 设置成: b.aaa.cn 就可以直接返回 APP 了
如是你只有一款 APP 使用此支付方式, 那就可以到此为止了
如果你有两款以上 APP(比如 X1,X2,X3), 并都把 referer 设置成: b.aaa.cn://,scheme 设置成: b.aaa.cn
用户只安装了其中一款 APP(X1), 此时支付能够成功, 并能转回原 APP, 一点问题没有如果同时安装了(X1,X2), 就会发现支付能够成功, 但成功后页面静止, 不能跳回原 APP 了, 也严重影响了用户体验
想到的第一个解决方案就是更改 referer 与 scheme
APP | X1 | X2 | X3 |
referer | b.aaa.cn/x1:// | b.aaa.cn/x2:// | b.aaa.cn/x3:// |
scheme | b.aaa.cn/x1 | b.aaa.cn/x2 | b.aaa.cn/x3 |
通过测试发现不起作用在网上搜索了很久也没有找到解决方案, 感觉只能妥协了, 牺牲点用户体验, 让用户点击左上角返回原 APP
突然灵光一闪, 微信商户后台即然让我们注册顶级域名, 那是不是只要把 referer 与 scheme 设置成注册的顶级域名的多级子域名就可以了呢, 如下:
APP | X1 | X2 | X3 |
referer | b1.aaa.cn:// | b2.aaa.cn:// | b3.aaa.cn:// |
scheme | b1.aaa.cn | b2.aaa.cn | b3.aaa.cn |
通过测试, 完美运行理论上这个解决方案可以支持无数个 APP, 也同时解决了微信开放平台 APP 支付的限制个数
来源: https://www.cnblogs.com/Life-Record/p/8472319.html