版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34672907/article/details/89337717
由于之前做的小程序带参数进入都是用芝麻小程序做的二维码,直接传参即可,现在项目老大说要后台调用getWXACodeUnlimit生成二维码前端去取值。然后自己这三个问题搞了好久(当然也有百度),有些压根答不到点上,有些只有前半部分,所以我自己在这里也写一个吧,把整个需要扫码的流程都写完。
不同之处:有sence=这个参数。取值略微不同。
1.先说后台调getWXACodeUnlimit生成二维码,用户从微信进去点击扫一扫
onLoad: function (options) {
if (this.getUrlParam("cabinet_id", decodeURIComponent(options.scene))) {//扫码进来带参数
this.setData({ cabinet_id: this.getUrlParam("cabinet_id", decodeURIComponent(options.scene)) });//将id赋值给data里面的变量
}
},
// 获取扫码后的字符串,因为考虑有多个参数,所以写了一个公共函数
getUrlParam(name, str) {
let regs = new RegExp("scene=", "g"); //场景值
str = str.replace(regs, "");
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var array = str.match(reg);
if (array != null)
return array[2];
},
关键点是得到的参数要先decodeURIComponent
2.进入小程序后点击扫一扫,扫getWXACodeUnlimit生成的二维码
wx.scanCode({
success:(res)=> {
let str = decodeURIComponent(res.path ? res.path.substr(res.path.indexOf("?") + 1, res.path.length - 1) : "");
if (this.getUrlParam("cabinet_id", str)) {
this.setData({ "cabinet_id": this.getUrlParam("cabinet_id", str) });
}else{
wx.showModal({
title: '提示',
content: '没有找到相关设备,请找相关人员确认是否为有效二维码',
confirmText: "确定",
showCancel: false,
success: (res) => {if (res.confirm) {}}
})
}
}
})
关键点是扫码获取的参数并不是result,参数在path里面,小程序文档估计是没有更新吧,希望你们别掉这坑。path可以用decodeURIComponent转也可以不转,因为手机端自动解码了,但是小程序开发工具还是需要的
3.小程序编辑器模拟getWXACodeUnlimit生成的二维码传参,根据小程序说明文档,说需要encodeURLComponent一下,然后我就傻乎乎的scene=encodeURLComponent(cabinet_id=10001),大家别犯我的错啊,是这样scene=cabinet_id%3D10001
忘了说,要模拟需要点击编译,选择自定义编译条件。如下图:
好了,笔记就做到这,nice!