Android 调用微信H5支付遇到的大坑

       开发过程中我们可能需要接入的是微信的H5支付,但是接入过程中可能会遇到一些坑,让你很烦躁,我在前段时间就遇到过,今天整理东西的时候偶然发现想起,然后就想写一下共享一下!遇到的情况是这样的:正常时候都能拉起支付,且支付成功,但是有可能过了很久之后的某一天会突然发现在另一台手机上拉支付的时候显示:系统繁忙,请稍后重试!然后你就开始网上搜解决方案,然后搜到的大部分都是说秘钥等参数不对,然后你开始拼命的核对,发现都是正确的,但是就是拉不起支付,这个时候你感觉快要被气炸!今天我讲一下我遇到的这个坑是如何解决的。

        首先,需要了解微信h5支付如何调用,这里我使用的是demo,如下:     

        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 true;
                } else {
                    Map<String, String> extraHeaders = new HashMap<String, String>();
                    // 此处连接为申请微信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);
        webView.loadUrl("https://wxpay.wxutil.com/mch/pay/h5.v2.php");

       然后,经过观察添加在shouldOverrideUrlLoading方法下面的log,发现拦截的链接里面参数package缺失值,这里我要吐槽一下,经过多次验证,发现这个package即使为空值有大多时候也能拉起微信支付,而且支付成功,但是换个机子或是过一段时间可能就不行了,这就很坑了,经过与后台同学排查,然后每次连接都将package这个参数的值返回之后,发现稳稳的妥妥的每次都能成功拉起支付且支付成功,然后换个机子也没问题了,所以这个感觉是不是wx的一个bug啊!

       这就是我遇到的坑,共享给大家参考

发布了8 篇原创文章 · 获赞 20 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u012850536/article/details/104040182
今日推荐