Commit 8391f7809e20e0b44fd47e321e7771dbbe8d71b5
1 parent
6621ca5cdb
Exists in
master
Logging on hit exception
Showing 1 changed file with 11 additions and 0 deletions Inline Diff
lib/hit/prepaid.js
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 |