vue前端移动项目调用微信扫一扫的实现

vue前端移动项目调用微信扫一扫的实现

1安装插件

npm install weixin-jsapi --save

2在main.js中引入

// 在man.js中引入
import wx from "weixin-jsapi"; 
// 在man.js中注册 
Vue.prototype.wx = wx

具体代码如下
bindingCarCode.vue页面

<template>
  <div class="moveCarService">
    <!--头部-->
    <div class="home-header">
      <van-nav-bar>
        <template #title>
          绑定挪车码</template>
      </van-nav-bar>
    </div>
    <!--主体区-->
    <div class="session-con">
      <div class="vanCard-style" v-for="item in carList">
        <div class="vanCard-style-left">
          <img :src="item.brandUrl" alt="">
        </div>
        <div class="vanCard-style-right"  >
          <div class="carCode">
            <p>{{item.plantNumber}}</p>
          </div>
          <div class="carStatus">
           <!-- <button @click='scanCode'>绑定二维码</button>-->
            <p class="button" v-if="item.binding==='N'" @click="scan()">点击这里绑定</p>
            <p  v-else>已绑定挪车码</p>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
  import wx from "weixin-jsapi";
  export default {
      data(){
          return{
            vehicleId:'',
            //后台接口的IP地址
            baseUrl:'',
            carList:[],
        }
      },
      created() {
      //获取页面数据列表
        this.getCarList();
        this.init();
      },
      methods:{
        /*获取数据列表*/
         getCarList(){
        },
        async init () {
          let  url = location.href.split('#')[0];
          //alert('url:' + url);
          /*//这里【url参数一定是去#的前端网址】
          $.get("获取微信认证参数的地址?url=去参的本网页地址",*/
          ///eFwechat/getSignaturorScan后台提供的接口地址
          await this.$http.get('/wechat/getSignatureForScan?url=' + url).then(res => { // url为例子,根据自己的项目来
            console.log(res);
            if (res.data.code === 200) {
              let val = res.data.data ; // 接口返回的数据,用于下面的配置
              console.log(val);
              wx.config({
                debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                appId: val.appId, // 必填,公众号的唯一标识
                timestamp: val.timestamp, // 必填,生成签名的时间戳
                nonceStr: val.nonceStr, // 必填,生成签名的随机串
                signature: val.signature, // 必填,签名,见附录1
                jsApiList: ["checkJsApi", "scanQRCode"], // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
              });
            }
          })
        },
          /*调转*/
        scan(){
          wx.ready(function () {
            wx.scanQRCode({
              needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
              scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
               success: function (res) {
                var result = res.resultStr;
                result = result.match(/ownerCode=(\S*)/)[1];
                // 当needResult 为 1 时,扫码返回的结果
                alert(result);
               //调转页面到扫描成功的页面
                 window.location.href="http://nuoche2.com/#/success"
              },
              error: function (res) {
                alert("出错了", +res);
                console.log(res);
              },
            });
          });
          },

      }
    }
</script>

<style scoped>
  .vanCard-style{
    margin: 0 12px 12px 12px;
    overflow: hidden;
    border-radius: 8px;
    padding-bottom: 10px;
    background-color: #FFFFFF;
    overflow: hidden;

  }
  .vanCard-style-left{
    width: 30%;
    height: 100%;
    float: left;
  }
  .vanCard-style-left img{
    padding-top: 18px;
    padding-left: 18px;
    height: 64px;
    width: 64px;

  }
  .vanCard-style-right{
    float: left;
    width: 70%;
  }
  .carCode{
    margin-top: 10px;
  }
  .carCode p{
    font-size: 17px;
    font-weight:600;
  }
  .carStatus{
    margin-top: 19px;
    font-size: 14px;
  }
  .button{
    color: #2385F4;
  }

  /deep/ .van-field__left-icon i{
    color: #ececeb;
  }
</style>

扫描成功后跳转到success.vue页面

<!--扫描二维码成功页面-->
<template>
  <div class="insurance-submit">
    <div class="message" v-if="data!==''">
      <img src="../../assets/images/success-icon.png"/>
      <h2>扫描成功!</h2>
      <p>您的二维码信息已扫描成功!</p>
      <van-button color="#0066B3" type="primary" @click="save">确认绑定</van-button>
    </div>
    <div class="message" v-else>
      <img src="../../assets/images/error.png"/>
      <h2>扫描失败!</h2>
      <p>二维码扫描失败,请返回重新扫描!</p>
      <van-button color="#0066B3" type="primary" @click="back">返回</van-button>
    </div>
  </div>
</template>
<script>
  export default {
    data () {
      return {
        data:window.localStorage.getItem("qrCode"),
        id:localStorage.getItem("vehicleId"),
      }
    },
    created () {
    },
    methods: {
      back(){
        //返回上一页
        this.$router.push('/bindingCarCode');
      },
     async save(){
        await this.$http
          .post('/owner/qrCode/bindingVehicle',this.$qs.stringify({
            qrCode:this.data,//二维码
            vehicleId:this.id
            })
          )
          .then(({data:res}) => {
            console.log(res);
            if(res.code!==200){
              this.$toast("绑定二维码失败!")
            } else if(res.code===500){
              this.$toast("服务器异常!")
            }
            this.$toast('绑定二维码成功!');
            //返回上一页
            this.$router.push('/bindingCarCode');
          })
      },
    }
  }
</script>
<style scoped >
  .insurance-submit {
    min-height: calc(100vh);
    background-color: #F7F7F7;
  }
  .message {
    text-align:center;
    padding:150px 80px 0 80px;
  }
  .message img {
    width:40%;
  }
  .message img {
    width:40%;
  }
  .message p {
    line-height: 24px;
  }
  .message .van-button {
    width:90px;
    border-radius: 5px;
    margin-top:30px;
  }

</style>

点击–点击这里绑定挪车码—>扫一扫---->扫码成功!根据后台逻辑进行处理扫描成功后的二维码。
在这里插入图片描述
在这里插入图片描述
扫描成功后
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值