前端关于微信支付的坑

微信h5支付一般是不建议在app内使用的,本文讨论在应用内嵌的webview使用h5支付所遇到的问题,只讨论前端。

原理:window.location.href = '跳转微信链接',总的来说就是向后端发起请求,后端处理好微信h5请求后返回给我们一个链接,前端直接唤醒这个链接打开微信支付。

配置redirect_url路径,在返回的链接拼接 redirect_url=encodeURIComponent('同一支付域名下的路径?参数1&参数2')即可在支付后返回链接,注意也要与支付域名一致

商家存在未配置的参数

可能原因:1、微信公众号未配置h5支付域名  2、唤起微信支付的网站域名跟配置的不对

这一步需要后端处理,前端一般只需要处理唤醒这一步。

安卓和ios的差异

实测在安卓机型中跳转完取消或者完成能够正常回到redirect_url所拼接的路径,苹果存在许多问题

ios苹果微信h5支付返回safari浏览器。这个问题一直存在,在网上目前有两种解决方式,一是留在微信将redirect_url拼接的域名中协议给取消比如你拼接了 'https://域名',将https://去掉,这样将在支付取消或完成后留在微信。二是配置scheme地址跳转回app,需要将Referer设置成scheme格式。

ios苹果留在微信后,原app内页面白屏。这是我遇到的另一个问题,window.location.href跳转后原app页面白屏了,几经折腾下来没办法换方案(有解决了的大佬评论区留个言),在原app单独写一个页面,用作自动跳转app,让苹果跳转到safari后在这个单独页再次拉起scheme到应用,相当于上面的第二种方法的简略版,不用设置Referer了,知道app的scheme就行,在空白页的js中作处理判断,如果是原app内就直接使用this.$route.push跳转回主页,参数在路径中都能拿得到。

微信内置jsapi支付

这种方式相对友好很多,直接在微信的内置浏览器使用,WeixinJSBridge在微信浏览器中内置,可以根据WeixinJSBridge有无值直接使用,对于的参数也是需要后端传递,注意使用前需要openid,而且支付者openid要与下单者对应。

WeixinJSBridge.invoke(
        'getBrandWCPayRequest',
        {
          appId: data.appId,
          timeStamp: data.timeStamp,
          nonceStr: data.nonceStr,
          package: data.package,
          signType: data.signType,
          paySign: data.paySign
        },
        function (res) {
          if (res.err_msg == 'get_brand_wcpay_request:ok') {
            // 使用以上方式判断前端返回,微信团队郑重提示:
            //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
          }
        }
      )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值