上一篇文章我们解决了一个时而调得起微信H5支付,时而调不起(显示:系统繁忙,请稍后重试!)的问题,那这次我们再来解决一个因为手机系统而拉不起微信H5支付问题!
上一篇文章我们解决了一个时而调得起微信H5支付,时而调不起(显示:系统繁忙,请稍后重试!)的问题,那这次我们再来解决一个因为手机系统而拉不起微信H5支付问题!
上一篇文章中我们有用到下面的这个Referer,这个大家应该都还记得,但是这个在Android 4.4.3和4.4.4系统上是失效的,导致shouldOverrideUrlLoading这个方法无法回调,所以就无法拦截到"weixin:..wap/pay?",自然而然就拉不起微信的H5支付页面,这个可能跟WEBView的内核版本有关。
Map extraHeaders = new HashMap();
// 此处连接为申请微信H5支付的时候填写的域名
extraHeaders.put("Referer", "Http://wxpay.wxutil.com");
view.loadUrl(url, extraHeaders);
上面知道了原因,接下来我们就要找解决方案了,这里我直接上代码了
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 false;
} else {
if (("4.4.3".equals(android.os.Build.VERSION.RELEASE))
|| ("4.4.4".equals(android.os.Build.VERSION.RELEASE))) {
return false;
}else{
Map extraHeaders = new HashMap();
// 此处连接为申请微信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);
// 针对referer失效,这两个版本需要做特殊的兼容处理
if (("4.4.3".equals(android.os.Build.VERSION.RELEASE))
|| ("4.4.4".equals(android.os.Build.VERSION.RELEASE))) {
webView.loadDataWitHBaseURL("http://wxpay.wxutil.com",
"window.location.href=\"" + "https://wxpay.wxutil.com/mch/pay/h5.v2.PHP" + "\";",
"text/html", "utf-8", null);
}else{
webView.loadUrl("https://wxpay.wxutil.com/mch/pay/h5.v2.php");
}
这里的window.location.href是javascript的重定向跳转,直接在本页上跳转。具体的大家可以深究。这样问题就彻底解决了!
--结束END--
本文标题: Android 4.4.3和Android4.4.4系统拉不起微信H5支付问题终极解决方案
本文链接: https://lsjlt.com/news/29260.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0