场景
一个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为你跳转支付的商户域名。
以上!