场景
一个H5的页面,需要在app内用webview展示,然后涉及到支付,要求能够调用微信支付来付款,页面没有问题,但是写完出现了一些问题。
问题
页面不显示,展示空白
需要设置:
webSettings.setDomStorageEnabled(true);
否则,一些节点不支持显示,建议都加上这一句,并设置为true。
点击支付调不起微信
因为,webview支持http和https的scheme,我们知道微信的schem是weixin://
,所以我们需要拦截这个url,并手动处理。
需要我们重写:
webView.setWebViewClient(new WebViewClient() {@Overridepublic 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;}@Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, .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为你跳转支付的商户域名。
以上!