prepaid.js
2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
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');
module.exports = async (task, isAdvice) => {
const xid = uniqid();
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');
try {
logger.verbose(`${MODULE_NAME} 4AAD4F99: Going to HIT prepaid endpoint`, {
xid,
isAdvice,
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;
}
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,
amount: 0,
balance: 0,
message: {
xid,
'DIRECT-RESPONSE': response.data,
'IS-ADVICE': !!isAdvice,
},
});
} catch (e) {
const rc = e.rc || '68';
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,
},
});
}
};