看到微信最近放开了微信H5支付,公司决定把H5集成到多款APP上。下面记录下了开发过程。web
因为是微信新推出的支付方式,在网上搜索到的相关资料并很少,其中有一篇文章(点此跳转)对个人整个开发过程起到了很大帮助,在此表示感谢。服务器
首先去微信商户后台去申请开通H5支付。微信

微信审核经过须要3至5个工做日。测试
咱们假设支付域名填写的 aaa.cn,注意是顶级域名,不是二级或三级的子域名。url
因为这里是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支付的限制个数。