dflzPos.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. const fs = require('fs')
  2. process.on('message', async (message, setHandle) => {
  3. let path = message.split('=')[0]
  4. let m = message.split('=')[1]
  5. let posConfig = await getPosConfigData(path)
  6. const ffi = require('ffi')
  7. let posPath = require('path').join(posConfig.softposPath, 'posinf.dll')
  8. console.log(posPath)
  9. const isExist = fs.existsSync(posPath)
  10. if (!isExist) {
  11. // 未找到支付程序
  12. exit()
  13. }
  14. if (process.env.NODE_ENV !== 'development') {
  15. posPath = posPath.replace('app.asar', 'app.asar.unpacked')
  16. }
  17. // const kernel32 = ffi.Library('kernel32', {
  18. // 'SetDllDirectoryA': ['bool', ['string']]
  19. // })
  20. // kernel32.SetDllDirectoryA(posConfig.softposPath)
  21. // process.env.PATH = `${process.env.PATH}${path.delimiter}${posConfig.softposPath}`
  22. let mispos = ffi.Library(posPath, {
  23. 'bankall': ['int', ['char*', 'char*']]
  24. })
  25. try {
  26. // 有时候无法调起成功,可能是因为位数不够
  27. let output = Buffer.alloc(1024)
  28. let input = Buffer.alloc(1024)
  29. input.write(getPayParams(JSON.parse(m)))
  30. mispos.bankall(input, output)
  31. process.send(output)
  32. process.kill(process.pid)
  33. process.exit(0)
  34. } catch (e) {
  35. process.send(e.toString())
  36. process.kill(process.pid)
  37. process.exit(0)
  38. }
  39. })
  40. function exit () {
  41. process.send(0)
  42. process.kill(process.pid)
  43. process.exit(0)
  44. }
  45. function getPosConfigData (path) {
  46. return new Promise((resolve, reject) => {
  47. let configFile = path
  48. console.log(configFile)
  49. let fs = require('fs')
  50. fs.open(configFile, 'r', (err, data) => {
  51. if (err) {
  52. console.log(err)
  53. resolve()
  54. return
  55. }
  56. resolve(JSON.parse(fs.readFileSync(configFile)))
  57. })
  58. })
  59. }
  60. function getPayParams (params) {
  61. let { transId, amt, tradeDate, refNo, traceNo, LRC, memo, bankOderNo, ERP, qrcodeId, mchtBill, remarks } = params
  62. amt = (parseInt(params.amt * 100) + '').padStart(12, '0')
  63. tradeDate = tradeDate.padStart(8, ' ')
  64. traceNo = traceNo.padStart(12, ' ') // 参考号
  65. refNo = refNo.padStart(6, ' ') // 凭证号
  66. LRC = (new Date().getTime() + '').slice(-3) // 3位随机数
  67. memo = memo.padEnd(50, ' ')
  68. bankOderNo = bankOderNo.padEnd(50, ' ')
  69. ERP = ERP.padEnd(50, ' ')
  70. qrcodeId = qrcodeId.padEnd(32, ' ')
  71. mchtBill = mchtBill.padEnd(20, ' ')
  72. remarks = remarks.padEnd(40, ' ')
  73. return transId + amt + tradeDate + traceNo + refNo + LRC + memo + bankOderNo + ERP + qrcodeId + mchtBill + remarks
  74. }