Commit 8391f7809e20e0b44fd47e321e7771dbbe8d71b5

Authored by Adhidarma Hadiwinoto
1 parent 6621ca5cdb
Exists in master

Logging on hit exception

Showing 1 changed file with 11 additions and 0 deletions Inline Diff

1 const MODULE_NAME = 'HIT.PREPAID'; 1 const MODULE_NAME = 'HIT.PREPAID';
2 2
3 const axios = require('axios').default; 3 const axios = require('axios').default;
4 const urljoin = require('url-join'); 4 const urljoin = require('url-join');
5 const uniqid = require('uniqid'); 5 const uniqid = require('uniqid');
6 6
7 const config = require('komodo-sdk/config'); 7 const config = require('komodo-sdk/config');
8 const logger = require('komodo-sdk/logger'); 8 const logger = require('komodo-sdk/logger');
9 9
10 const report = require('../report/prepaid'); 10 const report = require('../report/prepaid');
11 const translateRc = require('../translate-rc'); 11 const translateRc = require('../translate-rc');
12 const composeCallbackUrl = require('./compose-callback-url'); 12 const composeCallbackUrl = require('./compose-callback-url');
13 const dumpReqRes = require('./dump-req-res'); 13 const dumpReqRes = require('./dump-req-res');
14 14
15 module.exports = async (task, isAdvice) => { 15 module.exports = async (task, isAdvice) => {
16 const xid = uniqid(); 16 const xid = uniqid();
17 17
18 logger.verbose(`${MODULE_NAME} 2272F01F: Processing task`, { 18 logger.verbose(`${MODULE_NAME} 2272F01F: Processing task`, {
19 xid, 19 xid,
20 isAdvice, 20 isAdvice,
21 task, 21 task,
22 }); 22 });
23 23
24 const params = { 24 const params = {
25 request_id: task.trx_id, 25 request_id: task.trx_id,
26 terminal_name: config.partner.terminal_name, 26 terminal_name: config.partner.terminal_name,
27 password: config.partner.password, 27 password: config.partner.password,
28 destination: task.destination, 28 destination: task.destination,
29 product_name: task.remote_product, 29 product_name: task.remote_product,
30 reverse_url: composeCallbackUrl(xid, false), 30 reverse_url: composeCallbackUrl(xid, false),
31 }; 31 };
32 32
33 const endpointUrl = isAdvice 33 const endpointUrl = isAdvice
34 ? urljoin(config.partner.url, '/trx-status') 34 ? urljoin(config.partner.url, '/trx-status')
35 : urljoin(config.partner.url, '/topup'); 35 : urljoin(config.partner.url, '/topup');
36 36
37 let lastResponse = null; 37 let lastResponse = null;
38 38
39 try { 39 try {
40 logger.verbose(`${MODULE_NAME} 4AAD4F99: Going to HIT prepaid endpoint`, { 40 logger.verbose(`${MODULE_NAME} 4AAD4F99: Going to HIT prepaid endpoint`, {
41 xid, 41 xid,
42 endpointUrl, 42 endpointUrl,
43 params, 43 params,
44 }); 44 });
45 45
46 const response = await axios.get(endpointUrl, { 46 const response = await axios.get(endpointUrl, {
47 headers: { 47 headers: {
48 'User-Agent': 'KOMODO-GW-HTTPGETX', 48 'User-Agent': 'KOMODO-GW-HTTPGETX',
49 }, 49 },
50 timeout: config.partner.hit_timeout_ms || 60 * 1000, 50 timeout: config.partner.hit_timeout_ms || 60 * 1000,
51 params, 51 params,
52 }); 52 });
53 53
54 if (!response) { 54 if (!response) {
55 const e = new Error(`${MODULE_NAME} 8CF4E04D: Empty response`); 55 const e = new Error(`${MODULE_NAME} 8CF4E04D: Empty response`);
56 e.rc = '68'; 56 e.rc = '68';
57 e.response = response; 57 e.response = response;
58 throw e; 58 throw e;
59 } 59 }
60 60
61 if (!response.data) { 61 if (!response.data) {
62 const e = new Error(`${MODULE_NAME} E72B5A53: Empty response data`); 62 const e = new Error(`${MODULE_NAME} E72B5A53: Empty response data`);
63 e.rc = '68'; 63 e.rc = '68';
64 e.response = response; 64 e.response = response;
65 throw e; 65 throw e;
66 } 66 }
67 67
68 if (typeof response.data !== 'object') { 68 if (typeof response.data !== 'object') {
69 const e = new Error(`${MODULE_NAME} 507680AB: Response data is not a JSON`); 69 const e = new Error(`${MODULE_NAME} 507680AB: Response data is not a JSON`);
70 e.rc = '68'; 70 e.rc = '68';
71 e.response = response; 71 e.response = response;
72 throw e; 72 throw e;
73 } 73 }
74 74
75 lastResponse = response; 75 lastResponse = response;
76 76
77 logger.verbose(`${MODULE_NAME} E51AFBBA: Got a direct response`, { 77 logger.verbose(`${MODULE_NAME} E51AFBBA: Got a direct response`, {
78 xid, 78 xid,
79 responseBody: response.data, 79 responseBody: response.data,
80 }); 80 });
81 81
82 report(xid, { 82 report(xid, {
83 trx_id: task.trx_id, 83 trx_id: task.trx_id,
84 rc: response.data.rc ? translateRc[response.data.rc] || response.data.rc 84 rc: response.data.rc ? translateRc[response.data.rc] || response.data.rc
85 : '68', 85 : '68',
86 sn: response.data.sn || null, 86 sn: response.data.sn || null,
87 amount: Number(response.data.amount) || undefined, 87 amount: Number(response.data.amount) || undefined,
88 balance: Number(response.data.ending_balance) || undefined, 88 balance: Number(response.data.ending_balance) || undefined,
89 message: { 89 message: {
90 xid, 90 xid,
91 'DIRECT-RESPONSE': response.data, 91 'DIRECT-RESPONSE': response.data,
92 'IS-ADVICE': !!isAdvice, 92 'IS-ADVICE': !!isAdvice,
93 }, 93 },
94 }); 94 });
95 } catch (e) { 95 } catch (e) {
96 const rc = e.rc || '68'; 96 const rc = e.rc || '68';
97 97
98 logger.warn(`${MODULE_NAME} 8E8E49F5: Exception`, {
99 xid,
100 eCode: e.code,
101 eMessage: e.message,
102 eRc: e.rc,
103 rc,
104 isAdvice,
105 responseHttpStatus: e.response && e.response.status,
106 responseBody: e.response && e.response.data,
107 });
108
98 lastResponse = e.response; 109 lastResponse = e.response;
99 110
100 report(xid, { 111 report(xid, {
101 trx_id: task.trx_id, 112 trx_id: task.trx_id,
102 rc, 113 rc,
103 message: { 114 message: {
104 xid, 115 xid,
105 'KOMODO-GW-ERROR': { 116 'KOMODO-GW-ERROR': {
106 eCode: e.code, 117 eCode: e.code,
107 eMessage: e.message, 118 eMessage: e.message,
108 responseHttpStatus: e.response && e.response.status, 119 responseHttpStatus: e.response && e.response.status,
109 responseBody: e.response && e.response.data, 120 responseBody: e.response && e.response.data,
110 }, 121 },
111 'IS-ADVICE': !!isAdvice, 122 'IS-ADVICE': !!isAdvice,
112 }, 123 },
113 }); 124 });
114 } finally { 125 } finally {
115 dumpReqRes( 126 dumpReqRes(
116 xid, 127 xid,
117 task, 128 task,
118 'GET', 129 'GET',
119 endpointUrl, 130 endpointUrl,
120 params, 131 params,
121 lastResponse && lastResponse.data, 132 lastResponse && lastResponse.data,
122 lastResponse && lastResponse.status, 133 lastResponse && lastResponse.status,
123 lastResponse, 134 lastResponse,
124 ); 135 );
125 } 136 }
126 }; 137 };
127 138