| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- const fs = require('fs')
- process.on('message', async (message, setHandle) => {
- let path = message.split('=')[0]
- let m = message.split('=')[1]
- let posConfig = await getPosConfigData(path)
- const ffi = require('ffi')
- let posPath = require('path').join(posConfig.softposPath, 'posinf.dll')
- console.log(posPath)
- const isExist = fs.existsSync(posPath)
- if (!isExist) {
- // 未找到支付程序
- exit()
- }
- if (process.env.NODE_ENV !== 'development') {
- posPath = posPath.replace('app.asar', 'app.asar.unpacked')
- }
- const kernel32 = ffi.Library('kernel32', {
- 'SetDllDirectoryA': ['bool', ['string']]
- })
- kernel32.SetDllDirectoryA(posConfig.softposPath)
- process.env.PATH = `${process.env.PATH}${path.delimiter}${posConfig.softposPath}`
- let mispos = ffi.Library(posPath, {
- 'bankall': ['int', ['char*', 'char*']]
- })
- try {
- // 有时候无法调起成功,可能是因为位数不够
- let output = Buffer.alloc(1024)
- let input = Buffer.alloc(1024)
- input.write(getPayParams(JSON.parse(m)))
- mispos.bankall(input, output)
- process.send(output)
- process.exit(0)
- } catch (e) {
- process.send(e.toString())
- process.exit(0)
- }
- })
- function exit () {
- process.send(0)
- process.exit(0)
- }
- function getPosConfigData (path) {
- return new Promise((resolve, reject) => {
- let configFile = path
- console.log(configFile)
- let fs = require('fs')
- fs.open(configFile, 'r', (err, data) => {
- if (err) {
- console.log(err)
- resolve()
- return
- }
- resolve(JSON.parse(fs.readFileSync(configFile)))
- })
- })
- }
- function getPayParams (params) {
- let { transId, amt, old_date, old_reference, old_trace, lrc, postCode, unionMerchant = '', erpMerchant = '', qrcodeId = '' } = params
- amt = (parseInt(params.amt * 100) + '').padStart(12, '0')
- old_date = old_date.padStart(8, ' ')
- old_reference = old_reference.padStart(12, ' ') // 凭证号
- old_trace = old_trace.padStart(6, ' ') // 参考号
- lrc = (new Date().getTime() + '').slice(-3) // 3位随机数
- postCode = postCode.padEnd(50, ' ')
- unionMerchant = unionMerchant.padEnd(50, ' ')
- erpMerchant = erpMerchant.padEnd(50, ' ')
- qrcodeId = qrcodeId.padEnd(32, ' ')
- return transId + amt + old_date + old_reference + old_trace + lrc + postCode + unionMerchant + erpMerchant + qrcodeId
- }
|