微信网页调用jssdk扫一扫,63002报错的坑,ios的兼容问题

一,因为项目需要用到微信网页扫一扫功能,并且去找了很多文章都没有统一的整理,所以就整理了一下 比较常见的坑

1.如何在网页调用扫一扫功能

1. 先引入npm

npm install weixin-js-sdk

如果你需要用微信的支付那些api 那就需要多引入
weixin-jsapi,当然如果你不需要也可以不引入

npm install weixin-jsapi

2. 引入之后在你需要用到扫一扫的页面引入(已经兼容ios的扫一扫的写法)

import wx from 'weixin-jsapi'
methods:{
    // 扫一扫 
    scanFn () {
     // 这是触发 扫一扫的方法
      wx.scanQRCode({
            needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
            success: (res) => {
              console.log(res)
              // 这是扫码获取到的,在resultStr 是一个字符串
              let type = res.resultStr
              console.log(type)
            }
        })
    },
    // 请求接口获取参数
    apiWxConfig (val) {
      console.log(val)
      return new Promise((resolve)=>{
         写你请求后台获取到的信息
        // reslove()
      })
    },
    async wxScanCode() {
    // 判断 是什么端解决ios 的兼容问题,如果是安卓端则直接把整个url传给后台就行,要是ios 则需要截取#号
      var u = navigator.userAgent;
      var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器 
      var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端 
      let onurl = null
      if (isAndroid) {
         onurl = window.location.href
      }
      if (isiOS) {
        onurl = window.location.href.split('#')[0]
      }
      let result = await this.apiWxConfig({
        url: onurl, // 获取当前扫码界面的url,url后面不能携带任何参数及#号,所以在此进行分割
      })
      console.log("result", result);
      if (!result.success) {
      return  this.$toast(result.message)
      }
      if (result.success) {
        // 后端返回的参数
        var timestamp = result.data.timestamp;
        var noncestr = result.data.nonceStr;
        var signature = result.data.signature;
        var appId = result.data.appId;
        console.log("rresult.data.timestamp", result.data.timestamp);
        wx.config({
          debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
          // debug : true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
          appId: appId, // 必填,公众号的唯一标识
          timestamp: timestamp, // 必填,生成签名的时间戳
          nonceStr: noncestr, // 必填,生成签名的随机串
          signature: signature, // 必填,签名,见附录1
          jsApiList: ["checkJsApi", "scanQRCode", "chooseWXPay"], // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
        }); // 错误时
        wx.error(function (res) {
          this.$toast("出错了:" + res.errMsg); //这个地方的好处就是wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。
        });
       wx.ready(function () {
            wx.checkJsApi({
                jsApiList: ['scanQRCode'],
                success: function () {
                }
            })
        })
      } else {
        this.$toast("js-sdk,微信配置失败");
      }
    }
  },

上面的 scanFn 是触发扫一扫的功能。wxScanCode 是初始化,可以在mounted的时候直接调用wxScanCode方法进行初始化,按钮点击再触发scanFn 扫一扫,这样分离出来就不用每次都初始化之后才调用扫一扫

3.关于63002的报错,基本按照上面的写法是不是出现的不过也说一下吧
是因为 传输到后台的path 和 当前页面path不匹配导致的,百度的很多是截取页面的#号前面部分传输给后台,但这其实是IOS的做法,安卓是直接用整个path就行

window.location.href.split(’#’)[0]

所以 上面的代码已经做了兼容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值