Android 微信H5支付,无法拉起微信支付页面

9

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().

支付Android微信支付

版权声明:除非特别标注,否则均为网络文章,侵权请联系站长删除。

上一篇 Android端接入微信支付

下一篇 微信支付体验