Vue h5 调用微信扫码接口

2023-10-30

需求

调用微信扫码接口,然后获取扫码返回结果的url中的参数,携参跳转到其他页面

1. 安装微信js-sdk

  • 通过yarn安装 yarn add weixin-js-sdk
  • 通过npm安装 npm i weixin-js-sdk

2. 引用

import wx from 'weixin-js-sdk'

3. 代码

methods:{
	sysClick(val){
        localStorage.setItem("clickType", val); // 产品需求的问题,多个按钮点击都会调用扫码,这里记录一下点击的是哪个按钮
        
        // 判断是否是微信浏览器
        function isWeiXin(){
	    var ua = window.navigator.userAgent.toLowerCase();
	    if(ua.match(/MicroMessenger/i) == 'micromessenger'){
	      return true;
	    }
	    else{
	      return false;
	    }
	  }
        
        
        // 兼容安卓和ios
        if (/iphone|ipad|ipod/.test(ua)) {
            this.newUrl = window.location.href.split('#')[0];
        }else if(/android/.test(ua)){
            this.newUrl = window.location.href;
        }
        
        //这里传给后台请求接口的参数url一定是去参的本网址,请求后端接口换取signature
        getConfigParameter({
            url: "https://m.baidu.com/index.html" // 我这里是写死的,正常要按上边那样对url进行处理,取 去参的this.newUrl
        }).then((res)=>{
            wx.config({
                // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                debug: false,
                // 必填,公众号的唯一标识
                appId: res.data.appId,
                // 必填,生成签名的时间戳
                timestamp: "" + res.data.timestamp,
                // 必填,生成签名的随机串
                nonceStr: "" + res.data.nonceStr,
                // 必填,签名
                signature: res.data.signature,
                // 必填,需要使用的JS接口列表,所有JS接口列表
                jsApiList: ['checkJsApi', 'scanQRCode'] 
            });
            wx.error(function (res) {
                // alert("出错了:" + res.errMsg);//这个地方的好处就是wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。
            });
            wx.ready(function () { // 通过ready接口处理成功验证
                wx.checkJsApi({ // 检测接口可用性
                    jsApiList: ['scanQRCode'],
                    success: function (res) {
                        wx.scanQRCode({
                            needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
                            scanType: ["qrCode"], // 可以指定扫二维码还是一维码,默认二者都有
                            success: function (res) {
                                var result = res.resultStr; // 当needResult 为 1 时,如果二维码的内容是url,这里会返回url
                                window.location.href = "https://m.baidu.com/index.html#/record?" + result.split("?")[1] // 跳转到页面
                        		// 扫码回调是异步的,这里代码写多了,后边是来不及执行的
                            },
                            error: function(res) {
                            }
                        });
                    }
                });
            });
        });
    },
}

遇到的问题总结

  • 调试一定要在手机上线上进行,本地不可以
  • 请求获取微信配置信息时,传给后台的url一定是去参的本网址,且不可以带 #
  • 微信扫码成功后的回调函数式异步的!!!所以如果回调函数代码内容多了的话,会还没来得及执行完就又跳回了上一页!
  • 我这里就遇到了这个情况,因为产品需求,要根据点击的不同按钮,判断扫码成功后跳到哪个页面。最初在扫码成功的回调函数里写的,结果发现只执行了前两行代码,后边的还没来得及执行,就自动跳回了上一页,这就很烦。最后只好直接让它携参跳到一个页,然后在那个页再获取点击的按钮的数据,进行判断跳转到真正要跳转的页面。

相关代码

