微信小程序端可以直接调用uni.scanCode()方法
scan(){
uni.scanCode({
success: function (res) {
var result=res.result;
//根据返回值进行下一步操作
}
});
}
微信H5端调用前需要先引包,注册接口,完成初始化(this.wx)
Vue.prototype.wxfn_init=function(){
var that=this;
this.wx = require('@/common/jweixin-module/jweixin-module.js');
var appid=this.appid;//公众号appid
var timestamp=JSON.stringify(parseInt(new Date().getTime()/1000));
var nonceStr=Math.random().toString(36).substr(2,15);
uni.request({//
url: "https://www.example.cn/getsignature",//从后端获取签名
method:"post",
data: {"timestamp":timestamp,"nonceStr":nonceStr,"url":location.href.split("#")[0]},
success:(data)=> {
that.wx.config({
// debug: true,
appId: that.appid, // 必填,公众号的唯一标识
timestamp: timestamp, // 必填,生成签名的时间戳
nonceStr: nonceStr, // 必填,生成签名的随机串
signature: data.data,// 必填,签名
jsApiList: ["updateAppMessageShareData","updateTimelineShareData","scanQRCode","chooseImage","getLocalImgData"] // 必填,需要使用的JS接口列表
});
}
});
}
微信H5,node.js后端返回签名
exports.getsignature=function(req,res){
//node后端引入crypto模块,便于签名加密
var crypto=require("crypto");
var timestamp=req.body.timestamp;
var nonceStr=req.body.nonceStr;
var url=req.body.url;
var hash=crypto.createHash('sha1');
var froms=req.body.froms;
var access_token="";
db.find("access_token",{"id":'access_token'},function(err,result){
var str="jsapi_ticket="+result[0].jsapi_ticket+"&noncestr="+nonceStr+"×tamp="+timestamp+"&url="+url;
hash.update(str);
var signval=hash.digest("hex");
res.send(signval);//将加密后的签名传回前端
})
}
完成初始化后可随时调用相关接口
this.wx.scanQRCode({
needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType: ["qrCode"], // 可以指定扫二维码还是一维码,默认二者都有
success: function (res) {
var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
//根据返回值进行下一步操作
}
});
欢迎指正和共同探讨。