android webview 支付H5没法拉起微信支付

参照 blog.csdn.net/chenyannan0…
1.遇到的问题大概就"商家参数错误";"空白页";"系统繁忙"等等吧
2.问题解决:商家参数错误就是由于没有加Map载loadUrl时候要配置一个Map.key是指定的,url是受权域名android

Map<Sting,String> map = new HashMap<>();
map.put("Referer", "http://......"); //建议此处填写webm网站地址
复制代码

3.直接用webview去load部分机型可行,由于内核限制的就不行了
4.最终解决方式以下web

Map<String, String> map = new HashMap<>();
        map.put("Referer","http://....");
        WebView webView = ((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) {
                // 以下方案可在非微信内部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>();
                    extraHeaders.put("Referer", "http://wxpay.wxutil.com");////建议此处填写webm网站地址
                    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://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=...", map);
复制代码
相关文章
相关标签/搜索