H5公众号调用微信扫一扫功能(vue)

1.引入微信sdk 

import wx from 'weixin-js-sdk'

2.初始化微信sdk,构建扫一扫所需要的参数

 async initWxConfig() {

      //首先获取当前url地址

      let url = await getSignUrl()

      let params = {

        appid: this.$route.query.appid,

        url: url,

      }

      //调用后端接口获取公众号参数

      const resp = await apiGet(apiGetSignature, params)

      if (resp.code == 200) {

        wx.config({

          debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

          appId: resp.data.appid, // 必填,公众号的唯一标识

          timestamp: resp.data.timestamp, // 必填,生成签名的时间戳

          nonceStr: resp.data.nonceStr, // 必填,生成签名的随机串

          signature: resp.data.signature, // 必填,签名

          jsApiList: ['checkJsApi', 'scanQRCode'],

          openTagList: ['wx-open-launch-weapp'],

          success: function () {

            console.log('调用成功')

          },

          fail: function (error) {

            console.log(error)

          },

        })

      } else {

        console.log('auth wx url error')

      }

    },

getSignUrl获取当前项目链接(此处封装的公用方法,便于后续其他页面调用): 

export function getSignUrl(){

    var signLink = ''

    var ua = navigator.userAgent.toLowerCase();

    if (/iphone|ipad|ipod/.test(ua)) {

        signLink =window.entryUrl;

        if(!signLink)signLink = location.href

    } else {

        signLink = location.href

    }

    return signLink;

}

3.点击页面按钮调用微信提供的扫一扫方法:

 

  handleClick() {

      wx.ready(function () {

        wx.checkJsApi({

          //判断当前客户端版本是否支持指定JS接口

          jsApiList: ['scanQRCode'],

          success: function (res) {

            // 以键值对的形式返回,可用true,不可用false。如:{"checkResult":{"scanQRCode":true},"errMsg":"checkJsApi:ok"}

            if (res.checkResult.scanQRCode != true) {

              console.log('抱歉,当前客户端版本不支持扫一扫')

            }

          },

          fail: function (res) {

            //检测getNetworkType该功能失败时处理

            alert('checkJsApi error')

          },

        }) //wx.checkJsApi结束

        // 调起企业微信扫一扫接口

        wx.scanQRCode({

          desc: 'scanQRCode desc',

          needResult: 0, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,

          scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有

          success: function (res) {

            console.log('调用扫描成功', res)

            var result = res.resultStr // 当needResult 为 1 时,扫码返回的结果

            $('#codeValue').val(result) //显示结果

            // alert("扫码结果为:" + result);

          },

          error: function (res) {

            console.log(res)

            if (res.errMsg.indexOf('function_not_exist') > 0) {

              alert('版本过低请升级')

            }

          },

        }) //wx.scanQRcode结束

      }) //wx.ready结束

    },

 

全部完整代码: 

<!-- 微信扫一扫 -->
<template>
  <div class="collaborative_page common_page">
    <van-button type="primary" @click="handleClick">点击扫一扫</van-button>
  </div>
</template>

