我们在使用微信开放平台的工具包 JS-SDK 时,可以直接使用微信自带的扫一扫能力,来获取一维码和二维码内容。先来看看腾讯的官方接口。

调起微信扫一扫接口:

wx.scanQRCode({
    needResult: 0, // 默认为 0 ,扫描结果由微信处理,1则直接返回扫描结果
    scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
    success: function (res) {
        var result = res.resultStr; // 当 needResult 为 1 时,扫码返回的结果
    }
});

在使用过程中我们发现,当 needResult 为 1 时,对二维码的扫码结果完全一致没有异议,但是扫描一维码的时候,会在扫描结果前加上一维码的码制。如内容为 123456789 的一维码,扫描结果可能变成了 EAN_13,123456789,我们需要去掉前面的码制 EAN_13, 才能得到正确的结果。

改造后的接口:

wx.scanQRCode({
    needResult: 1, // 默认为 0 ,扫描结果由微信处理,1则直接返回扫描结果
    scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
    success: function (res) {
        var result = res.resultStr; // 当 needResult 为 1 时,扫码返回的结果
        var resultArr = result.split(','); // 扫描结果以逗号分割数组
        var codeContent = resultArr[resultArr.length - 1]; // 获取数组最后一个元素,也就是最终的内容
    }
});

通过以上简单修改,我们就可以获取到一维码和二维码的真实内容 codeContent 了。

注意:如果条码或二维码中原本就包含逗号,则该方法无效,可能导致获取到的内容错误或缺失。如果有更好的方法,希望大家不吝赐教。