DESKTOP-2IO5MST\huting 1 рік тому
джерело
коміт
df6b499533

+ 10
- 1
pages.json Переглянути файл

@@ -80,7 +80,16 @@
"navigationBarTitleText": "APP扫描签约"
}
}
],
,{
"path" : "pages/nfc/nfc",
"style" :
{
"navigationBarTitleText": "NFC链接",
"enablePullDownRefresh": false
}
}
],
"subPackages": [{
"root": "subpackage/after-sale", //售后相关
"pages": [{

+ 1
- 1
pages/bluetooth/bluetooth.vue Переглянути файл

@@ -308,7 +308,7 @@
let item = e;
//停止扫描蓝牙
console.info("停止扫描蓝牙");
wx.stopBluetoothDevicesDiscovery({
uni.stopBluetoothDevicesDiscovery({
success: function (res) {
console.log(device);
if (item.selected == false) {

+ 135
- 0
pages/nfc/nfc.vue Переглянути файл

@@ -0,0 +1,135 @@
<template>
<div></div>
</template>
<script setup lang='ts'>
import {
onLoad,
onReady
} from "@dcloudio/uni-app";
import {
ref,
reactive
} from "vue";
const tools = require("../../static/etcUtil/tools.js");
const NFCAPI = require('../../utils/nfc/NFCAPI.js');
const cmd = require("../../static/etcUtil/cmdConfig.js");
const routeType = ref(null); //来源 1激活 2圈存 3信息重写 4信息读取

const state = reactive({
fee: "",
cardId: ""
});

onLoad((option) => {
routeType.value = option.routeType ? option.routeType : "1";
state.cardId = option.cardId;
if (option.fee) {
state.fee = option.fee;
}
console.log("传过来的参数", option)
});

//已准备
onReady(() => {
scanNfc();
})

function scanNfc() {
tools.showLoadingAlert("扫描蓝牙中");
//先断开所有设备
NFCAPI.remove(() => {
//开始扫描设备
NFCAPI.startScanDevice((res) => {
tools.hideLoadingAlert();
if (res.code != 0) {
if (res.code == 1203) {
tools.showModalAlert("扫描超时请重新扫描NFC标签", function(res) {
if (res.confirm) {
scanNfc();
}
}, null, "", true)
} else {
tools.showToastAlert(res.msg);
}
return;
} else {
NFCAPI.connectDevice(function() {
if (res.code != 0) {
tools.showToastAlert(res.msg);
return;
}
//获取卡信息
transCmd(function() {
getCardId(res, function() {
if (routeType.value == "2") {
tools.toUrl(
`/pages/recharge/recharge?connectSuccess=1&&cardId=${state.cardId}&&fee=${state.fee}`
); //跳转到圈存界面
}
})
})
});
}
})
})
}

function getCardId(resultCmdArr: any, callback: any) {
var that = this;
if (resultCmdArr.length == 4) {
var str = resultCmdArr[2].substring(resultCmdArr[2].length - 4, resultCmdArr[2].length); //判断是否为9000
var str3 = resultCmdArr[3].substring(resultCmdArr[3].length - 4, resultCmdArr[3].length); //判断是否为9000
if (str == "9000" || str3 == "9000") {
if (resultCmdArr[2].length > 86 || resultCmdArr[3] >= 12) {
var card = {
cardNo: resultCmdArr[2].substring(20, 40),
startTime: resultCmdArr[2].substring(40, 48),
endTime: resultCmdArr[2].substring(48, 56),
version: resultCmdArr[2].substring(18, 19) >= 4 ? "4x" : "2x",
money: that.hex2int(resultCmdArr[3].substring(0, 8)),
v_userType: parseInt(resultCmdArr[2].substring(80, 82), 16)
};
console.log("写命令拿到卡号:" + JSON.stringify(card))
var jizhangka = card.cardNo.substring(8, 10);
if (jizhangka == '23') {
console.log('记账卡');
tools.alertFback("不支持记账卡圈存", function() {
//返回首页
uni.reLaunch({
url: 'pages/index/index'
})
})
return;
}
that.setData({
cardNo: card.cardNo,
cardMoney: card.money > 0 ? card.money : 0,
})
callback(card.cardNo);
} else {
tools.showToastAlert("CMD_READBINARY指令长度不符" + resultCmdArr[2]);
}
return;
}
} else {
tools.showToastAlert("回包长度不符");
}
}

function transCmd(callback: any) {
tools.showLoadingAlert('透传指令中');
var cmdArr = [cmd.HOME_DIRECTORY, cmd.APPLICATION_DIRECTORY, cmd.CMD_READBINARY, cmd.CMD_GETBALANCE];
NFCAPI.transCmd(cmdArr, function(res) {
tools.hideLoadingAlert();
console.log(res);
if (res.code == 0) {
callback(res.data);
} else {
tools.showToastAlert(res.msg);
}
});
}
</script>
<style lang='scss' scoped>

</style>

+ 72
- 54
pages/recharge/recharge.vue Переглянути файл

@@ -75,6 +75,7 @@
const bluetoothUtil = require("../../static/etcUtil/index.js");
const cmd = require("../../static/etcUtil/cmdConfig.js");
const tools = require("../../static/etcUtil/tools.js");
const NFCAPI = require('../../utils/nfc/NFCAPI.js');
const state = reactive({
isShowBlue: false,
@@ -103,6 +104,7 @@
fee: 5000,
money: 50,
orderNum: "",
transWay: "", //“blu”为蓝牙充值方式、“nfc”为NFC充值方式
cardId: "", //卡号 需要传参
mockpreBalance: 2000, //fix:模拟余额 目前没有检测状态接口,第一次会模拟圈层检测来检测状态
show: false,
@@ -121,7 +123,7 @@
//读卡信息
const card: any = reactive({
const card : any = reactive({
cardId: "",
netId: "",
cardType: "",
@@ -138,15 +140,16 @@
money: undefined,
v_userType: "",
});
const getParams = (val) => {
console.log("val蓝牙完毕传过来的参数", val)
state.cardId = val.cardId;
state.connectSuccess = val.connectSuccess;
}
// const getParams = (val: any) => {
// console.log("val蓝牙完毕传过来的参数", val)
// state.cardId = val.cardId;
// state.connectSuccess = val.connectSuccess;
// }
onLoad((option) => {
/*获取openId 用途:(用户支付)*/
getOpenID();
/*传参*/
state.transWay = option.transWay; //“blu”为蓝牙充值方式、“nfc”为NFC充值方式
state.cardId = option.cardId;
state.connectSuccess = option.connectSuccess;
state.orderNum = getItem("orderNum");
@@ -269,46 +272,51 @@
//钱包
];
tools.showLoadingAlert("正在执行指令");
bluetoothUtil.transCmd(cmdArr, "10", function (res) {
tools.hideLoadingAlert();
//10:写卡 20:写OBU
let str = res[2].substring(res[2].length - 4, res[2].length);
let str3 = res[3].substring(res[3].length - 4, res[3].length);
if (str == "9000" || str3 == "9000") {
if (res[2].length > 86 || res[3] >= 12) {
card.cardId = res[2].substring(20, 40); //卡号
card.startTime = res[2].substring(40, 48);
card.endTime = res[2].substring(48, 56);
card.version = res[2].substring(18, 19) >= 4 ? "4x" : "2x";
card.netId = res[2].substring(20, 24);
card.cardType = res[2].substring(28, 29) == 23 ? 1 : 2;
card.vehiclePlateColor = parseInt(res[2].substring(82, 84), 16);
(card.money = parseInt(parseInt(res[3].substring(0, 8), 16), 10)),
console.log("======卡信息======", card);
if (card.cardId !== state.cardId) {
msg("设备卡信息与当前充值卡号不匹配,请核对卡号");
return;
}
quanCheckActionTrue().then((val) => {
checkQuanCengEvent(val);
});
} else {
console.error("CMD_READBINARY指令长度不符" + res[2]);
tools.hideLoadingAlert();
transCmd(cmdArr, function (res : any) {
getCardIdReturn(res);
})
};
function getCardIdReturn(res : any) {
tools.hideLoadingAlert();
//10:写卡 20:写OBU
let str = res[2].substring(res[2].length - 4, res[2].length);
let str3 = res[3].substring(res[3].length - 4, res[3].length);
if (str == "9000" || str3 == "9000") {
if (res[2].length > 86 || res[3] >= 12) {
card.cardId = res[2].substring(20, 40); //卡号
card.startTime = res[2].substring(40, 48);
card.endTime = res[2].substring(48, 56);
card.version = res[2].substring(18, 19) >= 4 ? "4x" : "2x";
card.netId = res[2].substring(20, 24);
card.cardType = res[2].substring(28, 29) == 23 ? 1 : 2;
card.vehiclePlateColor = parseInt(res[2].substring(82, 84), 16);
(card.money = parseInt(parseInt(res[3].substring(0, 8), 16), 10)),
console.log("======卡信息======", card);
if (card.cardId !== state.cardId) {
msg("设备卡信息与当前充值卡号不匹配,请核对卡号");
return;
}
quanCheckActionTrue().then((val) => {
checkQuanCengEvent(val);
});
} else {
console.error("CMD_READBINARY指令长度不符" + res[2]);
tools.hideLoadingAlert();
}
console.error("CMD_READBINARY指令长度不符" + res[2]);
tools.hideLoadingAlert();
});
};
}
console.error("CMD_READBINARY指令长度不符" + res[2]);
tools.hideLoadingAlert();
}
const checkQuanCengEvent = (val : any) => {
if (val.chargeStatus === 1) {
let cmdArr = val.command.split(",");
uni.showLoading({
title: "写入中",
});
bluetoothUtil.transCmd(cmdArr, "10", function (res) {
transCmd(cmdArr, function (res : any) {
let response = res.toString();
var dic = {
command: val.command,
@@ -316,7 +324,7 @@
};
uni.hideLoading();
cardCzXFCheckAction().then((xfRes) => {
quanApplyAction(dic).then((value: any) => {
quanApplyAction(dic).then((value : any) => {
console.log("圈层申请完后的结果");
console.log(value.commandType, value);
//圈存初始化验证通过 , 进行圈存
@@ -337,7 +345,7 @@
uni.showLoading({
title: "写入中",
});
bluetoothUtil.transCmd(cmdArr, "10", function (res) {
transCmd(cmdArr, function (res : any) {
var status = res[1].substring(res[1].length - 4, res[1].length);
console.log("打印状态");
console.log(status);
@@ -346,10 +354,10 @@
let response = res.toString();
var dic = {
command: val.command,
cosResponse: response,
cosResponse: response,
rechargeId: val.rechargeId,
};
quanFixAction(dic).then((value: any) => {
quanFixAction(dic).then((value : any) => {
console.log(value);
console.log("修复结果返回");
var fixStatus = value.fixStatus;
@@ -398,13 +406,23 @@
};
/*透传*/
const transCmd = (cmd) => {
bluetoothUtil.transCmd(cmd, "10", function (res) {
var status = res[1].substring(res[1].length - 4, res[1].length);
if (status === "9000") {
return res.toString();
}
});
const transCmd = (cmd : any, click : any) => {
if (state.transWay == 'blu') {
bluetoothUtil.transCmd(cmd, "10", function (res : any) {
click(res);
});
} else {
//nfc透传
NFCAPI.transCmd(cmd, function (res : any) {
tools.hideLoadingAlert();
if (res.code == 0) {
click(res.data);
} else {
//透传失败返回
tools.alertF(res.msg);
}
});
}
};
/*圈层检测 -假数据校验*/
@@ -523,11 +541,11 @@
});
};
/*圈层确认*/
const uanConfirmAction = (data: any) => {
const uanConfirmAction = (data : any) => {
console.log("圈层确认进入");
let cmdArr = data.command.split(",");
console.log(cmdArr);
bluetoothUtil.transCmd(cmdArr, "10", function (res: any) {
transCmd(cmdArr, function (res : any) {
console.log("圈层透传");
console.log(res);
var arraylenth = res.length;
@@ -558,7 +576,7 @@
msg("充值成功");
navTo(`/pages/recharge/result`)
}).catch((error) => {
console.log('输出内容',error)
console.log('输出内容', error)
});
}
});
@@ -703,12 +721,12 @@
};
request(cardCzPayResult, options).then((res) => {
const data = stringToJson(res.bizContent);
if (data.tradeState === "SUCCESS")
if (data.tradeState === "SUCCESS"){
uni.redirectTo({
url: `/pages/bluetooth/bluetooth?routeType=2&&cardId=${state.cardId}&&fee=${state.fee}`,
});
}
// state.isShowBlue=true;
console.log(data);
});
};

+ 1
- 0
static/etcUtil/index.js Переглянути файл

@@ -110,6 +110,7 @@ function disconnectDevice() {

/**
* 透传
* type 10 写卡 20 写OBU
*/
function transCmd(cmdArr, type, func, callBack = null) {
var connectPrefixName = datas.getData("connectPrefixName");

+ 3
- 2
utils/network/request.js Переглянути файл

@@ -59,7 +59,8 @@ export function request(code, options = {}, start = false) {
rbacSource: 'MINI_PROGRAM',
accessToken: getItem(StorageKeys.Token)
}
options.url = envs[process.env.NODE_ENV].baseUrl + '/api/interfaceMidGroundIn'
// options.url = envs[process.env.NODE_ENV].baseUrl + '/api/interfaceMidGroundIn'
options.url = envs[process.env.NODE_ENV].baseUrl + '/ifzt/api/interfaceMidGroundIn'
// options.url = envs[process.env.NODE_ENV].baseUrl + '/ifzt/api/interfaceMidGroundIn'
//默认json数据格式提交`
let contentType = 'application/x-www-form-urlencoded'
@@ -167,7 +168,7 @@ export function request(code, options = {}, start = false) {
}
}
options.fail = (err) => {
console.log('请求失败返回参数:', res)
// console.log('请求失败返回参数:', res)
uni.hideLoading()
console.log('请求错误', err)
// if (err == 'openId无效,请核实传参!') {

+ 67
- 0
utils/nfc/NFCAPI.js Переглянути файл

@@ -0,0 +1,67 @@
var NFCSDK = require('./NFCDeviceWechat.js');

/**
* 开始扫描
* @param {*} callBack
*/
export function startScanDevice(callBack) {
NFCSDK.startScanDevice(
(res) => {
callBack.call(this, res);
}
)
}

/**
* 停止扫描
* @param {回调} callBack
*/
export function stopScanDevice(callBack) {
NFCSDK.stopScanDevice(
(res) => {
callBack.call(this, res);
}
);
}
/**
* 连接卡片
* @param {回调} callBack
*/
export function connectDevice(callBack) {
NFCSDK.connectDevice(
(res) => {
callBack.call(this, res);
}
)
}
/**
* 断开连接
* @param {回调} callBack
*/
export function disconnectDevice(callBack) {
NFCSDK.disConnectDevice((res) => {
callBack.call(this, res);
})

}

/**
*
* @param {指令数组} cmdArr
* @param {回调} callback
*/
export function transCmd(cmdArr, callback) {
NFCSDK.ICCTransCmd(cmdArr, (res) => {
callback.call(this, res);
})
}

/**
* 移除扫描、断开链接及实例
* @param {回调} callBack
*/
export function remove(callback) {
NFCSDK.remove((res) => {
callback.call(this, res);
})
}

+ 76
- 0
utils/nfc/NFCConfig.js Переглянути файл

@@ -0,0 +1,76 @@
export function ICCResetCmd() {
return "A801"
};
export function ICCChannelCmd() {
return "A3"
};
export function ESAMResetCmd() {
return "A803"
};
export function ESAMChannelCmd() {
return "A7"
};
export function ResetFlag() {
return "JLReset"
};
export function ChannelFlag() {
return "JLChannel"
};
export function successCode() {
return 0
};
export function errorCode() {
return 1202
};
export function timeOutCode() {
return 1203
};
export function cardNoExists() {
return 1204
};
export function nfcSuccessCode() {
return 0
};
export function nfcErrorCode() {
return 1001
};
export function disConnectError() {
return 1101
};
export function cosErrorCode() {
return 1201
};
export function ondisConnect() {
return 1
};
export function DevResult(type, objc) {
var code = "";
var err_msg = "";
var data = null;
var msg = "";
if (objc.code == successCode()) {
err_msg = "执行成功";
if (type == 0) {
var data = objc.data;
var sw = data.substr(data.length - 4, 4);
code = successCode();
data = objc.data;
msg = "操作成功"
} else {
code = objc.code;
data = null;
msg = objc.msg
}
return {
code: code,
data: data,
msg: msg
}
} else {
return {
code: objc.code,
data: null,
msg: objc.msg
}
}
};

+ 102
- 0
utils/nfc/NFCDeviceWechat.js Переглянути файл

@@ -0,0 +1,102 @@
var config = require("./NFCConfig");
var nfcTool = require("./NFCManagerTool");
var scanTimeId;//定时扫描
var connectTimeId;//定时链接卡片
var transTimeId;//定时发送数据
var timeOut = 10000;
var isConnect = false;

export function startScanDevice(callBack) {
scanTimeId = setTimeout(res => {
nfcTool.stopScanNfcDevice(res => {
callBack.call(this, {
code: config.timeOutCode(),
msg: "扫描超时",
data: null
})
})
}, timeOut);
nfcTool.startScanNfcDevice(res => {
clearTimeout(scanTimeId);
console.log("返回上层数据:" + JSON.stringify(res));
callBack.call(this, res)
})
};
export function stopScanDevice(callBack) {
nfcTool.stopScanNfcDevice(res => {
callBack.call(this, res)
})
};
export function connectDevice(callBack) {
if (isConnect) {
callBack.call(this, {
code: 10004,
msg: "卡片已被连接",
data: null
});
return
}
nfcTool.connectDevice(res => {
if (res.code == 0) {
isConnect = true;
callBack.call(this, {
code: config.successCode(),
msg: "连接成功",
data: null
})
} else {
disConnectDevice(res => {});
console.log("返回上层数据:" + JSON.stringify(res));
callBack.call(this, {
code: config.nfcErrorCode(),
msg: "连接失败",
data: null
})
}
})
};
export function disConnectDevice(callBack) {
nfcTool.disConnectDevice(res => {
clearTimeout(scanTimeId);
clearTimeout(connectTimeId);
clearTimeout(transTimeId);
isConnect = false;
callBack.call(this, res)
})
};
export function ICCTransCmd(cmdArr, callBack) {
console.info("发送数据=============>>::" + cmdArr);
if (!isConnect) {
callBack.call(this, {
code: config.errorCode(),
msg: "未连接NFC标签",
data: null
});
return
}
transTimeId = setTimeout(res => {
callBack.call(this, {
code: config.timeOutCode(),
msg: "ICC透传超时",
data: null
})
}, timeOut);
nfcTool.sendMessageToDevice(cmdArr, res => {
clearTimeout(transTimeId);
console.log("返回上层数据:" + JSON.stringify(res));
callBack.call(this, res)
})
};

export function remove(callBack) {
stopScanDevice(res => {
disConnectDevice(res => {
nfcTool.removeObj();
callBack.call(this, {
code: config.successCode(),
msg: "断开NFC成功",
data: null
});
})
})
}

+ 321
- 0
utils/nfc/NFCManagerTool.js Переглянути файл

@@ -0,0 +1,321 @@
var config = require("./NFCConfig");
var successCode = config.nfcSuccessCode();
var errorCode = config.nfcErrorCode();
var nfcAdapter = null;
var isoDep = null;
var isFirst = false;

export function startScanNfcDevice(callBack) {
isFirst = false;
initNfcAdapter(function (res) {
if (res.code == successCode) {
console.log('初始化NFC适配器实例成功', res)
//注册贴卡监听回调
nfcAdapter.onDiscovered(function (res) {
console.log('监听回调到卡片了', res);
if(!isFirst) {
if (res.techs.includes(nfcAdapter.tech.isoDep)) { //获取isoDep实例
console.log('发现' + nfcAdapter.tech.isoDep + '卡');
isoDep = nfcAdapter.getIsoDep();
isFirst = true;
callBack.call(this, {
code: successCode,
msg: "搜索卡片成功",
data: isoDep
})
}
}
});
//开始监听贴卡
nfcAdapter.startDiscovery({
success: function (res) {
console.log('监听贴卡成功', res)
},
fail: function (err) {
console.log('监听贴卡失败', err)
var msg = "";
if (err) {
msg = nfcErrMsg(err.errCode)
}
callBack.call(this, {
code: errorCode,
msg: msg,
data: null
})
},
})
} else {
//初始化NFC实例失败
callBack.call(this, res)
}
})
};

export function onDiscovered(callBack) {
//注册贴卡监听回调
nfcAdapter.onDiscovered(discoverHandler);
}
export function offDiscovered(callBack) {
//注册贴卡监听回调
nfcAdapter.offDiscovered(discoverHandler);
}
function discoverHandler(res, callBack) {
if (res.techs.includes(nfcAdapter.tech.isoDep)) { //获取isoDep实例
console.log('发现' + nfcAdapter.tech.isoDep + '卡');
isoDep = nfcAdapter.getIsoDep();
callBack.call(this, {
code: successCode,
msg: "搜索卡片成功",
data: isoDep
})
}
}
export function startDiscovery(callBack) {
//开始监听贴卡
nfcAdapter.startDiscovery({
success: function (res) {
console.log('监听贴卡成功', res)
},
fail: function (err) {
console.log('监听贴卡失败', err)
var msg = "";
if (err) {
msg = nfcErrMsg(err.errCode)
}
callBack.call(this, {
code: errorCode,
msg: msg,
data: null
})
}
})
}

export function stopScanNfcDevice(callBack) {
if (nfcAdapter != null) {
nfcAdapter.stopDiscovery({
success: function (res) {
callBack.call(this, {
code: successCode,
msg: "停止扫描成功",
data: null
})
},
fail: function (err) {
var msg = "";
if (err) {
msg = nfcErrMsg(err.errCode)
}
callBack.call(this, {
code: errorCode,
msg: msg,
data: null
})
}
})
} else {
callBack.call(this, {
code: successCode,
msg: "暂无NFC适配器实例",
data: null
})
}
};
export function connectDevice(callBack) {
if (isoDep != null) {
isoDep.connect({
success: function (res) {
console.log('连接卡片成功', res)
callBack.call(this, {
code: successCode,
msg: "连接卡片成功",
data: null
})
},
fail: function (err) {
var msg = "";
if (err) {
msg = nfcErrMsg(err.errCode)
}
console.log("链接卡片失败:",err.errCode)
callBack.call(this, {
code: errorCode,
msg: msg,
data: null
})
}
})
} else {
callBack.call(this, {
code: errorCode,
msg: "连接卡片不存在",
data: null
})
}
};
export function disConnectDevice(callBack) {
if (isoDep != null) {
isoDep.close({
success: function (res) {
callBack.call(this, {
code: successCode,
msg: "断开卡片成功",
data: null
})
},
fail: function (err) {
var msg = "";
if (err) {
msg = nfcErrMsg(err.errCode)
}
callBack.call(this, {
code: errorCode,
msg: msg,
data: null
})
}
})
} else {
callBack.call(this, {
code: successCode,
msg: "暂无连接卡片",
data: null
})
}
};
export function sendMessageToDevice(cmdArr, callBack) {
if (cmdArr.length <= 0) {
callBack.call(this, {
code: errorCode,
msg: "发送数据不能为空",
data: null
})
return
}
var resultCmdArr = [];
for (var i = 0; i < cmdArr.length; i++) {
var sendbuf = hexStringToArrayBuffer(cmdArr[i]);
isoDep.transceive({
data: sendbuf,
success: function (res) {
var resultCmd = arrayBufferToHexString(res.data);
resultCmdArr.push(resultCmd);
if (resultCmdArr.length == cmdArr.length) {
callBack.call(this, {
code: successCode,
msg: "发送数据成功",
data: resultCmdArr
})
}
},
fail: function (err) {
if (i == 0) {
console.log('发送数据失败', err);
var msg = "";
if (err) {
msg = nfcErrMsg(err.errCode)
}
callBack.call(this, {
code: errorCode,
msg: msg,
data: null
})
return
}
}
});
}
};
export function removeObj() {
isoDep = null;
nfcAdapter = null;
}


function initNfcAdapter(callBack) {
nfcAdapter = uni.getNFCAdapter() //获取NFC适配器实例
console.log("获取NFC适配器实例:", nfcAdapter);
if (nfcAdapter != null) {
callBack.call(this, {
code: successCode,
msg: "初始化NFC适配器实例成功",
data: null
})
} else {
callBack.call(this, {
code: errorCode,
msg: "初始化NFC适配器实例失败",
data: null
})
}
};

//十六进制字符串转字节数组
function hexStringToArrayBuffer(str) {
var hex = str;
return new Uint8Array(hex.match(/[\da-f]{2}/gi).map(function (h) {
return parseInt(h, 16)
})).buffer;
};

//字节数组转十六进制字符串
function arrayBufferToHexString(buffer) {
return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' +
x.toString(16)).slice(-2)).join('');
};

function nfcErrMsg(errCode) {
switch (errCode) {
case 0:
return "正常";
break;
case 13000:
return "设备不支持NFC";
break;
case 13001:
return "系统NFC开关未打开";
break;
case 13010:
return "未知错误";
break;
case 13019:
return "用户未授权";
break;
case 13011:
return "参数无效";
break;
case 13012:
return "将参数解析为NdefMessage失败";
break;
case 13021:
return "已经开始NFC扫描";
break;
case 13018:
return "尝试在未开始NFC扫描时停止NFC扫描";
break;
case 13022:
return "标签已经连接";
break;
case 13023:
return "尝试在未连接标签时断开连接";
break;
case 13013:
return "未扫描到NFC标签";
break;
case 13014:
return "无效的标签技术";
break;
case 13015:
return "从标签上获取对应技术失败";
break;
case 13024:
return "当前标签技术不支持该功能";
break
case 13017:
return "相关读写操作失败";
break
default:
return "连接失败";
break
}
}

Завантаження…
Відмінити
Зберегти