Commit 4231c7ef05095d70cabc6c4912ad58ee366d378c
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 |