Commit 05d016dd09546d33ca52b7befb3153ed032ba152

Authored by Adhidarma Hadiwinoto
1 parent 93ea90c3e7
Exists in master and in 1 other branch dev

CALLBACK-SENDER: using POST on postpaid callback

Showing 1 changed file with 27 additions and 7 deletions Inline Diff

lib/core-callback/sender.js
1 const MODULE_NAME = 'CORE-CALLBACK.SENDER'; 1 const MODULE_NAME = 'CORE-CALLBACK.SENDER';
2 2
3 const axios = require('axios').default; 3 const axios = require('axios').default;
4 const config = require('komodo-sdk/config'); 4 const config = require('komodo-sdk/config');
5 const logger = require('komodo-sdk/logger'); 5 const logger = require('komodo-sdk/logger');
6 6
7 const HTTP_TIMEOUT = Number( 7 const HTTP_TIMEOUT = Number(
8 config.callback_sender && config.callback_sender.http_timeout_ms, 8 config.callback_sender && config.callback_sender.http_timeout_ms,
9 ) || 30 * 1000; 9 ) || 30 * 1000;
10 10
11 const SLEEP_BEFORE_RETRY_MS = Number( 11 const SLEEP_BEFORE_RETRY_MS = Number(
12 config.callback_sender && config.callback_sender.sleep_before_retry_ms, 12 config.callback_sender && config.callback_sender.sleep_before_retry_ms,
13 ) || 10 * 1000; 13 ) || 10 * 1000;
14 14
15 const MAX_RETRY = Number( 15 const MAX_RETRY = Number(
16 config.callback_sender && config.callback_sender.max_retry, 16 config.callback_sender && config.callback_sender.max_retry,
17 ) || 10; 17 ) || 10;
18 18
19 logger.verbose(`${MODULE_NAME} 848B9104: Initialized`, { 19 logger.verbose(`${MODULE_NAME} 848B9104: Initialized`, {
20 HTTP_TIMEOUT, 20 HTTP_TIMEOUT,
21 SLEEP_BEFORE_RETRY_MS, 21 SLEEP_BEFORE_RETRY_MS,
22 MAX_RETRY, 22 MAX_RETRY,
23 }); 23 });
24 24
25 const axiosHeaders = {
26 'Content-Type': 'application/json',
27 'User-Agent': 'KOMODO-HTTPGETX callback sender',
28 };
29
25 const sleep = require('../sleep'); 30 const sleep = require('../sleep');
26 const urlConcatQs = require('../url-concat-qs'); 31 const urlConcatQs = require('../url-concat-qs');
27 32
28 const sender = async (data, xid, retry) => { 33 const sender = async (data, xid, retry) => {
29 if (!data.reverse_url) { 34 if (!data.reverse_url) {
30 logger.verbose(`${MODULE_NAME} C4FF18FB: Ignoring missing reverse url`, { 35 logger.verbose(`${MODULE_NAME} C4FF18FB: Ignoring missing reverse url`, {
31 xid, 36 xid,
32 dataFromCore: data, 37 dataFromCore: data,
33 }); 38 });
34 39
35 return; 40 return;
36 } 41 }
37 42
38 const params = { 43 const params = {
39 httpgetx_xid: xid, 44 httpgetx_xid: xid,
40 command: data.command, 45 command: data.command,
46
41 request_id: data.request_id && data.request_id.toString(), 47 request_id: data.request_id && data.request_id.toString(),
42 transaction_id: data.transaction_id && data.transaction_id.toString(), 48 transaction_id: data.transaction_id && data.transaction_id.toString(),
43 transaction_date: data.transaction_date, 49 transaction_date: data.transaction_date,
50
44 store_name: data.store_name, 51 store_name: data.store_name,
45 terminal_name: data.terminal_name, 52 terminal_name: data.terminal_name,
53
46 product_name: data.product_name, 54 product_name: data.product_name,
47 destination: data.destination, 55 destination: data.destination,
48 56
49 rc: data.rc, 57 rc: data.rc,
50 sn: data.sn || undefined, 58 sn: data.sn || undefined,
51 amount: Number(data.amount) || undefined, 59 amount: Number(data.amount) || undefined,
52 ending_balance: Number(data.ending_balance) || undefined, 60 ending_balance: Number(data.ending_balance) || undefined,
53 61
54 message: data.message, 62 message: data.message,
55 63
56 bill_count: Number(data.bill_count) || undefined, 64 bill_count: Number(data.bill_count) || undefined,
57 bill_amount: Number(data.bill_amount) || undefined, 65 bill_amount: Number(data.bill_amount) || undefined,
58 fee_per_bill: Number(data.fee) || undefined, 66 fee_per_bill: Number(data.fee) || undefined,
59 fee_total: Number(data.fee_total) || undefined, 67 fee_total: Number(data.fee_total) || undefined,
60 68
61 bill_detail: data.bill_detail || undefined, 69 bill_detail: data.bill_detail || undefined,
62 }; 70 };
63 71
64 if (data.command === 'INQUIRY' && data.amount_to_charge) { 72 if (data.command === 'INQUIRY' && data.amount_to_charge) {
65 params.amount_to_charge = data.amount_to_charge; 73 params.amount_to_charge = data.amount_to_charge;
66 } 74 }
67 75
68 const fullUrl = urlConcatQs(data.reverse_url, params); 76 const isPostpaid = ['INQUIRY', 'PAY'].indexOf(data.command) >= 0;
77 const isHttpPost = isPostpaid;
78
79 const endpointUrl = isHttpPost ? data.reverse_url : urlConcatQs(data.reverse_url, params);
80
69 logger.info(`${MODULE_NAME} 8B6A4CEC: Sending to PARTNER`, { 81 logger.info(`${MODULE_NAME} 8B6A4CEC: Sending to PARTNER`, {
70 xid, 82 xid,
71 retry, 83 retry,
72 fullUrl, 84 isPostpaid,
85 isHttpPost,
86 endpointUrl,
73 }); 87 });
74 88
75 try { 89 try {
76 const response = await axios.get(data.reverse_url, { 90 const response = isHttpPost
77 params, 91 ? await axios.post(data.reverse_url, params, {
78 timeout: HTTP_TIMEOUT, 92 timeout: HTTP_TIMEOUT,
79 }); 93 headers: axiosHeaders,
94 })
95 : await axios.get(data.reverse_url, {
96 params,
97 timeout: HTTP_TIMEOUT,
98 headers: axiosHeaders,
99 });
80 100
81 logger.info(`${MODULE_NAME} 3641FBD7: Has been sent to PARTNER successfully`, { 101 logger.info(`${MODULE_NAME} 3641FBD7: Has been sent to PARTNER successfully`, {
82 xid, 102 xid,
83 retry, 103 retry,
84 httpStatus: response.status, 104 httpStatus: response.status,
85 responseBody: response && response.data, 105 responseBody: response && response.data,
86 }); 106 });
87 } catch (e) { 107 } catch (e) {
88 logger.warn(`${MODULE_NAME} A1EC9E70: Failed on sending to PARTNER`, { 108 logger.warn(`${MODULE_NAME} A1EC9E70: Failed on sending to PARTNER`, {
89 xid, 109 xid,
90 retry, 110 retry,
91 maxRetry: MAX_RETRY, 111 maxRetry: MAX_RETRY,
92 errCode: e.code, 112 errCode: e.code,
93 errMessage: e.message, 113 errMessage: e.message,
94 reverseUrl: data.reverse_url, 114 reverseUrl: data.reverse_url,
95 fullUrl, 115 endpointUrl,
96 httpStatus: e.response && e.response.status, 116 httpStatus: e.response && e.response.status,
97 responseBody: e.response && e.response.data, 117 responseBody: e.response && e.response.data,
98 }); 118 });
99 119
100 if ((retry || 0) < MAX_RETRY) { 120 if ((retry || 0) < MAX_RETRY) {
101 await sleep(SLEEP_BEFORE_RETRY_MS); 121 await sleep(SLEEP_BEFORE_RETRY_MS);
102 logger.verbose(`${MODULE_NAME} D8958695: Going to retry sending CORE-CALLBACK TO PARTNER`, { 122 logger.verbose(`${MODULE_NAME} D8958695: Going to retry sending CORE-CALLBACK TO PARTNER`, {
103 xid, sleepTime: SLEEP_BEFORE_RETRY_MS, 123 xid, sleepTime: SLEEP_BEFORE_RETRY_MS,
104 }); 124 });
105 sender(data, xid, (retry || 0) + 1); 125 sender(data, xid, (retry || 0) + 1);
106 } 126 }
107 } 127 }
108 }; 128 };
109 129
110 module.exports = sender; 130 module.exports = sender;
111 131