集成h5支付也很久了,记录一下,其实h5支付的话没有什么比较难受的操作,我觉得 原生 小程序 h5 这三种支付h5是最简单的,好了直接上干货吧,我们调起微信支付之前肯定是拿到一个商品的ServiceId或者其他的信息去请求接口,用来获取激活调起微信支付的参数,送h5也是一样的只不过h5调起这个接口返回的是一个链接,我们用这个链接用webView就可以打开微信h5支付,ok,下面是代码,你的任务就是跟着我一步步的来就可以了:
在接入H5微信支付时,如果是APP里调起H5支付,需要在webview中手动设置referer,如果不设置的话就会出现以下问题,如下
所以一定要设置,至于你说这个授权地址是什么的话,其实刚开始的时候我也纠结过这个问题,后来想了一下这个域名咱们前端最好不要写死,至于为什么,因为如果你所在的公司产品很多,微信支付很多的话,当你这个正在使用的微信支付被封号的话,可以后台直接切换这个授权的域名,就算你们产品少我也是建议直接从后台获取:
-
Map extraHeaders = new HashMap(); extraHeaders.put("Referer", "商户申请H5时提交的授权域名");//例如 http://www.baidu.com webView.loadUrl(targetUrl, extraHeaders);//targetUrl为微信下单地址
接下来我就不多说了直接上代码了:
webview:这个是WebView布局你可以写在PayActivity里面gone掉,效果就是调起微信支付的时候不会跳转到另一个Activity不会展示过程,只会在完成之后直接调起:
weChatInfo.getReferer() : 就是商户申请h5时提交的授权域名
weChatInfo.getWebUrl() : 这个是用来调起h5支付的URL
webView.getSettings().setJavaScriptEnabled(true);//支持JS
webView.getSettings().setDomStorageEnabled(true);//解决显示不全的问题
if (TextUtils.isEmpty(weChatInfo.getReferer())) {
ToastUtil.showLongToast(PayActivity.this, "网络不给力~");
} else if (TextUtils.isEmpty(weChatInfo.getWebUrl())) {
ToastUtil.showLongToast(PayActivity.this, "网络不给力~");
}
initdata(weChatInfo.getReferer(), weChatInfo.getWebUrl());
- 然后是initdata方法
//调起微信h5支付
private void initdata(final String referer, String weburl) {