UNPKG

bankcard-reader

Version:
106 lines (92 loc) 2.58 kB
/** * bankcard-reader * 高拍仪读取银行卡 * * @version 1.0.1 * @author waiting * @license MIT * @link https://github.com/waitingsong/node-bankcard-reader#readme */ 'use strict'; 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;