mis.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. // 模拟交易成功
  7. if (posConfig && posConfig.mock && JSON.parse(m).transcode === '00') {
  8. let output = JSON.stringify({
  9. resp_code: '00',
  10. resp_chin: '支付成功',
  11. bank_code: 'aaaaa',
  12. cardno: 'bbbbbb',
  13. expr: 'ccccccc',
  14. trace: 'ddddddd',
  15. amount: '0000000000001',
  16. authcode: 'xxxxx',
  17. ordernum: 'eeeeee',
  18. zffs: '01',
  19. shopno: 'ffffff',
  20. terminal: 'ggggg'
  21. })
  22. process.send(output)
  23. process.exit(0)
  24. }
  25. const ffi = require('ffi')
  26. let posPath = require('path').join(posConfig.softposPath, 'MISPOS.dll')
  27. const isExist = fs.existsSync(posPath)
  28. if (!isExist) {
  29. // 未找到支付程序
  30. exit()
  31. }
  32. if (process.env.NODE_ENV !== 'development') {
  33. posPath = posPath.replace('app.asar', 'app.asar.unpacked')
  34. }
  35. const kernel32 = ffi.Library('kernel32', {
  36. 'SetDllDirectoryA': ['bool', ['string']]
  37. })
  38. kernel32.SetDllDirectoryA(posConfig.softposPath)
  39. let mispos = ffi.Library(posPath, {
  40. 'BankTrans': ['int', ['char*', 'char*']]
  41. })
  42. try {
  43. let output = Buffer.alloc(500)
  44. let input = Buffer.alloc(500)
  45. input.write(m)
  46. mispos.BankTrans(input, output)
  47. // 输出结果
  48. process.send(output)
  49. process.exit(0)
  50. } catch (e) {
  51. process.send(e.toString())
  52. process.exit(0)
  53. }
  54. })
  55. function exit () {
  56. process.send(0)
  57. process.exit(0)
  58. }
  59. function getPosConfigData (path) {
  60. return new Promise((resolve, reject) => {
  61. let configFile = path
  62. console.log(configFile)
  63. let fs = require('fs')
  64. fs.open(configFile, 'r', (err, data) => {
  65. if (err) {
  66. console.log(err)
  67. resolve()
  68. return
  69. }
  70. resolve(JSON.parse(fs.readFileSync(configFile)))
  71. })
  72. })
  73. }