最近来了个离谱的需求,要用微信小程序读写NFC卡数据,微信官方文档可以说是垃圾的一批了,啥都没有,踩了好几天坑把整体思路记录一下。
如果需要DEMO可直达下载链接:https://download.csdn.net/download/weixin_65984842/87703559
首先调用微信自带的方法
const adapter = wx.getNFCAdapter(); //调用wx.getNFCAdapter()获取NFC适配器实例
然后在onload中利用onDiscovered监听卡片,正常都会返回一个data,里面有ID还有techs,如果是NDEF卡还会返回一个messages,直接操作messages就可以了比较简单,M1是加密卡需要调用getMifareClassic方法文章来源:https://www.toymoban.com/news/detail-537794.html
adapter.onDiscovered(res => {
console.log("读取到卡片了", res);
let tagId = res.id; //如果是M1卡,这个ID是需要用于读取的秘钥
let ssid = _this.buf2hex(tagId) //转换数据格式
console.log("获取到tagID:", ssid);
this.setData({ssid});
this.isCardTypeRead(res,adapter);
})
M1卡的读取方法,这里比较费劲,需要知道你卡片的厂商给的秘钥信息,如果你会暴力破解就当我没说文章来源地址https://www.toymoban.com/news/detail-537794.html
let adapter = that.data.Nfcadapter;
if (adapter.tech.mifareClassic) {
console.log("发现" + adapter.tech.mifareClassic + "卡");
let mifareClassic = adapter.getMifareClassic();
mifareClassic.connect({
success: (res) => {
const {ssid,cardPwda } = _this.data
console.log("设备已连接", res);
console.log("开始拼接验密指令。。。");
let arr = [0x60, 0x00] //查询扇,后边需要拼接上秘钥,
let newCardPsd = new Uint8Array(cardPsd) //转换命令格式
let newArr = [...arr,...newCardPsd] //把查询扇区的初始跟查询ID拼接到一起
console.log('read',newArr)
// 0x60, //指令类型
// 0x00, //扇区读取位置 00就是读取所有,09就是第二扇区第二块
// 0x11, 0x22, 0x33, 0x44, //秘钥A
// 0xff, 0xff, 0xff, 0xff, 0xff,0xff //秘钥B,根据卡片厂商给的信息写通常都是固定的或者跟A一样
var arrayBuffer = new Uint8Array(arr).buffer;
console.log("解密指令为:", arrayBuffer);
console.log("解密指令为:", arr);
mifareClassic.transceive({
data: arrayBuffer,
success: function (res) {
console.log("connect发送数据并解密成功, 接收数据如下:", res);
console.log('connect发送数据并解密成功, 接收数据如下:', that.buf2hex(res.data));
},
fail: function (err) {
console.log("connect发送数据失败A", err);
},
});
},
});
// 向标签发送读取指定块数据的命令,以验证标签是否已经连接成功。
mifareClassic.isConnected({
success: function (isConnected) {
console.log("isConnected成功连接", isConnected);
var arr02 = [0x30, 0x00]; //第二位0x00以为读取从0开始的所有扇区
var arrayBuffer02 = new Uint8Array(arr02).buffer;
console.log(arrayBuffer02);
mifareClassic.transceive({
data: arrayBuffer02,
success: function (res) {
console.log("读取数据:", res);
let hexArr = Array.prototype.map.call(
new Uint8Array(res.id),
function (bit) {
return ("00" + bit.toString(16)).slice(-2);
}
);
let strCode= hexArr.join("");
console.log('isConnected转换后的',strCode);
that.setData({
nfcMsg: str,
});
mifareClassic.close({
success: (res) => {
console.log("清除标签连接成功");
},
fail: (error) => {
console.error("清除标签连接失败");
},
complete: (res) => {
console.log(res);
},
});
},
fail: function (err) {
console.log("失败", err);
},
});
},
});
}
到了这里,关于微信小程序读取NFC卡片数据,NDEF-M1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!