公众号开发-移动端h5页面调用微信扫一扫

前端开发者小陈分享如何在微信公众号中集成JSSDK实现扫码功能,包括配置步骤、代码实例和关键点解析,重点讲述如何避免与页面冲突及正确校验签名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

大家好,我是前端小陈.今天为大家讲一下微信公众号开发,调用微信的JSSDK的案例.

前不久,接到这么一个需求:在H5网页实现扫一扫功能.  要求:微信端以及浏览器均可以实现扫一扫功能,而且不能用原生相机

第一次做这种需求,那肯定是很乐意的啦.能学到东西嘛.于是开始了我漫长的百度百度百度,导入试用.就这样过了一天~第二天经过多方问人之后,得到的结论是:三个解决方案.

  1. 调用微信扫一扫

  2. 用百度的sdk(收费)

  3. 调用原生相机

经过跟老大以及产品一番讨论后,决定使用微信扫一扫来实现这个扫码的功能,下面我就开始就我在实现这个功能过程中遇到的问题,进行记录讲解

调用微信的东西,那必须的看官方文档必然! 

快捷通道:微信开发文档

按照说明文档的使用方法:

第一步:绑定域名---登录公众号---设置与开发--功能设置--JS接口安全域名

第二步:引入js文件---自行百度

注意:引入的时候.遇到这么个问题.mian.js里面引入打印的方法,与页面引入打印出来的方法,有些有有些没有,百度得到的是有冲突.所以我使用的当前页面引入.

第三步:wx.config权限校验.

wx.config({
  debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  appId: '', // 必填,公众号的唯一标识
  timestamp: , // 必填,生成签名的时间戳
  nonceStr: '', // 必填,生成签名的随机串
  signature: '',// 必填,签名
  jsApiList: [] // 必填,需要使用的JS接口列表
});

注意:这一步,里面的参数通过后端写的接口返回给你.切记:后端返回的数据一定要记得去微信提供的校验网站核验!!!    后端返回的签名必须与校验网站生成的签名一致才可以,切记!

附上代码:

_config() {
        var pageUrl = location.href.split('#')[0] // 页面地址
        this.$myRequest({
          url: 'getSignPackage',
          methods: 'get',
          header: {
            token: uni.getStorageSync('token')
          },
          data: {
            url: pageUrl
          }
        }).then(res => {
          let config = res.data.data
          wx.config({
            // debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: config.appId, // 必填,公众号的唯一标识
            timestamp: config.timestamp, // 必填,生成签名的时间戳
            nonceStr: config.nonceStr, // 必填,生成签名的随机串
            signature: config.signature, // 必填,签名
            jsApiList: ['checkJsApi', 'scanQRCode'] // 必填,需要使用的JS接口列表
          });
          wx.error(function(res) {
            alert('出错啦====' + res.errMsg)
          })
          wx.ready(function() {
            wx.checkJsApi({
              jsApiList: ['scanQRCode'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
              success: function(res) {}
            })
          })
        })
      }

解释一下: 

pageUrl:当前页面地址,是需要做参数传回给后台的

config :是请求第三方接口(后端写的接口)用config 来接收这个返回的对象

--记得校验签名~~~

wx.config里面的参数拿到之后,调用wx.ready这个方法去校验, wx.checkJsApi 这个是做检验上面所需要调用微信的js接口检测的

第四步:调用微信扫一扫

wx.scanQRCode({
  needResult: 0, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
  scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
  success: function (res) {
    var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
  }
});

直接通过点击事件去唤起这个扫一扫,附上我的代码

//点击调起微信扫一扫
      openCaream() {
        this.userData = JSON.parse(uni.getStorageSync('userData'))
        const screener_id = this.userData.parent_id
        wx.scanQRCode({
          needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
          scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
          success: function(res) {
            var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
            console.log('返回的参数===',result)
            var arr = result.split('?')
            const data = arr[1].split('&')
            const student_id = data[0].split('=')[1]
            const plan_id = data[1].split('=')[1]
            getApp().globalData.student_id =student_id
            getApp().globalData.plan_id = plan_id
            uni.navigateTo({
              url: '/pages/screening/screeningDetails'
            })
            getApp().globalData.flag = true
          },
          error: function() {
            console.log('123')
          }
        })
      }

附上个视频有视频有真相

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈柱全

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值