tjzyPos.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. const fs = require('fs')
  2. process.on('message', async (message, setHandle) => {
  3. try {
  4. let path = message.split('=')[0]
  5. let m = message.split('=')[1]
  6. let posConfig = await getPosConfigData(path)
  7. const ffi = require('ffi')
  8. let posPath = require('path').join(posConfig.softposPath, 'BlueComClient.dll')
  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. let mispos = ffi.Library(posPath, {
  22. 'APOSBankTrans': ['int', ['char*', 'char*']]
  23. })
  24. let output = Buffer.alloc(1024)
  25. mispos.APOSBankTrans(Buffer.from(m, 'hex'), output)
  26. // 输出结果
  27. process.send(output)
  28. process.kill(process.pid)
  29. process.exit(0)
  30. } catch (e) {
  31. exit(e)
  32. }
  33. })
  34. function exit (info) {
  35. process.send(info)
  36. process.kill(process.pid)
  37. process.exit(0)
  38. }
  39. function getPosConfigData (path) {
  40. return new Promise((resolve, reject) => {
  41. let configFile = path
  42. console.log(configFile)
  43. let fs = require('fs')
  44. fs.open(configFile, 'r', (err, data) => {
  45. if (err) {
  46. console.log(err)
  47. resolve()
  48. return
  49. }
  50. resolve(JSON.parse(fs.readFileSync(configFile)))
  51. })
  52. })
  53. }