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