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

news/2024/7/24 3:36:14 标签: javascript, html5

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

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

1. 先引入npm

javascript">npm install weixin-js-sdk

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

javascript">npm install weixin-jsapi

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

javascript">import wx from 'weixin-jsapi'
javascript">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]

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


http://www.niftyadmin.cn/n/1529389.html

相关文章

016.SpringBoot+Redis

Redis安装教程可以看这里 Redis 安装 | 菜鸟教程 Redis安装目录 启动Redis 打开Cmd cd C:\redisredis-server.exe redis.windows.conf 下面截图代表启动了redis Redis常规命令 Cmd cd C:\redis后--连接服务redis-cli.exe -h 127.0.0.1 -p 6379--获取redis服务器信息Inf…

017.1.SpringBoot+Elastic-Job任务调度-配置写在类里

安装zookeeper 2.0 Zookeeper 安装配置 | 菜鸟教程 解压到本地&#xff0c;并创建data和logs文件夹 创建配置zoo.cfg tickTime2000dataDirC:/zookeeper-3.4.5/datadataLogDirC:/zookeeper-3.4.5/logsclientPort2181 启动 引入依赖 <dependency><groupId>com.gi…

vue关于axios跨域有问题 后的解决记录

因为axios本身没有跨域的设置&#xff0c;有时候可以通过设置headers进行跨域处理的时候&#xff0c;(可能没深入了解这方面的知识),设置完 跨域头axios跨域会出现 Strict-origin-when-cross-origin&#xff08;双重跨域&#xff09;跨域问题&#xff0c;所以这时就只能换一种跨…

017.2.SpringBoot+Elastic-Job任务调度-配置写在XML里

引入依赖 <dependency><groupId>com.dangdang</groupId><artifactId>elastic-job-lite-core</artifactId><version>2.1.5</version> </dependency> <dependency><groupId>com.dangdang</groupId><artif…

017.4.SpringBoot+Elastic-Job任务调度-后台管理

后台官方地址 https://github.com/apache/shardingsphere-elasticjob 打包后进入bin&#xff0c;运行bat 输入http://localhost:8899/进入后台 账号 root 密码root 添加配置 就可以监控服务的运行了 修改端口 修改登录密码

vue在开发中想要刷新标签重新渲染的问题,($nextTick + setTimeout)

如题&#xff0c;当在vue开发中当你用其他组件需要做demo操作时&#xff0c;你改变了其中的数据并重新触发想要更新时&#xff0c;你发现他的数据不是覆盖而是叠加上去了 比如 在一个 组件标签id xxx中 他保存的数组是根据[1,2,3,4]的数据渲染时&#xff0c;当你改变数据重新…

017.3.SpringBoot+Elastic-Job任务调度-打包后台

这里以打包2.1.5为例,进入官方源码&#xff0c;点tags 进入官方后台 GitHub - apache/shardingsphere-elasticjob: Distributed scheduled job framework 点tags 下载2.1.5的代码 修改pom.xml java版本为1.8&#xff0c;默认是1.7 进入FileSetting 这里改成9 右键项目Settin…

vue3 中的不同与坑的总结(可能随版本更新修复)

一、写法上面的不同 以往我们写的代码是 <script> export default {name: "App",data () {return {a:1}},methods: {myFn() {console.log(方法)}},computed:{},watch:{} }; </script>vue3 中直接写在setup中&#xff0c;并且需要return出去。并且计算属…