lbyPos_jh.js 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. const fs = require('fs')
  2. process.on('message', async (message, setHandle) => {
  3. const path = message.split('=')[0]
  4. const m = message.split('=')[1]
  5. const posConfig = await getPosConfigData(path)
  6. const ffi = require('ffi')
  7. let posPath = require('path').join(posConfig.softposPath, 'sldll.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. const mispos = ffi.Library(posPath, {
  23. CardTrans: ['int', ['char*', 'char*']]
  24. })
  25. try {
  26. // 有时候无法调起成功,可能是因为位数不够
  27. const output = Buffer.alloc(1024)
  28. const input = Buffer.alloc(1024)
  29. input.write(getPayParams(JSON.parse(m)))
  30. mispos.CardTrans(input, output)
  31. process.send(output)
  32. process.exit(0)
  33. } catch (e) {
  34. process.send(e.toString())
  35. process.exit(0)
  36. }
  37. })
  38. function exit () {
  39. process.send(0)
  40. process.exit(0)
  41. }
  42. function getPosConfigData (path) {
  43. return new Promise((resolve, reject) => {
  44. const configFile = path
  45. const fs = require('fs')
  46. fs.open(configFile, 'r', (err, data) => {
  47. if (err) {
  48. console.log(err)
  49. resolve()
  50. return
  51. }
  52. resolve(JSON.parse(fs.readFileSync(configFile)))
  53. })
  54. })
  55. }
  56. function getPayParams (params) {
  57. let { transId, amt, posTradeNo = '', cashierDevNo = '', cashierNo = '', traceNo = '', authNo = '', orgTradeDate = '', cardType, tradeIndex, secondTrack = '', thirdTrack = '', orgTradeCode = '', orgTerminalNo = '', orgAuthNo = '', accountNo = '', mallNo = '', billNo = '', orderNo = '', orgRefNo = '', orgTradeTime = '', orgTradeAmt = '' } = params
  58. amt = (parseInt(params.amt * 100) + '').padStart(12, '0')
  59. posTradeNo = posTradeNo.padEnd(6, ' ')
  60. cashierDevNo = cashierDevNo.padEnd(10, ' ')
  61. cashierNo = cashierNo.padEnd(10, ' ')
  62. traceNo = traceNo.padStart(15, ' ')
  63. authNo = authNo.padStart(6, ' ')
  64. orgTradeDate = orgTradeDate.padStart(8, ' ')
  65. tradeIndex = tradeIndex.padStart(76, ' ')
  66. secondTrack = secondTrack.padStart(37, ' ')
  67. thirdTrack = thirdTrack.padStart(104, ' ')
  68. orgTradeCode = orgTradeCode.padStart(2, ' ')
  69. orgTerminalNo = orgTerminalNo.padStart(15, ' ')
  70. orgAuthNo = orgAuthNo.padStart(6, ' ')
  71. accountNo = accountNo.padStart(3, ' ')
  72. mallNo = mallNo.padEnd(20, ' ')
  73. billNo = billNo.padEnd(30, ' ')
  74. orderNo = orderNo.padStart(15, ' ')
  75. orgRefNo = orgRefNo.padStart(6, ' ')
  76. orgTradeTime = orgTradeTime.padStart(6, ' ')
  77. orgTradeAmt = orgTradeAmt.padStart(12, ' ')
  78. return transId + amt + posTradeNo + cashierDevNo + cashierNo + traceNo + authNo + orgTradeDate + cardType + tradeIndex + secondTrack + thirdTrack + orgTradeCode + orgTerminalNo + orgAuthNo + accountNo + mallNo + billNo + orderNo + orgRefNo + orgTradeTime + orgTradeAmt
  79. }