bankcard-reader
Version:
106 lines (92 loc) • 2.58 kB
JavaScript
/**
* bankcard-reader
* 高拍仪读取银行卡
*
* @version 1.0.1
* @author waiting
* @license MIT
* @link https://github.com/waitingsong/node-bankcard-reader#readme
*/
;
Object.defineProperty(exports, '__esModule', { value: true });
var win32Def = require('win32-def');
var bankcardReaderBase = require('@waiting/bankcard-reader-base');
var log = require('@waiting/log');
var sharedCore = require('@waiting/shared-core');
var ffi = require('ffi');
const dllFuncs = {
JC_GetBankNumber: [win32Def.DTypes.INT, [win32Def.DTypes.POINT]],
FJ_GetBankNumber: [win32Def.DTypes.INT, [win32Def.DTypes.POINT]],
};
function findDeviceList(deviceOpts, apib) {
const arr = [];
// 不用打开端口,驱动自动查找
const device = {
apib,
deviceOpts,
inUse: false,
openPort: 0,
};
arr.push(device);
return arr
}
function readFJ(device) {
const buf = Buffer.alloc(64);
device.apib.FJ_GetBankNumber(buf);
return parseBuffer(buf)
}
function readJC(device) {
const buf = Buffer.alloc(64);
device.apib.JC_GetBankNumber(buf);
return parseBuffer(buf)
}
function parseBuffer(buf) {
return buf.toString('utf8').trim().replace(/\0+$/g, '')
}
async function init(options) {
const deviceOpts = bankcardReaderBase.parseDeviceOpts(options);
const { debug } = deviceOpts;
if (debug) {
log.info(deviceOpts);
}
await sharedCore.validateDllFile(deviceOpts.dllTxt);
if (deviceOpts.dllSearchPath) {
sharedCore.setPathDirectory(deviceOpts.dllSearchPath);
}
const apib = ffi.Library(deviceOpts.dllTxt, dllFuncs);
const devices = findDeviceList(deviceOpts, apib);
if (devices && devices.length) {
return devices
}
else {
throw new Error('未找到读卡设备')
}
}
/** Read card data */
function read(device) {
const ret = {
cardno: '',
};
try {
switch (device.deviceOpts.cardType) {
case 'fj':
ret.cardno = readFJ(device);
break
case 'jc':
ret.cardno = readJC(device);
break
case 'auto':
ret.cardno = readFJ(device) || readJC(device) || '';
break
default:
throw new Error('cardType invalid, Should be auto|fj|jc ')
}
}
catch (_a) {
ret.cardno = '';
}
return Promise.resolve(ret)
}
exports.initialOpts = bankcardReaderBase.initialOpts;
exports.init = init;
exports.read = read;