Commit 00fd3da335c0d770b233c353ce5990bf9076e0af

Authored by Adhidarma Hadiwinoto
1 parent 356e544bcc
Exists in master

Penanganan missing params pada response

Showing 1 changed file with 23 additions and 2 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('komodo-sdk/logger'); 4 const logger = require('komodo-sdk/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 11
12 module.exports = (xid, trxIdFromCaller, xml, isCallback) => { 12 module.exports = (xid, trxIdFromCaller, xml, isCallback) => {
13 logger.verbose(`${MODULE_NAME} 58547863: Processing XML message`, { xid }); 13 logger.verbose(`${MODULE_NAME} 58547863: Processing XML message`, { xid });
14 14
15 if (!trxIdFromCaller && !isCallback) { 15 if (!trxIdFromCaller && !isCallback) {
16 if (logger) logger.warn(`${MODULE_NAME} 8CAAD7C9: No trx id on non callback`, { xid }); 16 if (logger) logger.warn(`${MODULE_NAME} 8CAAD7C9: No trx id on non callback`, { xid });
17 return; 17 return;
18 } 18 }
19 19
20 const obj = parseXml(xid, xml); 20 const obj = parseXml(xid, xml);
21 if (!obj) { 21 if (!obj) {
22 logger.warn(`${MODULE_NAME} B46CAAD1: Invalid XML`, { xid }); 22 logger.warn(`${MODULE_NAME} B46CAAD1: Invalid XML`, { xid });
23 23
24 if (trxIdFromCaller) { 24 if (trxIdFromCaller) {
25 report(xid, { 25 report(xid, {
26 trx_id: trxIdFromCaller, 26 trx_id: trxIdFromCaller.toString(),
27 rc: '68', 27 rc: '68',
28 message: { 28 message: {
29 xid, 29 xid,
30 isDirectResponse: !isCallback, 30 isDirectResponse: !isCallback,
31 isCallback: !!isCallback, 31 isCallback: !!isCallback,
32 body: xml, 32 body: xml,
33 }, 33 },
34 }); 34 });
35 } 35 }
36 36
37 return; 37 return;
38 } 38 }
39 39
40 const params = getParamsMemberObj(obj, false); 40 const params = getParamsMemberObj(obj, false);
41
42 if (!params) {
43 const e = new Error(`${MODULE_NAME} A7B7EB30: Can not get params from message`);
44 logger.warn(e.message, { xid });
45
46 if (trxIdFromCaller) {
47 report(xid, {
48 trx_id: trxIdFromCaller.toString(),
49 rc: '68',
50 message: {
51 xid,
52 responseType: isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE',
53 'GW-ERROR': {
54 message: e.message,
55 response: obj,
56 },
57 },
58 });
59 }
60 }
61
41 logger.verbose(`${MODULE_NAME} 3D5400C1: Params extracted from response`, { xid, params }); 62 logger.verbose(`${MODULE_NAME} 3D5400C1: Params extracted from response`, { xid, params });
42 63
43 const requestIdField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.requestId) || 'REQUESTID'; 64 const requestIdField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.requestId) || 'REQUESTID';
44 const requestIdFromResponse = params[requestIdField]; 65 const requestIdFromResponse = params[requestIdField];
45 66
46 const responseCodeField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.responseCode) || 'RESPONSECODE'; 67 const responseCodeField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.responseCode) || 'RESPONSECODE';
47 const responseCodeFromResponse = params[responseCodeField]; 68 const responseCodeFromResponse = params[responseCodeField];
48 69
49 const messageField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.message) || 'MESSAGE'; 70 const messageField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.message) || 'MESSAGE';
50 const messageFromResponse = params[messageField]; 71 const messageFromResponse = params[messageField];
51 72
52 const snField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.sn) || 'SN'; 73 const snField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.sn) || 'SN';
53 const snFromResponse = params[snField]; 74 const snFromResponse = params[snField];
54 75
55 const trxId = trxIdFromCaller || requestIdFromResponse; 76 const trxId = trxIdFromCaller || requestIdFromResponse;
56 if (!trxId) { 77 if (!trxId) {
57 logger.warn(`${MODULE_NAME} 534E684A: Unknown trxId`, { xid }); 78 logger.warn(`${MODULE_NAME} 534E684A: Unknown trxId`, { xid });
58 return; 79 return;
59 } 80 }
60 81
61 const rc = translateRc(xid, responseCodeFromResponse) || '68'; 82 const rc = translateRc(xid, responseCodeFromResponse) || '68';
62 83
63 const sn = (rc === '00' && snFromResponse) || null; 84 const sn = (rc === '00' && snFromResponse) || null;
64 85
65 report(xid, { 86 report(xid, {
66 trx_id: trxId, 87 trx_id: trxId.toString(),
67 rc, 88 rc,
68 sn, 89 sn,
69 message: { 90 message: {
70 xid, 91 xid,
71 responseType: isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE', 92 responseType: isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE',
72 message: messageFromResponse, 93 message: messageFromResponse,
73 detail: params, 94 detail: params,
74 }, 95 },
75 }); 96 });
76 }; 97 };
77 98