微信小程序的NFC读写功能基于微信提供的API实现,允许开发者在小程序中访问设备的NFC模块,进行标签读取和写入操作。该功能适用于门禁卡、支付、物流追踪等场景。微信官方提供了wx.getNFCAdapter接口获取NFC适配器实例,后续操作均基于此适配器。
使用前需注意:
- 手机硬件需支持NFC功能。
- 微信版本要求7.0.0及以上。
- 需在小程序后台配置
NFC权限。
实现步骤
1. 初始化NFC适配器
通过wx.getNFCAdapter获取NFC适配器实例,并检查设备支持情况:
javascript
const nfcAdapter = wx.getNFCAdapter();
if (!nfcAdapter) {
wx.showToast({ title: '设备不支持NFC', icon: 'none' });
return;
}
2. 监听NFC标签发现
使用onDiscovered监听NFC标签靠近事件,获取标签ID(UID)或其他数据:
javascript
nfcAdapter.onDiscovered(res => {
const uid = res.id; // 标签UID(16进制字符串)
wx.showModal({ title: '检测到NFC标签', content: `UID: ${uid}` });
});
3. 读取NFC标签数据
调用getNdefMessage读取标签中的NDEF格式数据(如文本、链接):
javascript
nfcAdapter.getNdefMessage({
success(res) {
const messages = res.messages; // NDEF消息数组
messages.forEach(msg => {
if (msg.recordType === 'text') {
console.log('文本内容:', msg.payload);
}
});
},
fail(err) {
console.error('读取失败:', err);
}
});
4. 写入NFC标签数据
通过writeNdefMessage写入NDEF格式数据(需标签可写):
javascript
nfcAdapter.writeNdefMessage({
messages: [{ recordType: 'text', payload: 'Hello NFC' }],
success() {
wx.showToast({ title: '写入成功' });
},
fail(err) {
console.error('写入失败:', err);
}
});
应用案例:门禁卡模拟
以下是一个模拟门禁卡功能的完整代码示例,实现读取标签UID并验证权限:
javascript
Page({
data: {
uid: '',
access: false,
},
onLoad() {
this.initNFC();
},
initNFC() {
const nfcAdapter = wx.getNFCAdapter();
if (!nfcAdapter) {
wx.showToast({ title: '设备不支持NFC', icon: 'none' });
return;
}
nfcAdapter.onDiscovered(res => {
this.setData({ uid: res.id });
this.checkAccess(res.id);
});
},
checkAccess(uid) {
// 模拟验证逻辑:假设合法UID为 '0A1B2C3D'
const validUIDs = ['0A1B2C3D', '4E5F6A7B'];
const access = validUIDs.includes(uid);
this.setData({ access });
if (access) {
wx.showModal({ title: '验证通过', content: '欢迎进入' });
} else {
wx.showModal({ title: '验证失败', content: '无效门禁卡' });
}
},
});
注意事项
- 用户授权:首次调用NFC功能时会弹窗请求权限,需用户手动允许。
- 兼容性:不同手机厂商的NFC协议实现可能差异,建议测试多款设备。
- 调试工具:开发者工具无法模拟NFC功能,需真机调试。
通过上述代码和案例,可快速实现基于微信小程序的NFC读写功能,扩展至实际应用场景中。