Commit 5f5702f45e43801ca6efb66b9368f8b53040e488

Authored by Adhidarma Hadiwinoto
1 parent 916fdcf584
Exists in master

Perbaikan default rc

Showing 1 changed file with 3 additions and 1 deletions Inline Diff

1 const MODULE_NAME = 'PARSE-RESULT'; 1 const MODULE_NAME = 'PARSE-RESULT';
2 2
3 const config = require('komodo-sdk/config'); 3 const config = require('komodo-sdk/config');
4 const logger = require('tektrans-logger'); 4 const logger = require('tektrans-logger');
5 5
6 const getParamsMemberObj = require('./generic-xmlrpc/get-params-members-obj'); 6 const getParamsMemberObj = require('./generic-xmlrpc/get-params-members-obj');
7 const parseXml = require('./parse-xml'); 7 const parseXml = require('./parse-xml');
8 8
9 const report = require('./report'); 9 const report = require('./report');
10 const translateRc = require('./translate-rc'); 10 const translateRc = require('./translate-rc');
11 const messageExtractor = require('./message-extractor'); 11 const messageExtractor = require('./message-extractor');
12 const patternRules = require('./pattern-rules'); 12 const patternRules = require('./pattern-rules');
13 13
14 module.exports = (xid, trxIdFromCaller, xml, isCallback, remoteIp) => { 14 module.exports = (xid, trxIdFromCaller, xml, isCallback, remoteIp) => {
15 logger.verbose(`${MODULE_NAME} 58547863: Processing XML message`, { xid, isCallback }); 15 logger.verbose(`${MODULE_NAME} 58547863: Processing XML message`, { xid, isCallback });
16 16
17 const responseType = isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE'; 17 const responseType = isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE';
18 18
19 if (!trxIdFromCaller && !isCallback) { 19 if (!trxIdFromCaller && !isCallback) {
20 if (logger) logger.warn(`${MODULE_NAME} 8CAAD7C9: No trx id on non callback`, { xid }); 20 if (logger) logger.warn(`${MODULE_NAME} 8CAAD7C9: No trx id on non callback`, { xid });
21 return; 21 return;
22 } 22 }
23 23
24 const obj = parseXml(xid, xml); 24 const obj = parseXml(xid, xml);
25 if (!obj) { 25 if (!obj) {
26 const e = new Error(`${MODULE_NAME} B46CAAD1: Invalid XML`); 26 const e = new Error(`${MODULE_NAME} B46CAAD1: Invalid XML`);
27 logger.warn(e.message, { xid }); 27 logger.warn(e.message, { xid });
28 28
29 if (trxIdFromCaller) { 29 if (trxIdFromCaller) {
30 report(xid, { 30 report(xid, {
31 trx_id: trxIdFromCaller.toString(), 31 trx_id: trxIdFromCaller.toString(),
32 rc: '68', 32 rc: '68',
33 message: { 33 message: {
34 xid, 34 xid,
35 responseType, 35 responseType,
36 'GW-ERROR': { 36 'GW-ERROR': {
37 message: e.message, 37 message: e.message,
38 responseFromPartner: xml, 38 responseFromPartner: xml,
39 }, 39 },
40 }, 40 },
41 }); 41 });
42 } 42 }
43 43
44 return; 44 return;
45 } 45 }
46 46
47 const params = getParamsMemberObj(obj, false); 47 const params = getParamsMemberObj(obj, false);
48 48
49 if (!params) { 49 if (!params) {
50 const e = new Error(`${MODULE_NAME} A7B7EB30: Can not get params from message`); 50 const e = new Error(`${MODULE_NAME} A7B7EB30: Can not get params from message`);
51 logger.warn(e.message, { xid }); 51 logger.warn(e.message, { xid });
52 52
53 if (trxIdFromCaller) { 53 if (trxIdFromCaller) {
54 report(xid, { 54 report(xid, {
55 trx_id: trxIdFromCaller.toString(), 55 trx_id: trxIdFromCaller.toString(),
56 rc: '68', 56 rc: '68',
57 message: { 57 message: {
58 xid, 58 xid,
59 responseType, 59 responseType,
60 'GW-ERROR': { 60 'GW-ERROR': {
61 message: e.message, 61 message: e.message,
62 responseFromPartner: obj, 62 responseFromPartner: obj,
63 }, 63 },
64 }, 64 },
65 }); 65 });
66 } 66 }
67 } 67 }
68 68
69 logger.verbose(`${MODULE_NAME} 3D5400C1: Params extracted from response`, { xid, params }); 69 logger.verbose(`${MODULE_NAME} 3D5400C1: Params extracted from response`, { xid, params });
70 70
71 const requestIdField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.requestId) || 'REQUESTID'; 71 const requestIdField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.requestId) || 'REQUESTID';
72 const requestIdFromResponse = params[requestIdField]; 72 const requestIdFromResponse = params[requestIdField];
73 73
74 const responseCodeField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.responseCode) || 'RESPONSECODE'; 74 const responseCodeField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.responseCode) || 'RESPONSECODE';
75 const responseCodeFromResponse = params[responseCodeField]; 75 const responseCodeFromResponse = params[responseCodeField];
76 76
77 const messageField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.message) || 'MESSAGE'; 77 const messageField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.message) || 'MESSAGE';
78 const messageFromResponse = params[messageField]; 78 const messageFromResponse = params[messageField];
79 79
80 const snField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.sn) || 'SN'; 80 const snField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.sn) || 'SN';
81 const snFromResponse = params[snField]; 81 const snFromResponse = params[snField];
82 82
83 const trxId = trxIdFromCaller || requestIdFromResponse; 83 const trxId = trxIdFromCaller || requestIdFromResponse;
84 if (!trxId) { 84 if (!trxId) {
85 logger.warn(`${MODULE_NAME} 534E684A: Unknown trxId`, { xid }); 85 logger.warn(`${MODULE_NAME} 534E684A: Unknown trxId`, { xid });
86 return; 86 return;
87 } 87 }
88 88
89 const rc = translateRc(xid, responseCodeFromResponse) || '68'; 89 const rc = responseCodeFromResponse
90 ? translateRc(xid, responseCodeFromResponse) || '40'
91 : '68';
90 92
91 const sn = ( 93 const sn = (
92 rc === '00' && ( 94 rc === '00' && (
93 snFromResponse 95 snFromResponse
94 || messageExtractor(patternRules.sn, messageFromResponse) 96 || messageExtractor(patternRules.sn, messageFromResponse)
95 ) 97 )
96 ) || null; 98 ) || null;
97 99
98 const amount = Number(messageExtractor(patternRules.price, messageFromResponse) || '') || null; 100 const amount = Number(messageExtractor(patternRules.price, messageFromResponse) || '') || null;
99 const balance = Number(messageExtractor(patternRules.balance, messageFromResponse) || '') || null; 101 const balance = Number(messageExtractor(patternRules.balance, messageFromResponse) || '') || null;
100 102
101 report(xid, { 103 report(xid, {
102 trx_id: trxId.toString(), 104 trx_id: trxId.toString(),
103 rc, 105 rc,
104 sn, 106 sn,
105 amount, 107 amount,
106 balance, 108 balance,
107 message: { 109 message: {
108 xid, 110 xid,
109 ip: remoteIp || null, 111 ip: remoteIp || null,
110 responseType: isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE', 112 responseType: isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE',
111 message: params, 113 message: params,
112 }, 114 },
113 }); 115 });
114 }; 116 };
115 117