Guest User

Untitled

a guest
Mar 22nd, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.98 KB | None | 0 0
  1. var mysql = require('mysql');
  2. var socket = require('net').Socket();
  3. var fs = require('fs');
  4.  
  5.  
  6. function removethrees(originaldata) {
  7. var t = new Buffer(originaldata, 'hex');
  8. return t.toString();
  9. }
  10.  
  11. function cloneDictionary(mainobj) {
  12. var obj2 = {}
  13. for (var key in mainobj) {
  14. obj2[key] = mainobj[key];
  15. }
  16. return obj2;
  17. }
  18.  
  19. function saveLogs(logdata) {
  20. var filename = new Date().toISOString().substr(0, 10);
  21. var timestamp = String(new Date().getTime());
  22. var logdata = logdata + "\n" + timestamp + "\n";
  23. fs.appendFile("PROD_LOG_" + filename + '.txt', logdata, function (err) {
  24. if (err) throw err;
  25. });
  26. }
  27.  
  28.  
  29. /*------------Message Receiving------------*/
  30. // Unpack ISO packets. e.g. Convert ISO string to Array / Dictionary
  31. function createcleanobject(packedmessage) {
  32. var msg = []
  33. for (i = 0; i < packedmessage.length; i++) {
  34. if (packedmessage[i] && packedmessage[i] != '') {
  35. msg.push([packedmessage[i]['key'], packedmessage[i]['value']]);
  36. }
  37. }
  38. return msg;
  39. }
  40.  
  41. function createDictionary(packedmessage) {
  42. var msg = {}
  43. for (i = 0; i < packedmessage.length; i++) {
  44. if (packedmessage[i] && packedmessage[i] != '') {
  45. msg[packedmessage[i]['key']] = packedmessage[i]['value'];
  46. }
  47. }
  48. return msg;
  49. }
  50.  
  51. function nestedArrayToDictionary(narray) {
  52. var msg = {}
  53. for (i = 0; i < narray.length; i++) {
  54. msg[narray[i][0]] = narray[i][1];
  55. }
  56. return msg;
  57. }
  58.  
  59.  
  60.  
  61. function binary2bch(binary) {
  62. var b2h = {
  63. "0000": "0",
  64. "0001": "1",
  65. "0010": "2",
  66. "0011": "3",
  67. "0100": "4",
  68. "0101": "5",
  69. "0110": "6",
  70. "0111": "7",
  71. "1000": "8",
  72. "1001": "9",
  73. "1010": "a",
  74. "1011": "b",
  75. "1100": "c",
  76. "1101": "d",
  77. "1110": "e",
  78. "1111": "f"
  79. };
  80. var spl = binary.split('');
  81.  
  82. var hexa = "";
  83. var tmp = "";
  84. for (var i = 0; i < spl.length; i++) {
  85. tmp += String(spl[i]);
  86. if ((i + 1) % 4 == 0 && i != 0) {
  87. hexa += b2h[tmp];
  88. var tmp = "";
  89. }
  90. }
  91. return hexa;
  92. }
  93.  
  94. function fulllength(str, lenlen) {
  95. var ln = str.length;
  96. var padding = "";
  97. for (var i = 0; i < lenlen - String(ln).length; i++) {
  98. padding += "0";
  99. }
  100. return padding + String(ln);
  101. }
  102.  
  103. function fullzeros(str, lenlen) {
  104. var ln = str.length;
  105. var padding = "";
  106. for (var i = 0; i < lenlen - ln; i++) {
  107. padding += "0";
  108. }
  109. return padding + str;
  110. }
  111.  
  112. function packbits(md2, bch, bits) {
  113. var isomap = {
  114. 2: {
  115. minlen: 1,
  116. maxlen: 19,
  117. lendigit: 2,
  118. name: 'account number'
  119. },
  120. 3: {
  121. minlen: 6,
  122. maxlen: 6,
  123. name: 'Processing Code'
  124. },
  125. 4: {
  126. minlen: 12,
  127. maxlen: 12,
  128. name: 'Amount'
  129. },
  130. 7: {
  131. minlen: 10,
  132. maxlen: 10,
  133. name: 'Transmission Date'
  134. },
  135. 11: {
  136. minlen: 6,
  137. maxlen: 6,
  138. name: 'System Trace Number'
  139. },
  140. 12: {
  141. minlen: 6,
  142. maxlen: 6,
  143. name: 'Time Transaction'
  144. },
  145. 13: {
  146. minlen: 4,
  147. maxlen: 4,
  148. name: 'Date Transaction'
  149. },
  150. 15: {
  151. minlen: 4,
  152. maxlen: 4,
  153. name: 'Date Settlement'
  154. },
  155. 17: {
  156. minlen: 4,
  157. maxlen: 4,
  158. name: 'Date Capture'
  159. },
  160. 24: {
  161. minlen: 3,
  162. maxlen: 3,
  163. name: 'Request Type'
  164. },
  165. 25: {
  166. minlen: 2,
  167. maxlen: 2,
  168. name: 'POS Reversal'
  169. },
  170. 28: {
  171. minlen: 9,
  172. maxlen: 9,
  173. name: 'Fee'
  174. },
  175. 32: {
  176. minlen: 1,
  177. maxlen: 11,
  178. lendigit: 2,
  179. name: 'Inst Code'
  180. },
  181. 35: {
  182. minlen: 1,
  183. maxlen: 37,
  184. lendigit: 2,
  185. name: 'Track 2'
  186. },
  187. 37: {
  188. minlen: 12,
  189. maxlen: 12,
  190. name: 'RRN'
  191. },
  192. 38: {
  193. minlen: 6,
  194. maxlen: 6,
  195. name: 'Auth Response'
  196. },
  197. 39: {
  198. minlen: 2,
  199. maxlen: 2,
  200. name: 'Response Code'
  201. },
  202. 41: {
  203. minlen: 8,
  204. maxlen: 8,
  205. name: 'Card Acceptor ID'
  206. },
  207. 43: {
  208. minlen: 40,
  209. maxlen: 40,
  210. name: 'Card Acceptor Name'
  211. },
  212. 48: {
  213. minlen: 1,
  214. maxlen: 16,
  215. lendigit: 3,
  216. name: 'Card Number'
  217. },
  218. 49: {
  219. minlen: 3,
  220. maxlen: 3,
  221. name: 'Currency Code Tr'
  222. },
  223. 50: {
  224. minlen: 3,
  225. maxlen: 3,
  226. name: 'Currency Code Settle'
  227. },
  228. 51: {
  229. minlen: 3,
  230. maxlen: 3,
  231. name: 'Currency Code Card Billing'
  232. },
  233. 54: {
  234. minlen: 1,
  235. maxlen: 120,
  236. lendigit: 3,
  237. name: 'Balances'
  238. },
  239. 60: {
  240. minlen: 1,
  241. maxlen: 999,
  242. lendigit: 3,
  243. name: 'Reserved'
  244. },
  245. 70: {
  246. minlen: 3,
  247. maxlen: 3,
  248. name: 'Network Management'
  249. },
  250. 90: {
  251. minlen: 42,
  252. maxlen: 42,
  253. name: 'Original Data'
  254. },
  255. 95: {
  256. minlen: 42,
  257. maxlen: 42,
  258. name: 'Partial Reversal'
  259. },
  260. 121: {
  261. minlen: 1,
  262. maxlen: 1000,
  263. name: 'Mini Statement'
  264. },
  265. 123: {
  266. minlen: 1,
  267. maxlen: 1000,
  268. name: 'Mini Statement'
  269. },
  270. 125: {
  271. minlen: 1,
  272. maxlen: 1000,
  273. name: 'Private for Reversal'
  274. },
  275. 126: {
  276. minlen: 1,
  277. maxlen: 1000,
  278. name: 'Private for Reversal'
  279. },
  280. 127: {
  281. minlen: 1,
  282. maxlen: 1000,
  283. name: 'Private for Reversal'
  284. }
  285. };
  286.  
  287. var isostring = md2['0'] + bch;
  288.  
  289. for (var i = 0; i < bits.length; i++) {
  290. var def = isomap[bits[i]];
  291. if (def['lendigit']) {
  292. isostring += fulllength(md2[String(bits[i])], def['lendigit']) + md2[String(bits[i])];
  293. } else {
  294. if (bits[i] == '121') {
  295. isostring += fulllength(md2[String(bits[i])], 3) + md2[String(bits[i])];
  296. } else {
  297. isostring += md2[String(bits[i])];
  298. }
  299. }
  300. }
  301. return isostring;
  302. }
  303.  
  304. function createBitMap(bits) {
  305. var maxbit = Math.max.apply(null, bits);
  306. var mb = 64;
  307. var allbits = "0";
  308. if (maxbit > 63) {
  309. var mb = 128;
  310. var allbits = "1";
  311. }
  312.  
  313.  
  314. for (var i = 2; i <= mb; i++) {
  315. if (bits.indexOf(i) != -1) {
  316. allbits += "1";
  317. } else {
  318. allbits += "0";
  319. }
  320. }
  321. return allbits;
  322. }
  323.  
  324. function sortNumber(a, b) {
  325. return a - b;
  326. }
  327.  
  328. function getBits(md2) {
  329. var keys = [];
  330. for (var key in md2) {
  331. if (parseInt(key) != 0 && parseInt(key) != 1) {
  332. keys.push(parseInt(key));
  333. }
  334. }
  335. return keys.sort(sortNumber);
  336. }
  337.  
  338.  
  339. function manuallyPackISO8583(md2) {
  340. var bits = getBits(md2);
  341. var bitmap = createBitMap(bits);
  342. var bch = binary2bch(bitmap);
  343.  
  344. var isostring = packbits(md2, bch, bits);
  345. return fulllength(isostring, 4) + isostring;
  346. }
  347.  
  348.  
  349.  
  350. function num2bcd(numstring) {
  351. //numstring - 82200000000000000400000000000000
  352. var n2b = {
  353. "0": "0000",
  354. "1": "0001",
  355. "2": "0010",
  356. "3": "0011",
  357. "4": "0100",
  358. "5": "0101",
  359. "6": "0110",
  360. "7": "0111",
  361. "8": "1000",
  362. "9": "1001",
  363. "a": "1010",
  364. "b": "1011",
  365. "c": "1100",
  366. "d": "1101",
  367. "e": "1110",
  368. "f": "1111"
  369. };
  370. var nst = numstring.toLowerCase().split('');
  371. var bcd = "";
  372. for (var i = 0; i < nst.length; i++) {
  373. bcd += n2b[nst[i]];
  374. }
  375. return bcd;
  376. }
  377.  
  378. function findones(bitmap) {
  379. var patt = /1/g;
  380. var locations = [];
  381. while (match = patt.exec(bitmap)) {
  382. locations.push(patt.lastIndex);
  383. }
  384. return locations;
  385. }
  386.  
  387. function dataElements(locations, data) {
  388. var isomap = {
  389. 2: {
  390. minlen: 1,
  391. maxlen: 19,
  392. lendigit: 2,
  393. name: 'account number'
  394. },
  395. 3: {
  396. minlen: 6,
  397. maxlen: 6,
  398. name: 'Processing Code'
  399. },
  400. 4: {
  401. minlen: 12,
  402. maxlen: 12,
  403. name: 'Amount'
  404. },
  405. 7: {
  406. minlen: 10,
  407. maxlen: 10,
  408. name: 'Transmission Date'
  409. },
  410. 11: {
  411. minlen: 6,
  412. maxlen: 6,
  413. name: 'System Trace Number'
  414. },
  415. 12: {
  416. minlen: 6,
  417. maxlen: 6,
  418. name: 'Time Transaction'
  419. },
  420. 13: {
  421. minlen: 4,
  422. maxlen: 4,
  423. name: 'Date Transaction'
  424. },
  425. 15: {
  426. minlen: 4,
  427. maxlen: 4,
  428. name: 'Date Settlement'
  429. },
  430. 17: {
  431. minlen: 4,
  432. maxlen: 4,
  433. name: 'Date Capture'
  434. },
  435. 24: {
  436. minlen: 3,
  437. maxlen: 3,
  438. name: 'Request Type'
  439. },
  440. 25: {
  441. minlen: 2,
  442. maxlen: 2,
  443. name: 'POS Reversal'
  444. },
  445. 28: {
  446. minlen: 9,
  447. maxlen: 9,
  448. name: 'Fee'
  449. },
  450. 32: {
  451. minlen: 1,
  452. maxlen: 11,
  453. lendigit: 2,
  454. name: 'Inst Code'
  455. },
  456. 35: {
  457. minlen: 1,
  458. maxlen: 37,
  459. lendigit: 2,
  460. name: 'Track 2'
  461. },
  462. 37: {
  463. minlen: 12,
  464. maxlen: 12,
  465. name: 'RRN'
  466. },
  467. 38: {
  468. minlen: 6,
  469. maxlen: 6,
  470. name: 'Auth Response'
  471. },
  472. 39: {
  473. minlen: 2,
  474. maxlen: 2,
  475. name: 'Response Code'
  476. },
  477. 41: {
  478. minlen: 8,
  479. maxlen: 8,
  480. name: 'Card Acceptor ID'
  481. },
  482. 43: {
  483. minlen: 40,
  484. maxlen: 40,
  485. name: 'Card Acceptor Name'
  486. },
  487. 48: {
  488. minlen: 1,
  489. maxlen: 16,
  490. lendigit: 3,
  491. name: 'Card Number'
  492. },
  493. 49: {
  494. minlen: 3,
  495. maxlen: 3,
  496. name: 'Currency Code Tr'
  497. },
  498. 50: {
  499. minlen: 3,
  500. maxlen: 3,
  501. name: 'Currency Code Settle'
  502. },
  503. 51: {
  504. minlen: 3,
  505. maxlen: 3,
  506. name: 'Currency Code Card Billing'
  507. },
  508. 54: {
  509. minlen: 1,
  510. maxlen: 120,
  511. lendigit: 3,
  512. name: 'Balances'
  513. },
  514. 60: {
  515. minlen: 1,
  516. maxlen: 999,
  517. lendigit: 3,
  518. name: 'Reserved'
  519. },
  520. 70: {
  521. minlen: 3,
  522. maxlen: 3,
  523. name: 'Network Management'
  524. },
  525. 90: {
  526. minlen: 42,
  527. maxlen: 42,
  528. name: 'Original Data'
  529. },
  530. 95: {
  531. minlen: 42,
  532. maxlen: 42,
  533. name: 'Partial Reversal'
  534. },
  535. 121: {
  536. minlen: 1,
  537. maxlen: 1000,
  538. name: 'Mini Statement'
  539. },
  540. 123: {
  541. minlen: 1,
  542. maxlen: 1000,
  543. name: 'Mini Statement'
  544. },
  545. 125: {
  546. minlen: 1,
  547. maxlen: 1000,
  548. name: 'Private for Reversal'
  549. },
  550. 126: {
  551. minlen: 1,
  552. maxlen: 1000,
  553. name: 'Private for Reversal'
  554. },
  555. 127: {
  556. minlen: 1,
  557. maxlen: 1000,
  558. name: 'Private for Reversal'
  559. }
  560. };
  561.  
  562. var returndata = [];
  563. var cursor = 0;
  564. for (i = 0; i < locations.length; i++) {
  565. var cl = locations[i];
  566. if (cl != 1) {
  567. // If length is variable
  568. if (isomap[cl]['lendigit']) {
  569. var ld = isomap[cl]['lendigit'];
  570. var totallength = parseInt(data.substr(cursor, ld));
  571. var actualvalue = data.substr(cursor + ld, totallength);
  572. returndata.push([cl, actualvalue]);
  573. cursor += totallength + ld;
  574. }
  575. // if length is fixed
  576. else {
  577. var actuallength = parseInt(isomap[cl]['minlen']);
  578. var actualvalue = data.substr(cursor, actuallength);
  579. returndata.push([cl, actualvalue]);
  580. cursor += actuallength;
  581. }
  582. }
  583. }
  584. return returndata;
  585. }
  586.  
  587. function unpackiso8583Manually(isostring) {
  588. var msgtype = isostring.substr(0, 4);
  589. var unpacked = {
  590. '0': msgtype
  591. };
  592. // Unpacker
  593. var msgtype = isostring.substr(0, 4);
  594. // take next 16
  595. var bitmap = isostring.substr(4, 16);
  596. // convert to BCD
  597. var bcd = num2bcd(bitmap);
  598. // Find locations where there is 1.
  599. var locations = findones(bcd);
  600. var datastart = 20;
  601. if (locations[0] == 1) {
  602. bitmap += isostring.substr(20, 16);
  603. var bcd = num2bcd(bitmap);
  604. var locations = findones(bcd);
  605. var datastart = 36;
  606. }
  607. // get data elements
  608. var data = isostring.substr(datastart, 1000);
  609. var dm = dataElements(locations, data);
  610. var final = dm.unshift(['0', msgtype]);
  611. return nestedArrayToDictionary(dm);
  612. }
  613.  
  614.  
  615.  
  616.  
  617.  
  618.  
  619. /*------------Message Sending------------*/
  620. function createisostring(packedmessage) {
  621. var msg = ""
  622. for (i = 0; i < packedmessage.length; i++) {
  623. msg += packedmessage[i];
  624. }
  625. return msg;
  626. }
  627.  
  628. function DictionaryToNestedArray(metadata) {
  629. var narray = [];
  630. for (var key in metadata) {
  631. narray.push([parseInt(key), metadata[key]]);
  632. }
  633. return narray;
  634. }
  635.  
  636. function createmessage(packets) {
  637. var message = new ISO8583.Message();
  638. var packedMessage = message.packSync(packets);
  639. return createisostring(packedMessage);
  640. }
  641.  
  642. // Listen on a socket port. e.g. Sarvatra connects to port 8583.
  643. require('net').createServer(function (socket) {
  644. console.log("connected");
  645. // Send sign - on / off ?
  646. var signedon = 0;
  647.  
  648. socket.on('data', function (data) {
  649.  
  650. try {
  651. console.log("Received Following string");
  652. console.log(data.toString());
  653.  
  654. var start = data.toString().substr(0, 4);
  655. var cleanData = data.toString().slice(4);
  656.  
  657. var timestamp = String(new Date().getTime());
  658. saveLogs("######################\nReceived from server at " + timestamp + "\n" + data.toString() + "\n");
  659. var receivedFromServer=data.toString();
  660. var logdata = "";
  661.  
  662. var metadata = unpackiso8583Manually(cleanData);
  663. if (metadata['60']) {
  664. var yearnow = metadata['60'].substr(0, 4) + metadata['7'];
  665. } else {
  666. var yearnow = '2017' + metadata['7'];
  667. }
  668. var currentHour = new Date().getHours()
  669. console.log(metadata);
  670. /* Networking Messages */
  671. if (metadata['0'] == '0800') {
  672. //Handshake
  673. var md2 = cloneDictionary(metadata);
  674. md2['0'] = '0810';
  675. md2['39'] = '00';
  676. var isostring = manuallyPackISO8583(md2);
  677. //var returnArray=DictionaryToNestedArray(md2);
  678. //var handshake=createmessage(returnArray);
  679. socket.write(isostring);
  680. console.log(isostring);
  681. logdata += "Sent to server\n" + isostring + "\n";
  682. saveLogs(logdata);
  683. } else if (currentHour != 2 && currentHour != 3) {
  684. // for balance
  685.  
  686. if (metadata['0'] == '0200' || metadata['0'] == '0220') {
  687. var connection = mysql.createConnection({
  688. host: '192.168.0.51',
  689. user: 'root',
  690. password: 'decisionM45#',
  691. database: 'ojsbcbs'
  692. });
  693. var prcode = metadata['3'].substr(0, 2);
  694. var acno=metadata['2'].substr(2,20);
  695. if (metadata['35']) {
  696. var cardno = metadata['35'].split('=')[0];
  697. } else {
  698. var cardno = metadata['2'];
  699. }
  700. var particulars = metadata['43'].replace("'", " ");
  701. var balanceQuery = "CALL SP_ATM(" + prcode + "," + metadata['11'] + ",'" + metadata['41'] + "','" + acno + "','" + acno + "','" + metadata['4'] + "','" + metadata['35'] + "','" + metadata['38'] + "','" + metadata['50'] + "','" + metadata['28'] + "','" + metadata['37'] + "','" + metadata['32'] + "','" + particulars + "','" + cardno + "',0,'" + yearnow + "','" + metadata['12'] + "','" + metadata['13'] + "','" + metadata['15'] + "',@rc,@lb,@or1,@om,@or2,@ministat,@nb);"
  702. logdata += "Database Query\n";
  703. logdata += balanceQuery + "\n";
  704. connection.query({sql:balanceQuery,timeout:15000},
  705. function (err, rows, fields) {
  706. if (err) {
  707. console.log("ERR");
  708. console.log(err);
  709. logdata += "ERROR\n" + err + "\n";
  710. }
  711. connection.query({sql:"select @rc,@lb,@or1,@om,@or2,@ministat,@nb;",timeout:15000}, function (err, rows) {
  712. console.log(rows);
  713. var result = rows[0];
  714. var productcode = acno.substr(4, 3);
  715. if (productcode == '044') {
  716. var actype = '10';
  717. } else {
  718. var actype = '20';
  719. }
  720.  
  721. var md2 = cloneDictionary(metadata);
  722. if (metadata[0] == '0200') {
  723. md2['0'] = '0210';
  724. } else {
  725. md2['0'] = '0230';
  726. }
  727. // md2['39']=result['@rc'];//getResponseForBalance(md2); // 00 or 02
  728. if (result['@rc'] && result['@rc'] != '' && result['@rc'] != 'null' && result['@rc'] != null) {
  729. md2['39'] = result['@rc']; //getResponseForBalance(md2); // 00 or 02
  730. } else {
  731. md2['39'] = 06;
  732. }
  733. md2['51'] = 356;
  734. if (prcode != '19') {
  735. var gotbalance = actype + "01356" + result['@lb'] + actype + "02356" + result['@nb'];
  736. if (!!result['@lb']) {
  737. md2['54'] = actype + "01356" + result['@lb'] + actype + "02356" + result['@nb']; // Balance string //"0401001356C0000001500001002356C000000140000";
  738. } else {
  739. md2['54'] = '0000000000000000000000000000000000000000'; // Balance string //"0401001356C0000001500001002356C000000140000";
  740. }
  741. }
  742.  
  743. // Mini statement
  744. if (prcode == '35' || prcode == '36' || prcode == '37') {
  745. console.log("MINI STATEMENT");
  746. console.log(result['@ministat']);
  747. md2['121'] = result['@ministat'];
  748. }
  749.  
  750. if (prcode == '82') {
  751. var datas = result['@ministat'].split('|');
  752. md2['125'] = datas[0];
  753. md2['126'] = datas[1];
  754. md2['127'] = datas[2];
  755. }
  756.  
  757.  
  758. var isostring = manuallyPackISO8583(md2);
  759. //var returnArray=DictionaryToNestedArray(md2);
  760. //var balanceResult=createmessage(returnArray);
  761. socket.write(isostring);
  762. console.log(isostring);
  763. logdata += isostring + "\n";
  764. logdata += "Sent to server\n" + isostring + "\n";
  765. saveLogs(logdata);
  766. connection.end();
  767. });
  768. });
  769. }
  770. // for reversal
  771. else if (metadata['0'] == '0420') {
  772. var connection = mysql.createConnection({
  773. host: '192.168.0.51',
  774. user: 'root',
  775. password: 'decisionM45#',
  776. database: 'ojsbcbs'
  777. });
  778. var prcode = metadata['3'].substr(0, 2);
  779. var acno=metadata['2'].substr(2,20);
  780. if (metadata['35']) {
  781. var cardno = metadata['35'].split('=')[0];
  782. } else {
  783. var cardno = metadata['2'];
  784. }
  785. if (metadata['95']) {
  786. var diffamt = String(parseInt(metadata['4']) - parseInt(metadata['95'].substr(0, 12)));
  787. var reversalamt = fullzeros(diffamt, 12);
  788. } else {
  789. var reversalamt = metadata['4'];
  790. }
  791. var particulars = metadata['43'].replace("'", " ");
  792. var rrnorig=metadata['37'];
  793. var rrn = receivedFromServer.substr(receivedFromServer.length-12,12);
  794.  
  795. var reverseQuery = "CALL SP_ATM_REVERSAL(" + prcode + "," + metadata['11'] + ",'" + metadata['41'] + "','" + acno + "','" + acno + "','" + reversalamt + "','" + metadata['35'] + "','" + metadata['38'] + "','000','" + metadata['28'] + "','" + rrn + "','" + metadata['32'] + "','" + particulars + "','" + cardno + "','" + metadata['11'] + "',0,'" + yearnow + "','" + metadata['12'] + "','" + metadata['13'] + "','" + metadata['15']+"-"+rrnorig+ "',@rc,@lb,@or1,@om,@or2,@ministat,@nb);"
  796. console.log(reverseQuery);
  797. logdata += "Database Query\n";
  798. logdata += reverseQuery + "\n";
  799.  
  800. connection.query({sql:reverseQuery,timeout:15000},
  801. function (err, rows, fields) {
  802. if (err) {
  803. console.log("ERR");
  804. console.log(err);
  805. logdata += "ERROR\n" + err + "\n";
  806. }
  807. connection.query({sql:"select @rc,@lb,@or1,@om,@or2,@ministat,@nb;",timeout:15000}, function (err, rows) {
  808. console.log(rows);
  809. var result = rows[0];
  810.  
  811. var productcode = acno.substr(4, 3);
  812. if (productcode == '044') {
  813. var actype = '10';
  814. } else {
  815. var actype = '20';
  816. }
  817.  
  818. var md2 = cloneDictionary(metadata);
  819. md2['0'] = '0430';
  820. //md2['39']=result['@rc'];//getResponseForBalance(md2); // 00 or 02
  821. if (result['@rc'] && result['@rc'] != '' && result['@rc'] != 'null' && result['@rc'] != null) {
  822. md2['39'] = result['@rc']; //getResponseForBalance(md2); // 00 or 02
  823. } else {
  824. md2['39'] = 06;
  825. }
  826. md2['51'] = 356;
  827. if (prcode != '19') {
  828. var gotbalance = actype + "01356" + result['@lb'] + actype + "02356" + result['@nb'];
  829. if (!!result['@lb']) {
  830. md2['54'] = actype + "01356" + result['@lb'] + actype + "02356" + result['@nb']; // Balance string //"0401001356C0000001500001002356C000000140000";
  831. } else {
  832. md2['54'] = '0000000000000000000000000000000000000000'; // Balance string //"0401001356C0000001500001002356C000000140000";
  833. }
  834. }
  835.  
  836. // Mini statement
  837. if (prcode == '35' || prcode == '36' || prcode == '37') {
  838. console.log(result['@ministat']);
  839. md2['121'] = result['@ministat'];
  840. }
  841.  
  842.  
  843.  
  844. var isostring = manuallyPackISO8583(md2);
  845. //var returnArray=DictionaryToNestedArray(md2);
  846. //var balanceResult=createmessage(returnArray);
  847. socket.write(isostring);
  848. logdata += isostring + "\n";
  849. saveLogs(logdata);
  850. connection.end();
  851. });
  852. });
  853. } else {
  854. logdata += "INVALID DATA\n"
  855. saveLogs(logdata);
  856. }
  857. }
  858. } catch (err) {
  859. saveLogs("####################\nMAIN ERROR\n" + err + "\n####################\n");
  860. console.log(err);
  861. }
  862.  
  863. });
  864. }).listen(5001);
Add Comment
Please, Sign In to add comment