Commit 1e63f374193d04ff7db95d5d698a8901bb12e289

Authored by Adhidarma Hadiwinoto
1 parent 385d8ff594
Exists in master

Number on amount and ending_balance

Showing 2 changed files with 4 additions and 4 deletions Inline Diff

lib/callback/handler-prepaid.js
1 const MODULE_NAME = 'CALLBACK.HANDLER-PREPAID'; 1 const MODULE_NAME = 'CALLBACK.HANDLER-PREPAID';
2 2
3 const logger = require('komodo-sdk/logger'); 3 const logger = require('komodo-sdk/logger');
4 const report = require('../report/prepaid'); 4 const report = require('../report/prepaid');
5 const getFromReq = require('../get-from-params-body-qs'); 5 const getFromReq = require('../get-from-params-body-qs');
6 const translateRc = require('../translate-rc'); 6 const translateRc = require('../translate-rc');
7 7
8 module.exports = (req, res) => { 8 module.exports = (req, res) => {
9 const { xid } = res.locals; 9 const { xid } = res.locals;
10 res.json({ 10 res.json({
11 status: 'OK', 11 status: 'OK',
12 error: null, 12 error: null,
13 ts: new Date(), 13 ts: new Date(),
14 xid, 14 xid,
15 }); 15 });
16 16
17 const rcFromRequest = getFromReq(req, 'rc'); 17 const rcFromRequest = getFromReq(req, 'rc');
18 const translatedRc = rcFromRequest && (translateRc[rcFromRequest] || rcFromRequest); 18 const translatedRc = rcFromRequest && (translateRc[rcFromRequest] || rcFromRequest);
19 logger.verbose(`${MODULE_NAME} 2B7BE44D: RC translated`, { 19 logger.verbose(`${MODULE_NAME} 2B7BE44D: RC translated`, {
20 xid, 20 xid,
21 rcFromRequest, 21 rcFromRequest,
22 translatedRc, 22 translatedRc,
23 }); 23 });
24 24
25 report(xid, { 25 report(xid, {
26 trx_id: getFromReq(req, 'request_id'), 26 trx_id: getFromReq(req, 'request_id'),
27 rc: translatedRc || '68', 27 rc: translatedRc || '68',
28 sn: getFromReq(req, 'sn'), 28 sn: getFromReq(req, 'sn'),
29 amount: getFromReq(req, 'amount'), 29 amount: Number(getFromReq(req, 'amount')) || undefined,
30 balance: getFromReq(req, 'ending_balance'), 30 balance: Number(getFromReq(req, 'ending_balance')) || undefined,
31 message: { 31 message: {
32 xid, 32 xid,
33 CALLBACK: { 33 CALLBACK: {
34 ip: req.ip, 34 ip: req.ip,
35 method: req.method, 35 method: req.method,
36 body: req.body, 36 body: req.body,
37 qs: req.query, 37 qs: req.query,
38 }, 38 },
39 }, 39 },
40 }); 40 });
41 }; 41 };
42 42
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: 0, 87 amount: Number(response.data.amount) || undefined,
88 balance: 0, 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 lastResponse = e.response; 98 lastResponse = e.response;
99 99
100 report(xid, { 100 report(xid, {
101 trx_id: task.trx_id, 101 trx_id: task.trx_id,
102 rc, 102 rc,
103 message: { 103 message: {
104 xid, 104 xid,
105 'KOMODO-GW-ERROR': { 105 'KOMODO-GW-ERROR': {
106 eCode: e.code, 106 eCode: e.code,
107 eMessage: e.message, 107 eMessage: e.message,
108 responseHttpStatus: e.response && e.response.status, 108 responseHttpStatus: e.response && e.response.status,
109 responseBody: e.response && e.response.data, 109 responseBody: e.response && e.response.data,
110 }, 110 },
111 'IS-ADVICE': !!isAdvice, 111 'IS-ADVICE': !!isAdvice,
112 }, 112 },
113 }); 113 });
114 } finally { 114 } finally {
115 dumpReqRes( 115 dumpReqRes(
116 xid, 116 xid,
117 task, 117 task,
118 'GET', 118 'GET',
119 endpointUrl, 119 endpointUrl,
120 params, 120 params,
121 lastResponse && lastResponse.data, 121 lastResponse && lastResponse.data,
122 lastResponse && lastResponse.status, 122 lastResponse && lastResponse.status,
123 lastResponse, 123 lastResponse,
124 ); 124 );
125 } 125 }
126 }; 126 };
127 127