ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

微信小程序NFC卡读写,MifareClassic1K卡,M1卡片读写教程

微信小程序NFC卡读写,MifareClassic1K卡,M1卡片读写教程 最近来了个离谱的需求要用微信小程序读写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方法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卡的读取方法这里比较费劲需要知道你卡片的厂商给的秘钥信息如果你会暴力破解就当我没说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); }, }); }, }); }
返回列表