app嵌入h5页面发起微信支付(安卓自动唤起手机自动浏览器)报错商家参数格式有误,请联系商家解决解决方案,及ios支付完跳转safari浏览器无法返回app解决方案

一、报错“商家参数格式有误,请联系商家解决”解决方案:

1、背景:

我方开发了一套h5商城,购买、下单、唤起微信进行微信h5支付、使用等都由h5页面端开发完成,第三方app端只管给个入口访问这套h5商城部署后的链接即可。

2、声明:

一说起微信h5支付,很多人都以为是微信jssdk支付(在微信公众号使用的支付方式),实际h5端微信支付分为两种:jssdk支付、微信h5支付,我这里说的就是微信h5支付(非微信环境使用的微信支付方法)。

3、遇到的问题:

第三方app访问我方h5商城链接,到唤起微信支付时,拿到mweb_url后安卓端却直接用手机自动浏览器打开,然后就报错:“商家参数格式有误,请联系商家解决”。

4、问题分析原因:

拿到mweb_url后安卓端不应该直接唤起自带浏览器直接打开mweb_url,而是应该让h5页面拿到mweb_url后,直接打卡即可,否则前往微信端后会丢失 referer 。
以下是我遇到问题时跳转代码:

window.location.href = args.mweb_url;

至于该打开url方式为什么会唤起自带浏览器,我没有去研究具体原因,因为经我测试只有部分app用这样的方法是唤起自带浏览器,部分app根本不会出现这样的问题,很有可能是第三方app的原因导致,这种问题很难定位,比较诡异

那怎么办?把问题抛给对方解决?第三方往往是爸爸,人家会管你? 只能自己硬着头皮各种尝试,各种研究调试了,不是自己的问题也得找问题,哎,,,,,,,,,,,,,,,。
5、解决方案1(不推荐,因为需要双方配合):

h5页面拿到mweb_url后发送给app端,app拿到后进行二次打开,实现代码大致如下:

 webView.setWebViewClient(new WebViewClient() {
       @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url.startsWith("weixin://wap/pay?")) {
                    //如果return false  就会先提示找不到页面,然后跳转微信
                    Intent intent = new Intent();
                    intent.setAction(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse(url));
                    startActivity(intent);
                    return true;
                }
                return false;
            }
            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            //此方法是为了处理在5.0以上Htts的问题,必须加上
                handler.proceed();
        }
 });

解决方案2(推荐,ios和安卓都支持):

 var form = document.createElement('form');
  document.body.appendChild(form);
  form.method = "post";
  form.action = args.mweb_url;
  form.submit();
  document.body.removeChild(form);

二、ios支付完跳转safari浏览器无法返回app解决方案:

在ios app端,嵌入的h5支付,支付完成后会自动跳转到safari浏览器无法返回app,此时在safari浏览器打开的刚刚好是h5页面的主页,所以,机会点来了:在safari浏览器打开的那个h5页面判断是否是safari浏览器,如果是通过app协议跳转回到app:

      backApp() {
        if(this.isSafari()){
           window.location.href = 'shanxitoutiao://'
        }
      },
      isSafari() {
        if((/Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent))) {
          return true;
        }
        return false
      }
以上是我的经验分享,有问题的欢迎加我技术讨论群咨询或在下方留言。如有问题,欢迎加我技术交流QQ群 :811956471

你可能感兴趣的:(app嵌入h5页面发起微信支付(安卓自动唤起手机自动浏览器)报错商家参数格式有误,请联系商家解决解决方案,及ios支付完跳转safari浏览器无法返回app解决方案)