㈠ app中使用h5支付
因为苹果爸爸的各种封锁与限制,导致 app 中如果集成支付sdk上架会变得十分困难,总之是想办法去抽成。为了应对这种流氓政策,各小 app 公司纷纷偷梁换柱,通过 h5 支付从而绕开 sdk 支付。
常规的什么申请秘钥,配置回调地址等操作全部忽略了,直接进入核心步骤
支付宝的 h5 支付,返回一个 http 链接,是可以直接在 webview 中使用的,url 会重定向最终指向到支付宝的专属协议上。这里建议直接在 app 上直接通过 new webview 方式实现。
通过微信 h5 支付也是可以生成支付链接的,如果我们直接使用这个 url 的话,一定会抛一个错误“商家参数格式有误,请联系商家解决”, 微信支付的错误解决方案 中已经给出了原因,微信在这里校验了 http 请旦李卖求中的 referer ,我们直接打开 url 请求头中是没有 referer 字段的,最容易想到的是通过 html 中的 a 标签跳转页面,a 标签会默认携带当前页面的主机地址。
所以就写了一个简单的中转页面,逻辑很简单,在中转链接中添加一个 pay_url 字段,pay_url 就是微信 h5 支付生成的链接,需要进行 encode 编码一下,我们可以在 js 里面重新解码,设置 a 标签的 href 熟悉,执行点击进行跳转。
找个服务器或者 oss 将页面放过去,配置一个域名,因为微信的 h5 支付是绑定了一个主域扰笑名,二级域名其实都是可以使用,假如最终配置为 pay.abc.com ,那么我们最终的跳转链接为 http://pay.abc.com?pay_url=http://wechatpay.com?xxxxxx 。
不管是微信支付还是支付宝支付,其实想从浏览器唤醒支付 app,都是通过特有 schema 唤醒的,支付宝的协议是 alipay://,模逗微信的协议是 weixin://,其实和 http 协议一样,例如: http://.com ,浏览器会捕获 http 协议,支付宝和微信都会捕获属于自己的协议,这一点不管在 android 还是 ios 上,也正是利用了这一点,才使我们 app 中唤醒支付宝或者微信成为可能。当然后面很可能也被限制,在将来相当长的一段时间是不会的,正是这些协议使得 h5 和 app 进行交互才使得如今移动操作系统更加繁荣。
㈡ 微信app支付和h5支付的区别
两种支绝兄付方式的特点如下:
APP支付,是指商户通过在移动端应用APP中集成开放SDK调起微信支付模块来完成支付;H5支付即公众号支付,是指用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微中坦信支付模块来完成支付。两种支付方式分别适用不同的支付并培袭场景:
APP支付适用于在移动端APP中集成微信支付功能的场景;H5支付适用于在公众号、朋友圈、聊天窗口等微信内完成支付的场景。
㈢ App内H5方式微信、支付宝支付,无法回跳到App问题
1、微信支付
本地URL Types 要添加一下授权域名:aaa.xxx.com
2、支付宝支虚空付
第一种方式:支付宝支持拦截+支付二合一的方式,通过拦截H5支付链接,谈者调用SDK接口进行支付
第二种方式:
1.添加 URL Scheme
2.实现代理方法拦截链接并跳转差侍瞎支付宝
staticconstNSString* =@" www.xxxx.com ";
支付宝开发文档: https://opendocs.alipay.com/open/204/105695
㈣ iOS-APP实现微信H5支付总结
1、发起下单请求( 调用统一下单接口 )注:交易类型trade_type=MWEB
2、统一下单接口返回支付相关参数给商户后台,如支付跳转url(参数名“mweb_url”),商户通过mweb_url调起微信支付中间页。如: https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=&package=600759311&redirect_url=http%3a%2f%2www..com
3、中间页进行H5权限的校验,安全性检查( 具体错误见微信官方文档 )
4、如果权限校验成功,微信支付中间页会发起支付请求。请求完毕跳到回调页面(由redirect_url决定)。APP需要在webView中监听这个请求,打开微信进行支付。如: weixin://wap/pay?prepayid%&package=2965581453&noncestr=1545905512&sign=
5、微信支付完毕跳回APP。
HTTP Referer是header的一部分,当浏览器向web服务器发起请求的时,一般会带上Referer,告诉服务器我是从哪个页面链接过来。微信中间页会对Referer进行校验,非安全域名将不能正常加载。
redirect_url是微信中间页唤起微信支付之后,页面重定向的地址。中间页唤起微信支付后会跳转到指定的redirect_url。并且微信APP在支付完成时,也是通过redirect_url回调结果,redirect_url一般是一个页面地址,所以微信支付完成会打开Safari浏览器。本文通过修改redirect_url,实现微信支付完毕跳回当前APP。
需要将微信H5支付的安全域名配置成scheme,微信支付完成会通过这个scheme跳转回APP。
再shouldStartLoadWithRequest:方法里面拦截微信中间页(以“ https://wx.tenpay.com ”开头闹戚侍的请求),截取redirect_url,如果redirect_url已经被替换成scheme不拦截,如果没有被替换,拦截请求,保存当前的redirect_url。创建一个新的微信中间页请求,将redirect_url替换成“安全域名://”(微信支付完毕会通过openURL打开当前APP,如果不替换redirect_url,微信支付完毕会打开Safari浏览器。)。设置“Referer”为安全域名(微信会校验Referer,不是安全域名会加载失败),重新load请求。
微信中间页加载成功后,会收到一个打开微信的请求,用openURL:打开这个url实现跳转到微信支付。
微信中间页跳转到微信时液吵,会将页面从定向到仔毁redirect_url,由于redirect_url被我们修改为scheme,所以需要拦截这个非法的scheme请求,替换成记录下的redirect_url。
以UIWebView为例
还有一篇文章讲的是H5支付封装,H5支付不仅可以在网页上使用,原生也可以调用。具体内容见: iOS-H5支付(微信、支付宝)原生封装