返回顶部
首页 > 资讯 > 移动开发 >Android 4.4.3和Android4.4.4系统拉不起微信H5支付问题终极解决方案
  • 770
分享到

Android 4.4.3和Android4.4.4系统拉不起微信H5支付问题终极解决方案

系统解决方案Android 2022-06-06 13:06:39 770人浏览 薄情痞子
摘要

      上一篇文章我们解决了一个时而调得起微信H5支付,时而调不起(显示:系统繁忙,请稍后重试!)的问题,那这次我们再来解决一个因为手机系统而拉不起微信H5支付问题!  

      上一篇文章我们解决了一个时而调得起微信H5支付,时而调不起(显示:系统繁忙,请稍后重试!)的问题,那这次我们再来解决一个因为手机系统而拉不起微信H5支付问题!

      上一篇文章中我们有用到下面的这个Referer,这个大家应该都还记得,但是这个在Android 4.4.3和4.4.4系统上是失效的,导致shouldOverrideUrlLoading这个方法无法回调,所以就无法拦截到"weixin:..wap/pay?",自然而然就拉不起微信的H5支付页面,这个可能跟WEBView的内核版本有关。


 Map extraHeaders = new HashMap();
 // 此处连接为申请微信H5支付的时候填写的域名
  extraHeaders.put("Referer", "Http://wxpay.wxutil.com");
  view.loadUrl(url, extraHeaders);

    上面知道了原因,接下来我们就要找解决方案了,这里我直接上代码了


        webView = findViewById(R.id.webview);
        WebSettings settings = webView.getSettings();
        settings.setjavascriptEnabled(true);
        settings.setDefaultTextEncodingName("UTF-8");
        webView.getSettings().setJavaScriptCanOpenwindowsAutomatically(true);
        webView.setWebChromeClient(new WebChromeClient());
        WebViewClient webViewClient = new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // 此处log 最终让我发现了问题根源
                Log.i("AAAAAA", "shouldOverrideUrlLoading: ---url = "+url);
                // 如下方案可在非微信内部WebView的H5页面中调出微信支付
                if (url.startsWith("weixin://wap/pay?")) {
                    Intent intent = new Intent();
                    intent.setAction(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse(url));
                    startActivity(intent);
                    return false;
                } else {
                    if (("4.4.3".equals(android.os.Build.VERSION.RELEASE))
                        || ("4.4.4".equals(android.os.Build.VERSION.RELEASE))) {
                       return false;
                    }else{
                        Map extraHeaders = new HashMap();
                        // 此处连接为申请微信H5支付的时候填写的域名
                        extraHeaders.put("Referer", "http://wxpay.wxutil.com");
                        view.loadUrl(url, extraHeaders);
                    }
                }
                return true;
            }
            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, android.net.http.SslError error) { // 重写此方法可以让webview处理https请求
                handler.proceed();
            }
        };
        webView.setWebViewClient(webViewClient);
           // 针对referer失效,这两个版本需要做特殊的兼容处理
         if (("4.4.3".equals(android.os.Build.VERSION.RELEASE))
                        || ("4.4.4".equals(android.os.Build.VERSION.RELEASE))) {
             webView.loadDataWitHBaseURL("http://wxpay.wxutil.com",
                "window.location.href=\"" + "https://wxpay.wxutil.com/mch/pay/h5.v2.PHP" + "\";",
                "text/html", "utf-8", null);
          }else{
              webView.loadUrl("https://wxpay.wxutil.com/mch/pay/h5.v2.php");
          }

这里的window.location.href是javascript的重定向跳转,直接在本页上跳转。具体的大家可以深究。这样问题就彻底解决了!


作者:gxchen002


--结束END--

本文标题: Android 4.4.3和Android4.4.4系统拉不起微信H5支付问题终极解决方案

本文链接: https://lsjlt.com/news/29260.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作