<script>
import { apiGetSignature } from '@/api/common.js'
import { getSignUrl } from '@/utils/share.js'
import wx from 'weixin-js-sdk'
export default {
  data() {
    return {}
  },
  created() {
    this.LoginInfo = mySessionStorage.getItem('LoginInfo')
      ? JSON.parse(mySessionStorage.getItem('LoginInfo'))
      : {}
    this.initWxConfig()
  },
  mounted() {},
  methods: {
    //点击按钮扫一扫
    handleClick() {
      wx.ready(function () {
        wx.checkJsApi({
          //判断当前客户端版本是否支持指定JS接口
          jsApiList: ['scanQRCode'],
          success: function (res) {
            // 以键值对的形式返回,可用true,不可用false。如:{"checkResult":{"scanQRCode":true},"errMsg":"checkJsApi:ok"}
            if (res.checkResult.scanQRCode != true) {
              console.log('抱歉,当前客户端版本不支持扫一扫')
            }
          },
          fail: function (res) {
            //检测getNetworkType该功能失败时处理
            alert('checkJsApi error')
          },
        }) //wx.checkJsApi结束

        // 调起企业微信扫一扫接口
        wx.scanQRCode({
          desc: 'scanQRCode desc',
          needResult: 0, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
          scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有
          success: function (res) {
            console.log('调用扫描成功', res)
            var result = res.resultStr // 当needResult 为 1 时,扫码返回的结果
            $('#codeValue').val(result) //显示结果
            // alert("扫码结果为:" + result);
          },
          error: function (res) {
            console.log(res)
            if (res.errMsg.indexOf('function_not_exist') > 0) {
              alert('版本过低请升级')
            }
          },
        }) //wx.scanQRcode结束
      }) //wx.ready结束
    },
    async initWxConfig() {
      //首先获取当前url地址
      let url = await getSignUrl()
      let params = {
        appid: this.$route.query.appid,
        url: url,
      }
      //调用后端接口获取公众号参数
      const resp = await apiGetSignature(params)
      if (resp.code == 200) {
        wx.config({
          debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
          appId: resp.data.appid, // 必填,公众号的唯一标识
          timestamp: resp.data.timestamp, // 必填,生成签名的时间戳
          nonceStr: resp.data.nonceStr, // 必填,生成签名的随机串
          signature: resp.data.signature, // 必填,签名
          jsApiList: ['checkJsApi', 'scanQRCode'],
          openTagList: ['wx-open-launch-weapp'],
          success: function () {
            console.log('调用成功')
          },
          fail: function (error) {
            console.log(error)
          },
        })
      } else {
        console.log('auth wx url error')
      }
    },
  },
}
</script>

官方文档提供的扫一扫方法:

概述 | 微信开放文档 

 

要在Vue H5调用微信分享,首先需要引入微信官方的JS-SDK库。在Vue项目的index.html文件中,可以在<head>标签内添加如下代码: ```html <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> ``` 然后,在Vue组件的created生命周期钩子函数中,使用Vue的axios或者其他网络请求库向后端请求获取微信配置信息。 ```javascript created() { this.fetchWechatConfig(); }, methods: { async fetchWechatConfig() { const response = await axios.get('/api/wechat/config'); // 向后端请求微信配置信息 const { appId, timestamp, nonceStr, signature } = response.data; // 将配置信息存储到全局变量中 this.$store.commit('setWechatConfig', { appId, timestamp, nonceStr, signature }); this.initWechatSDK(); }, initWechatSDK() { const { appId, timestamp, nonceStr, signature } = this.$store.state.wechatConfig; wx.config({ appId, timestamp, nonceStr, signature, jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage'], // 配置需要使用的微信API }); // 进行微信SDK的初始化 wx.ready(() => { this.shareToWechat(); }); }, shareToWechat() { const shareData = { title: '分享标题', link: '分享链接', imgUrl: '分享图片链接', desc: '分享描述', }; // 配置分享的具体内容 wx.onMenuShareTimeline(shareData); // 分享到朋友圈 wx.onMenuShareAppMessage(shareData); // 分享给好友 }, }, ``` 上述代码中,我们通过axios库向后端请求了微信配置信息,并将其存储到Vuex的全局状态中。然后,我们使用微信JS-SDK中的`wx.config`方法进行微信验证和初始化配置。一旦初始化成功,`wx.ready`回调函数将会被触发,我们在该函数中调用`shareToWechat`方法来配置分享的具体内容。 在`shareData`对象中,我们可以自定义分享的标题、链接、图片和描述等信息,然后使用`wx.onMenuShareTimeline`方法配置分享给朋友圈的内容,使用`wx.onMenuShareAppMessage`方法配置分享给好友的内容。 最后,我们可以在Vue组件中调用`shareToWechat`方法来触发微信分享。 注意:在实际开发中,需要根据微信的API文档和后端提供的接口来进行相应的调整和配置。以上代码仅为示例,具体实现方式可能会有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值