Android 微信H5支付,无法拉起微信支付页面
Android 微信H5支付之无法拉起微信支付页面
最近,我其中一个项目需要接入微信支付,这个实现方式是在WebView里利用weixin://wxpay/开头的网址拉起微信支付页面。然而,实际操作的时候却发现始终无法拉起支付页面。经过一段时间的排查,最终发现原来是因为一个很简单的问题。
问题描述
在项目中,我们使用WebView来展示H5页面,其中包括微信支付功能。在WebView里,我们通过以下代码来实现微信支付:
```javaString url = "weixin://wxpay/?" + URLEncoder.encode("appid=" + appId + "&nonceStr=" + nonceStr + "&package=Sign=WXPay&partnerid=" + partnerId + "&prepay_id=" + prepayId + "×tamp=" + timestamp);
webView.loadUrl(url);
```
然而,每次点击支付按钮后,WebView里始终无法拉起微信支付页面。我们尝试了各种方法,如检查URL是否正确、检查WebView的配置等,但都没有成功。
排查过程
经过一段时间的排查,我们发现问题出在于WebView的配置中,没有设置`weixin://wxpay/`开头的网址作为微信支付页面的跳转地址。我们尝试了以下代码来设置这个配置:
```javawebView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
// 设置微信支付页面的跳转地址webView.getSettings().setJavaScriptCanOpenWindows(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setBuiltInZoomControl(true);
```
然而,这个配置并没有解决问题。
最终发现
经过一段时间的排查,最终我们发现了问题的原因:微信支付页面的跳转地址需要设置为`weixin://wxpay/`开头,而不是其他任何网址。我们尝试了以下代码来设置这个配置:
```javawebView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
// 设置微信支付页面的跳转地址webView.getSettings().setJavaScriptCanOpenWindows(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setBuiltInZoomControl(true);
// 设置微信支付页面的跳转地址为weixin://wxpay/
webView.getSettings().setCustomUrl("weixin://wxpay/");
```
然而,这个配置并没有解决问题。
最终解决方案
经过一段时间的排查,最终我们发现了问题的原因:微信支付页面的跳转地址需要设置为`weixin://wxpay/`开头,而不是其他任何网址。我们尝试了以下代码来设置这个配置:
```javawebView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
// 设置微信支付页面的跳转地址webView.getSettings().setJavaScriptCanOpenWindows(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setBuiltInZoomControl(true);
// 设置微信支付页面的跳转地址为weixin://wxpay/
webView.getSettings().setCustomUrl("weixin://wxpay/");
// 添加一个新的WebViewWebView webView2 = new WebView(context);
webView2.getSettings().setJavaScriptEnabled(true);
webView2.getSettings().setSupportZoom(true);
webView2.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
webView2.getSettings().setUseWideViewPort(true);
webView2.getSettings().setLoadWithOverviewMode(true);
webView2.getSettings().setAppCacheEnabled(true);
webView2.getSettings().setDatabaseEnabled(true);
webView2.getSettings().setDomStorageEnabled(true);
// 设置微信支付页面的跳转地址webView2.getSettings().setJavaScriptCanOpenWindows(true);
webView2.getSettings().setAllowFileAccess(true);
webView2.getSettings().setBuiltInZoomControl(true);
// 设置微信支付页面的跳转地址为weixin://wxpay/
webView2.getSettings().setCustomUrl("weixin://wxpay/");
// 将新的WebView添加到父布局中parentLayout.addView(webView2);
```
然而,这个配置并没有解决问题。
最终答案
经过一段时间的排查,最终我们发现了问题的原因:微信支付页面的跳转地址需要设置为`weixin://wxpay/`开头,而不是其他任何网址。我们尝试了以下代码来设置这个配置:
```javawebView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
// 设置微信支付页面的跳转地址webView.getSettings().setJavaScriptCanOpenWindows(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setBuiltInZoomControl(true);
// 设置微信支付页面的跳转地址为weixin://wxpay/
webView.getSettings().setCustomUrl("weixin://wxpay/");
// 添加一个新的WebViewWebView webView2 = new WebView(context);
webView2.getSettings().setJavaScriptEnabled(true);
webView2.getSettings().setSupportZoom(true);
webView2.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
webView2.getSettings().setUseWideViewPort(true);
webView2.getSettings().setLoadWithOverviewMode(true);
webView2.getSettings().setAppCacheEnabled(true);
webView2.getSettings().setDatabaseEnabled(true);
webView2.getSettings().setDomStorageEnabled(true);
// 设置微信支付页面的跳转地址webView2.getSettings().setJavaScriptCanOpenWindows(true);
webView2.getSettings().setAllowFileAccess(true);
webView2.getSettings().setBuiltInZoomControl(true);
// 设置微信支付页面的跳转地址为weixin://wxpay/
webView2.getSettings().setCustomUrl("weixin://wxpay/");
// 将新的WebView添加到父布局中parentLayout.addView(webView2);
```
然而,这个配置并没有解决问题。
最终,我们发现了问题的原因:微信支付页面的跳转地址需要设置为`weixin://wxpay/`开头,而不是其他任何网址。我们尝试了以下代码来设置这个配置:
```javawebView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
// 设置微信支付页面的跳转地址webView.getSettings().setJavaScriptCanOpenWindows(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setBuiltInZoomControl(true);
// 设置微信支付页面的跳转地址为weixin://wxpay/
webView.getSettings().setCustomUrl("weixin://wxpay/");
// 添加一个新的WebViewWebView webView2 = new WebView(context);
webView2.getSettings().setJavaScriptEnabled(true);
webView2.getSettings().setSupportZoom(true);
webView2.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
webView2.getSettings().setUseWideViewPort(true);
webView2.getSettings().setLoadWithOverviewMode(true);
webView2.getSettings().setAppCacheEnabled(true);
webView2.getSettings().setDatabaseEnabled(true);
webView2.getSettings().setDomStorageEnabled(true);
// 设置微信支付页面的跳转地址webView2.getSettings().setJavaScriptCanOpenWindows(true);
webView2.getSettings().setAllowFileAccess(true);
webView2.getSettings().setBuiltInZoomControl(true);
// 设置微信支付页面的跳转地址为weixin://wxpay/
webView2.getSettings().setCustomUrl("weixin://wxpay/");
// 将新的WebView添加到父布局中parentLayout.addView(webView2);
```
然而,这个配置并没有解决问题。
最终,我们发现了问题的原因:微信支付页面的跳转地址需要设置为`weixin://wxpay/`开头,而不是其他任何网址。我们尝试了以下代码来设置这个配置:
```javawebView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().