From 05d016dd09546d33ca52b7befb3153ed032ba152 Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <adhisimon@gmail.com>
Date: Mon, 31 May 2021 15:14:15 +0700
Subject: [PATCH] CALLBACK-SENDER: using POST on postpaid callback

---
 lib/core-callback/sender.js | 34 +++++++++++++++++++++++++++-------
 1 file changed, 27 insertions(+), 7 deletions(-)

diff --git a/lib/core-callback/sender.js b/lib/core-callback/sender.js
index 0a0e3d6..ff3fa0a 100644
--- a/lib/core-callback/sender.js
+++ b/lib/core-callback/sender.js
@@ -22,6 +22,11 @@ logger.verbose(`${MODULE_NAME} 848B9104: Initialized`, {
     MAX_RETRY,
 });
 
+const axiosHeaders = {
+    'Content-Type': 'application/json',
+    'User-Agent': 'KOMODO-HTTPGETX callback sender',
+};
+
 const sleep = require('../sleep');
 const urlConcatQs = require('../url-concat-qs');
 
@@ -38,11 +43,14 @@ const sender = async (data, xid, retry) => {
     const params = {
         httpgetx_xid: xid,
         command: data.command,
+
         request_id: data.request_id && data.request_id.toString(),
         transaction_id: data.transaction_id && data.transaction_id.toString(),
         transaction_date: data.transaction_date,
+
         store_name: data.store_name,
         terminal_name: data.terminal_name,
+
         product_name: data.product_name,
         destination: data.destination,
 
@@ -65,18 +73,30 @@ const sender = async (data, xid, retry) => {
         params.amount_to_charge = data.amount_to_charge;
     }
 
-    const fullUrl = urlConcatQs(data.reverse_url, params);
+    const isPostpaid = ['INQUIRY', 'PAY'].indexOf(data.command) >= 0;
+    const isHttpPost = isPostpaid;
+
+    const endpointUrl = isHttpPost ? data.reverse_url : urlConcatQs(data.reverse_url, params);
+
     logger.info(`${MODULE_NAME} 8B6A4CEC: Sending to PARTNER`, {
         xid,
         retry,
-        fullUrl,
+        isPostpaid,
+        isHttpPost,
+        endpointUrl,
     });
 
     try {
-        const response = await axios.get(data.reverse_url, {
-            params,
-            timeout: HTTP_TIMEOUT,
-        });
+        const response = isHttpPost
+            ? await axios.post(data.reverse_url, params, {
+                timeout: HTTP_TIMEOUT,
+                headers: axiosHeaders,
+            })
+            : await axios.get(data.reverse_url, {
+                params,
+                timeout: HTTP_TIMEOUT,
+                headers: axiosHeaders,
+            });
 
         logger.info(`${MODULE_NAME} 3641FBD7: Has been sent to PARTNER successfully`, {
             xid,
@@ -92,7 +112,7 @@ const sender = async (data, xid, retry) => {
             errCode: e.code,
             errMessage: e.message,
             reverseUrl: data.reverse_url,
-            fullUrl,
+            endpointUrl,
             httpStatus: e.response && e.response.status,
             responseBody: e.response && e.response.data,
         });
-- 
1.9.0