created(){
	this.judge();
},
methods:{
	// 扫码返回后执行判断
    judge() {
        var clickType = localStorage.getItem("clickType");
        if(clickType==3 && this.user_type == 2) {  // 企业-确认收货
            localStorage.removeItem("clickType");
            this.$router.replace({
                path:'/confirmReceipt?id=' + this.id,
            })
        } else if(clickType==2 && this.user_type == 1) {  // 商家-扫码查询商品
            localStorage.removeItem("clickType");
            this.$router.replace({
                path:'/productShowB?id=' + this.id,
            })
        }else if(clickType==4 && this.user_type == 2) {  // 企业-物资信息录入
            localStorage.removeItem("clickType");
            this.$router.replace({
                path:'/product?id=' + this.id,
            })
        } else if(clickType==5 && this.user_type == 2) {  // 企业-扫码查询商品
            localStorage.removeItem("clickType");
            this.$router.replace({
                path:'/productShow?id=' + this.id,
            })
        }
    },
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue h5 调用微信扫码接口 的相关文章

随机推荐

  • 芯片设计中的时钟与约束

    1 同步电路与异步电路 首先来谈谈同步电路与异步电路 那么首先就要知道什么是同步电路 什么是异步电路 对于同步时序电路 不同的文章有不同的说法 大致有下面的定义方法 对于比较严格的定义 一个电路是同步电路 需要满足一下条件 每一个电路元件是
  • phpMyAdmin配置与安装 (适用于CentOS7)

    一 LNMP或LAMP的配置 phpMyAdmin运行在该架构中 注 php fpm出厂默认使用者和拥有者为apache 所以相比较来说LAMP更适合 本例以LNMP为架构 1 nginx安装 并设置开机自启动 root cy ed03 l
  • 【React】React路由概念

    文章目录 1 路由概述 1 1 后端路由 1 2 前端路由 2 SPA 3 前端路由两种模式 3 1 hash模式 3 2 history模式 1 路由概述 路由 简单来说 路由是根据不同的url地址展示不同的内容或页面 一个路由就是一个映
  • echarts x坐标文字换行显示

    xAxis type category data axisLabel 坐标轴刻度标签的相关设置 interval 0 显示一竖条 formatter function value return value split join n 一行显示
  • 给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。

    给定一个数组nums 编写一个函数将所有0移动到数组的末尾 同时保持非零元素的相对顺序 要求 1 必须在原数组上操作 不能拷贝额外的数组 2 尽量减少操作次数 3 注意时间空间复杂度 输入 0 1 0 3 12 输出 1 3 12 0 0
  • Linux文件权限分段说明

    Linux文件权限分段说明 Linux中的文件属性权限描述一共10位长度 并分为四段 如 rwxrwx 一共十位 第一段占一位 代表文件类型 其中例子中的 代表普通文件 其余的表示还有 文件类型部分 文件 d 文件夹 l 链接文件 可以理解
  • nginx解析PHP特卡,nginx解析PHP程序报错的解决方案

    root server 2 log tail f nginx error log 2019 07 31 01 51 02 error 26151 0 52 FastCGI sent in stderr Primary script unkn
  • Springboot 文件处理导入导出

    简单记录下使用Springboot进行文件与后端交互 excel前台导出等内容 这里用到了 elelemt ui HTML vue Springboot框架 一 后台导入 HTML
  • VBS加载微软网页控件webview2(Edge-Chromium谷歌内核)

    VBS加载微软网页控件webview2 Edge Chromium谷歌内核 VBA加载Webview2浏览器内核 代替了ie的webbrowser控件 效果类似 资源 VBS加载webview2控件代替ie的webbrowser Edge
  • Oracle UTL_HTTP(收集汇总有用资料)

    From Oracle The UTL HTTP package makes Hypertext Transfer Protocol HTTP callouts from SQL and PL SQL You can use it to a
  • shell脚本中任意输入三个数,输出最大值

    Linux下用shell脚本任意输入三个数 输出最大值 bin bash read p 请输入第一个数 n1 read p 请输入第二个数 n2 read p 请输入第三个数 n3 max n1 if n2 gt max then max
  • 同态加密简介

    同态加密概述 基本概念 同态加密 Homomorphic Encryption HE 指将原始数据经过同态加密后 对密文进行特定的运算 得到的密文计算结果在进行同态解密后的得到的明文等价于原始明文数据直接进行相同计算所得到的数据结果 历史与
  • 快速加入Health Kit,一文了解审核流程

    HUAWEI Health Kit是为华为生态应用打造的基于华为帐号和用户授权的运动健康数据开放平台 在获取用户授权后 开发者可以使用Health Kit提供的开放能力获取运动健康数据 基于多种类型数据构建运动健康领域应用与服务 为用户打造
  • axios实现本地缓存

    import axios from axios 线上数据库 axios defaults baseURL XXXXXXXXXXXXX 测试数据库 axios defaults baseURL http 192 168 1 25 8080 a
  • QMap和std::map的遍历

    两种遍历方式都使用迭代器 1QMap使用Iterator key 和Iterator value 方法获取第一个或第二个元素的值 而std map使用Iterator gt first Iterator gt second 来获取第一个或第
  • 为什么把系统带宽定义为-3dB?

    原文来自公众号 工程师看海 为什么把系统带宽定义为 3dB 对于我们常说的电路带宽或系统带宽 指的是增益为 3dB时的频率点 为什么选 3dB呢 对于带宽我们可以粗暴的理解为 系统的有效频率范围小于 3dB时的频点 简单来说 比如一个系统
  • 微信小程序练手实战:前端+后端(Java)

    1 前言 现在微信小程序越来越火了 相信不少人都通过各种途径学习过微信小程序或者尝试开发 作者就是曾经由于兴趣了解开发过微信小程序 最终自己的毕业设计也是开发一个微信小程序 所以现在用这篇博客记录我之前开发的一些经验和一些心得吧 2 主要内
  • 【Unity】一键切换是否允许#if UNITY_EDITOR条件编译生效

    在项目中经常会条件编译的方式来让编译器环境和非编译器环境跑不同的代码 但这种方式会让非编译器环境的代码测试变得十分不方便 UNITY EDITOR也是Unity预定义的宏 不能直接在PlayerSettings里面增加或删除 if UNIT
  • github实现在线运行程序

    复制定时任务代码进来 name weixin on workflow dispatch schedule 代表国际标准时间4点0分 北京时间需要 8小时 代表北京时间中午12点运行 cron 30 23 jobs 将工作流程中运行的所有作业
  • Vue h5 调用微信扫码接口

    需求 调用微信扫码接口 然后获取扫码返回结果的url中的参数 携参跳转到其他页面 1 安装微信js sdk 通过yarn安装 yarn add weixin js sdk 通过npm安装 npm i weixin js sdk 2 引用 i