| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- 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)
- // 模拟交易成功
- if (posConfig && posConfig.mock && JSON.parse(m).tradeType === 'C') {
- process.send('00621485******8058 C000000000001000491907921687738091 130804630025191046300569111160804145549D_U 0000000000010000000000000804145549000491921687738091 130804 001')
- process.exit(0)
- }
- // 模拟退货成功
- if (posConfig && posConfig.mock && JSON.parse(m).tradeType === 'R') {
- process.send('00621485******8058 C000000000001000491308921687738091 130804630025191046300569111160804145549D_U 0000000000010000000000000804145549000491921687738091 130804 001')
- process.exit(0)
- }
- // console.log('子进程接收到消息' + m, __dirname)
- const ffi = require('ffi')
- let posPath = require('path').join(posConfig.softposPath, 'softpos.dll')
- 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)
- console.log('软件路径', posPath)
- let softpos = ffi.Library(posPath, {
- 'CreditTransABC': ['int', ['char*', 'char*']]
- })
- try {
- let output = Buffer.alloc(287)
- let input = Buffer.alloc(287)
- input.write(getPayParams(JSON.parse(m)))
- softpos.CreditTransABC(input, output)
- // 输出结果
- process.send(output.toString('utf-8'))
- process.kill(process.pid)
- process.exit(0)
- } catch (e) {
- console.log('错误', e)
- }
- // sendHandle是一个 net.Socket 或 net.Server 对象
- })
- process.on('uncaughtException', function (err) {
- console.log('捕获到一个未被处理的错误:', err)
- })
- function exit () {
- process.send(0)
- process.kill(process.pid)
- process.exit(0)
- }
- function getPayParams (params) {
- let { termId, salerId, tradeType, total, payType, codeInfo, originalInfo } = params
- termId = termId.padEnd(10)
- salerId = salerId.padEnd(10)
- total = total.padStart(12, '0')
- codeInfo = codeInfo.padEnd(32)
- originalInfo = originalInfo.padEnd(96)
- console.log({
- termId, salerId, tradeType, total, payType, codeInfo, originalInfo
- })
- return termId + salerId + tradeType + total + payType + codeInfo + originalInfo
- }
- 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)))
- })
- })
- }
|