Android webview加载H5页面调起微信支付

场景

一个H5的页面,需要在app内用webview展示,然后涉及到支付,要求能够调用微信支付来付款,页面没有问题,但是写完出现了一些问题。

问题

页面不显示,展示空白

需要设置:

webSettings.setDomStorageEnabled(true);

否则,一些节点不支持显示,建议都加上这一句,并设置为true。

点击支付调不起微信

因为,webview支持http和https的scheme,我们知道微信的schem是weixin://,所以我们需要拦截这个url,并手动处理。
需要我们重写:

webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url.startsWith("weixin://wap/pay?") || url.startsWith("http://weixin/wap/pay")) {
                    try {
                        Intent intent = new Intent();
                        intent.setAction(Intent.ACTION_VIEW);
                        intent.setData(Uri.parse(url));
                        startActivity(intent);
                    } catch (ActivityNotFoundException e) {
                       // 处理错误
                    }
                    return true;
                } 
                return true;
            }

            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, android.net.http.SslError error) {
                //重写此方法可以让webview处理https请求
                handler.proceed();
            }

        });

跳转微信,报参数错误,联系商户

这个在微信的文档里写的很清楚:

if (url.startsWith("weixin://wap/pay?") || url.startsWith("http://weixin/wap/pay")) {
                    try {
                        Intent intent = new Intent();
                        intent.setAction(Intent.ACTION_VIEW);
                        intent.setData(Uri.parse(url));
                        startActivity(intent);
                    } catch (ActivityNotFoundException e) {
                        //处理错误
                    }
                    return true;
                } else {
                    Map<String, String> extraHeaders = new HashMap<>();
                    extraHeaders.put("Referer", "商户域名");
                    view.loadUrl(url, extraHeaders);
                }
                return true;

就是添加extraHeaders.put("Referer", "商户域名");这一句,key为Referer,value为你跳转支付的商户域名。

以上!

你可能感兴趣的:(Android学习笔记,webview,微信支付,H5)