Bootstrap

Android 集成微信h5支付

集成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) {
       
;