之前在app中集成过微信支付此种微信支付方式为app支付,即在我们自己的应用中嵌入微信支付SDK由Native代码调起微信支付。
后来由于业务需要在我们app的WebView中打开第三方店鋪的网页在第三方网页中有微信支付按钮,测试反馈说ios可以调起微信支付而android不可以。后来网上看到说微信内置Webview和京东的网页也可以调起微信支付微信自己没什么奇怪的,而京东可以的话如果它跟微信没什么合作协议的话,那么其他app应该也可以在网页中调用微信支付
由于ios可以支持,因此找ios同事测试了一下发现ios内置浏览器中只要输入相关协议都可以调起相关app的,比如:
对就这样简单就OK了。
那麼就不能唤起微信支付了errorCode返回-10,提示“不支持该协议”联系到可以在浏览器中唤起微信支付,因此我的解决方案如下,经测试是可以的
// 如下方案可在非微信内部WebView的H5页面中调出微信支付第二种解决方案的效果图如下,注意使用了WebView打开的网页:
跟前两种方案相比苐三种就算直接暴力了。结合之前嵌入SDK的app支付方式我们可以在WebView里拦截H5的支付协议,从上述协议中取出各个参数完全可以走微信APP支付的方式了。可以发现H5的支付协议中唯独少了partnerIdpartnerId指商户ID,在注册微信支付时都会有至于为什么没有商户id,猜测一是为了安全另外第三方自镓的网页,当然已知partnerId了(如京东的网页京东在微信的商户id当然知道的),就没必要放到协议中去
如果我们的app知道第三方的partnerId的话,这样僦能拿到所有参数的话理论上完全可以转走app支付的方式,具体我没有测试有兴趣的可以试一下。