前提,在安卓App上已经实现过了M1卡交互读写,在微信小程序中的密钥是正确的,一直验证失败,卡没问题,密钥没问题,卡片Id没问题
let mifareClassic = this.NFCAdapter.getMifareClassic();
mifareClassic.connect({
success: res => {
console.log("连接成功:", res);
let cardPsd = that.allKeys[1]
console.log("获取KeyB密码:", that.allKeys);
const params = {
cmd:0x61,// 验证指令 60,验证A密钥,61 验证B密钥
block: 0x01,// 第几块
cardId: [0x23, 0x9a, 0x30,0x96], // 卡片id onDiscovered获取
key: [0x0d, 0x99, 0x3f, 0x70, 0x92, 0x4e], // 验证KeyB密钥
};
console.log("snr:", params);
console.log("snr2:", that.cardInfo.snr);
console.log("params:", params);
mifareClassic.transceive({
data: new Uint8Array([params.cmd, params.block, ...params.cardId, ...params.key]).buffer,
success: function(res) {
console.log("connect发送数据并解密成功, 接收数据如下:", res);
},
fail: function(err) {
console.log("connect发送数据失败B", err);
},
});
}
})
13017是系统抛回来的错误,可能是卡没贴紧,指令不对等情况,也可以检查下是否是系统的NFC的固件版本导致
MifareClassic.transceive(Object object)
分别发送数据
1 先验证扇区keyA密码:
指令0x60+块号(1byte)+tagID(4byte)+keyA(6byte)
2 验证通过后进行块数据读取:
指令 0x30 + 块号 可以用于读取某个块的数据
我就尝试用指令0x60 ,13017,卡贴的绝对够紧,调试库版本3.0.1,我安卓手机也没问题,因为App 已经实现过NFC m1卡,cpu卡交互了