1.封装扫码配置wxJSSDK.js
var wxjssdk = require("jweixin-module"); //引入JSSDK
var jsApiList = ["scanQRCode"]; //需要使用的微信JS接口列表
export default {
async wxconfig() {
let params = {
linkurl: this.getUrl()
}
//getJsTicket为获取签名接口
let res = await getJsTicket(params);
let wxconfig = {
debug: false, //开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传
入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: res.appId, // 必填,公众号的唯一标识
timestamp: res.timestamp, // 必填,生成签名的时间戳
nonceStr: res.nonceStr, // 必填,生成签名的随机串,
signature: res.signature, // 必填,签名
jsApiList, // 必填,需要使用的JS接口列表
};
wxjssdk.config(wxconfig);
},
getUrl() {
var url = ''
var ua = navigator.userAgent.toLowerCase();
if (/iphone|ipad|ipod/.test(ua)) {
// 跳转扫码页面前缓存的地址
url = uni.getStorageSync('WxCodeUrl');
if (!url) url = location.href.split("?")[0]
} else {
url = location.href.split("?")[0]
}
return url;
},
scanQRcode({
success,
fail,
needResult = 1
}) {
this.wxconfig();
wxjssdk.ready(() => {
wxjssdk.scanQRCode({
needResult, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType: ["qrCode"], // 可以指定扫二维码还是一维码
success: res => {
// {errMsg: "scanQRCode:ok", resultStr: ""} 当needResult 为 1 时,
resultStr扫码返回的结果
// {errMsg: "scanQRCode:ok"}当needResult 为 0 时,会导致页面跳转
//扫码成功,抛出扫码结果
success(res);
},
});
});
wxjssdk.error(res => {
//config fail,抛出失败原因
fail(res);
});
},
};
2.在使用扫码的vue页面
import wxjs from "./wxJSSDK.js";
wxjs.scanQRcode({
success: (res) => {
let result;
try {
result = JSON.parse(res.resultStr);
} catch {
uni.showToast({
title: "请扫描正确的二维码",
icon: "none",
});
}
},
});