Commit 05d016dd09546d33ca52b7befb3153ed032ba152
1 parent
93ea90c3e7
Exists in
master
and in
1 other branch
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 |