Commit 4231c7ef05095d70cabc6c4912ad58ee366d378c

Authored by Adhidarma Hadiwinoto
1 parent 15adab0fe7
Exists in master

Add intermediate report on sending request to partner

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

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