美文网首页
app嵌入h5页面发起微信支付(安卓自动唤起手机自动浏览器)报错

app嵌入h5页面发起微信支付(安卓自动唤起手机自动浏览器)报错

作者: 不忘初心_d | 来源:发表于2021-02-24 11:21 被阅读0次

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

    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页面发起微信支付(安卓自动唤起手机自动浏览器)报错

          本文链接:https://www.haomeiwen.com/subject/vjtsfltx.html