场景介绍
H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付。
主要用于触屏版的手机浏览器请求微信支付的场景。可以方便的从外部浏览器唤起微信支付。
提醒:H5支付不建议在APP端使用,如需要在APP中使用微信支付,请接APP支付。
这个场景介绍来自微信H5支付的开发文档,说建议不要在APP端使用H5支付,但是确实有这样的需求,我们来看看该怎么办?
因为是直接通过网页链接调用,所以我们的APP并没有在微信SDK去注册,也并没有传输给微信对应的scheme,然后iOS的进程调用就是通过schme实现的。所以可以肯定的是在iOS APP发起H5微信支付这个需求,是不能实现微信向APP的回调跳转,因为调用了H5支付后,微信并不知道是哪个APP发生了这个操作,本来H5支付就是默认的网页支付和APP没有任何关系,我们现在只是在APP中打开了这个网页而已。
回调实现不了,我们来看看能不能从APP通过网页向微信客户端跳转,还是温习一下iOS的进程跳转,通过给APP标识对应的scheme,然后调用openURL,传输scheme:xxxxx格式的URL完成对该APP的调用。这个scheme,有点类似http的一种协议,微信的APP的scheme为weixin。
我们正常通过WKWebView打开支付网页完成支付跳转,发现无法完成跳转。在看网页返回了weixin:payxxxxxx样式的链接,然后没有反应,说明WKWebView识别不了weixin:协议,需要我们手动处理一下,直接上代码,如图:
这样的话,就能正常完成跳转到微信客户端了。
经过实验发现,使用UIWebView可以通过weixin:xxxx格式的链接调用微信客户端。但是如果是先进入的是http:xxxx协议的网页,通过操作在返回给网页weixin:xxxx链接继续访问,则无论是在UIWebView和WEWebView下都不能完成对微信客户端的跳转。同样需要以上处理。
关于网页开发对WKWebView的适配,大家可以参靠一下:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1483682025_enmey