错误可分为两类:一类是H5支付域名设置错误,另一类是URL跳转App错误。
类别一:H5支付域名设置错误
此类错误一般发生在机器上(网上有人说iOS也遇到类似错误),微信官方文档中有对此现象的详细描述。
一般来说,此类错误可以通过检查以下两点来排除:
登录商户号对应的商户平台-“产品中心”-“开发配置”,检查设置的H5支付域名是否包含商户发起支付的网页域名。
在商户发起支付的网页上,发起支付时,浏览器会重定向到微信页面(页面地址类似:)。 此页面将验证权限和安全性。 现在我们称之为微信验证页面。 。
为了验证发起支付的域名是否合法,在微信验证页面的HTTP请求中,头部(HTTP)需要有“”字段。 了解HTTP的同学可能知道,该字段告诉服务器原始请求资源的URI。 也就是说,腾讯的服务器会知道谁在请求微信验证页面。 所以该值应该是商户发起支付的页面域名。
一般情况下浏览器可能会自动为我们添加,但是在定制中是无法自动添加的。 需要手动设置,如:
Map extraHeaders = new HashMap(); extraHeaders.put("Referer", "商户申请H5时提交的授权域名"
第二类、URL跳转错误1、无法跳转到微信App
完成上述验证后,浏览器可能会被重定向到一个URL(类似于:://wap/pay?%&=&=&sign=)。
对于或iOS浏览器,这种URL通常可以成功重定向。 但对于定制和iOS来说,无法使用URL跳转。
1)安卓定制
通常,当我们在应用程序中使用自定义参数时,会设置许多参数。 经过测试,发现如果不设置的话,如下:
webView.setWebViewClient(new WebViewClient() { // some logic }
然后无法调用微信支付,返回-10,提示“不支持此协议”。 我们需要手动调用微信:
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // 如下方案可在非微信内部WebView的H5页面中调出微信支付 if (url.startsWith("weixin://")) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse(url)); startActivity(intent); return true; } return super.shouldOverrideUrlLoading(view, url); }
2)iOS
如果您使用的是iOS,它可以支持URL。 但从 iOS 9 开始,该 URL 必须在 Info. 中列入白名单。 是有效的。
打开Info.,添加“”行,将类型设置为,并向该数组添加一个条目:“”。
3)iOS
不支持 URL,或者默认不支持 URL。 我们需要手动调用微信。 参考解决方案:
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { NSURL *url = navigationAction.request.URL; NSString *urlString = (url) ? url.absoluteString : @""; if ([urlString containsString:@"weixin://"]) { [[UIApplication sharedApplication] openURL:url]; decisionHandler(WKNavigationActionPolicyCancel); } }
如果您使用该方法打开某个URL,则无需在Info.中将对应的URL列入白名单。
因为,会查询Info.,如果没有对应的,就会返回NO。 当你使用该方法打开一个 URL 时,它不会被调用。
2.支付完成后,您无法从微信App跳转回我们的App
调用微信支付时,微信允许设置回调地址。 在iOS上,支付完成后,微信会启动手机浏览器加载回调网址。
我们无法改变这个回调URL的逻辑,但是我们可以在回调URL指向的HTML页面中判断是否是iOS浏览器。 如果是这样,我们可以调用我们的应用程序自己的 URL。
我们可以在Info.中添加一个URL:
然后在回调页面适当的时候调用。 =“”,注意“”是你在Info.中设置的URL。
这将启动您的应用程序。 但在调用你的App之前,会询问用户“你想在xxx中打开它吗?”
总结
无论iOS还是,在浏览器中完成微信H5支付一般都没有问题。 这也是微信H5支付设计的应用场景。
无论是iOS还是 App,在连接微信H5支付时都可能会遇到各种问题,所以微信官方文档提醒:
APP端不建议使用H5支付。 如需在APP内使用微信支付,请接受APP支付。