// 引入 jweixin-module const jweixin = require('jweixin-module') // 通过export 暴露常用的方法 export default { //判断是否在微信中 isWechat: function () { var ua = window.navigator.userAgent.toLowerCase(); if (ua.match(/micromessenger/i) == 'micromessenger') { //console.log('是微信客户端') return true; } else { //console.log('不是微信客户端') return false; } }, // 初始化WXSDK initJssdk: async function (callback) { /* **************************************** * 获取当前url然后传递给后台获取授权和签名信息 # TODO: 后台返回签名 *************************************** */ // let uri = encodeURIComponent(window.location.href.split('#')[0]); let uri = window.location.href.split('#')[0]; //返回需要的参数appId,timestamp,noncestr,signature等 let timestamp = parseInt(new Date().getTime() / 1000) + ''; let nonceStr = Math.random().toString(36).substr(2, 15); // 获取后台返回的签名 // 这里需要换成开发者自己的接口。 // 此处我对uni.request进行了封装, // 直接采用uni.request方法然后在成功的回调里面完成SDK初始化也是可行的,根据实际情况处理 let res = await GetSignature(nonceStr,timestamp,uri); //注入config权限配置 let wxConf = { debug: false, // 是否开启调试,第一次尝试,建议开启,后续可关闭 openTagList:['wx-open-launch-weapp'], //使用的开放标签列表,目前就两,本项目只用到跳转到小程序 appId:"your_appid", // 公众号或者服务号的appid,自行前往服务号管理后台查看 timestamp, // 上文计算的时间戳 nonceStr, // 随机字符串,注意是小驼峰式写法 signature:res, // 回台返回的签名 jsApiList: [ //这里是需要用到的接口名称 'checkJsApi', //判断当前客户端版本是否支持指定JS接口 'onMenuShareAppMessage', //分享接口 'getLocation', //获取位置 'openLocation', //打开位置 'scanQRCode', //扫一扫接口 'chooseWXPay', //微信支付 'chooseImage', //拍照或从手机相册中选图接口 'previewImage', //预览图片接口 'uploadImage' //上传图片 ] }; jweixin.config(wxConf); //完成微信配置 }, /* *************************************** * * 微信SDK功能实例:调用微信扫码 * 若没有初始化需要先调用initJssdk完成初始化 * 若当前页面已经完成initJssdk初始化,调用扫码功能是可以直接调用 jweixin.scanQRCode * * **************************************/ scanCode:function(callback,needResult=1){ if (!this.isWechat()) { console.log('不是微信客户端') return; } this.initJssdk(function (res) { jweixin.ready(function () { jweixin.scanQRCode({ needResult: needResult, // 0扫码结果由微信处理, 1是直接返回结果,由开发者处理 scanType: ["qrCode","barCode"], success: function (rs) { console.log(rs); callback(rs) } }) }); }); } }