二维码大家都很常见,使用场景也很多,但是日常使用中有两种场景比较常见。
1、二维码背后的内容是一个网址,扫描后直接跳转到对应的网址,比如:宣传海报,跳转到直播间、微官网或者微信公众号。
2、二维码背后的内容是字符串,扫描后直接展示出字符串内容,比如:有些设备上的二维码,扫描出来是一串字符串。
那么第二种二维码的使用场景是啥?其实无论扫描哪种二维码都是先把二维码的内容解析出来,然后再执行后面的操作,链接形式的就可以跳转链接,字符串形式的就展示字符串,所以我们就可以在解析出内容之后将这个内容拦截下来。比如这个字符串是设备编号,然后我们就可以根据这个编号去数据库查询这台设备的信息,然后展示出来。所以这给了我们很大的自主开发空间,那么怎么实现这个拦截过程呢?请看下面。
有很多种方法可以实现,这里我们只介绍微信公众号开发。
先上代码,这段代码是一些配置,可自行查看微信公众号开发者文档
wx.config({debug: false,appId: appId,timestamp: timestamp,nonceStr: nonceStr,signature: signature,jsApiList: ['scanQRCode', ]});
下面的代码为扫描成功后返回的内容
wx.ready(function() {wx.scanQRCode({needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有success: function (res) {alert("正确信息:"+JSON.stringify(res));}});
})
在我们测试的时候,发现安卓手机可以正常返回内容,但是苹果手机(iOS)会一闪而过,并且有时候能扫出来,有时候一闪而过,什么都不返回,有两种解决方法:
①在调取摄像头之前将需要扫描的二维码正对摄像头,这样扫描后会返回并弹出扫描的内容,很显然这不符合实际使用场景。
②第二种方案是:加一个延时,直接上代码。
wx.ready(function() { wx.scanQRCode({needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有success: function (res) {setTimeout(()=>{alert("正确信息:"+JSON.stringify(res));},1000) }})
})
在返回的内容里加一个延时,这样就很好解决了苹果手机(iOS)一闪而过不返回信息的问题。