fxsPos.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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, 'PortComm.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. 'POSP_Chang': ['int', ['char*', 'char*', 'char*']]
  23. })
  24. let output = Buffer.alloc(1024)
  25. let input = Buffer.alloc(1024)
  26. let pszCommData = Buffer.alloc(0)
  27. input.write(getPayParams(JSON.parse(m)))
  28. // input.write(getPayParams(refundParams))
  29. // 执行操作
  30. mispos.POSP_Chang(pszCommData, input, output)
  31. // 输出结果
  32. process.send(output)
  33. process.exit(0)
  34. } catch (e) {
  35. process.send(e.toString())
  36. process.exit(0)
  37. }
  38. })
  39. function exit (info) {
  40. process.send(info)
  41. process.exit(0)
  42. }
  43. function getPosConfigData (path) {
  44. return new Promise((resolve, reject) => {
  45. let configFile = path
  46. console.log(configFile)
  47. let fs = require('fs')
  48. fs.open(configFile, 'r', (err, data) => {
  49. if (err) {
  50. console.log(err)
  51. resolve()
  52. return
  53. }
  54. resolve(JSON.parse(fs.readFileSync(configFile)))
  55. })
  56. })
  57. }
  58. function getPayParams (params) {
  59. let { transCode, amt, tradeId, traceNo, refNo, tradeDate, orderNo, addition } = params
  60. amt = (parseInt(params.amt * 100) + '').padStart(12, '0')
  61. traceNo = traceNo.padEnd(6, ' ') // 参考号
  62. refNo = refNo.padEnd(30, ' ') // 凭证号
  63. orderNo = orderNo.padEnd(30, ' ')
  64. addition = addition.padEnd(255, ' ')
  65. return transCode + amt + tradeId + traceNo + refNo + tradeDate + orderNo + addition
  66. }