news 2026/8/20 22:04:47

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
微信小程序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); }, }); }, }); }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/20 22:03:43

软件测试面试Python核心考点:数据处理、OOP、异常处理与测试库实战

如果你正在准备2026年的软件测试岗位秋招或实习面试,特别是那些要求Python基础的岗位,你可能会发现一个矛盾的现象:网上的Python面试题浩如烟海,但真正在软件测试面试中被高频问到的核心考点,却总是那么几个。你刷了无…

作者头像 李华
网站建设 2026/8/20 22:01:10

AI视频平台权限配置常见问题和排查清单

在多角色(如系统管理员、区域运维员、算法调度员、安保审计员)共存的复杂现场,AI视频平台权限配置失误常导致前端用户越权访问、实时视频流断连、组织树加载为空或高等级告警漏报。 本文针对多账号、多角色场景下的权限控制(RBAC…

作者头像 李华
网站建设 2026/8/20 22:01:04

AI视频平台权限配置参数配置说明与排查指南

在多角色(如超级管理员、区域运维员、算法调度员、安保审计员)共存的大型安防与 AI 视频分析项目中,AI视频平台权限配置不仅关乎系统安全与合规,更直接决定了系统的稳定性与响应性能。由于权限控制贯穿系统全链路,底层…

作者头像 李华
网站建设 2026/8/20 22:00:02

终极Prettymaps样式系统指南:打造精美地图的完整教程

终极Prettymaps样式系统指南:打造精美地图的完整教程 【免费下载链接】prettymaps Draw pretty maps from OpenStreetMap data! Built with osmnx matplotlib shapely 项目地址: https://gitcode.com/GitHub_Trending/pr/prettymaps Prettymaps是一个基于Op…

作者头像 李华