From bf636f78efdc5e8e04d06342d2e1b0d678f88a03 Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <gua@adhisimon.org>
Date: Wed, 18 May 2016 10:47:20 +0700
Subject: [PATCH] penanganan trx gagal

---
 partner-trustlink.js | 55 ++++++++++++++++++++++++++++++----------------------
 1 file changed, 32 insertions(+), 23 deletions(-)

diff --git a/partner-trustlink.js b/partner-trustlink.js
index 32c8ba6..67a7b74 100644
--- a/partner-trustlink.js
+++ b/partner-trustlink.js
@@ -19,11 +19,11 @@ var options;
 function start(_config, _callbackReport, options) {
     config = _config;
     callbackReport = _callbackReport
-    
+
     if (options && options.aaa) {
             aaa = options.aaa;
     }
-    
+
     if (options && options.logger) {
         logger = options.logger;
     } else {
@@ -33,7 +33,7 @@ function start(_config, _callbackReport, options) {
             ]
         });
     }
-    
+
     createReverseReportServer();
 }
 
@@ -45,7 +45,7 @@ function createReverseReportServer() {
 
 function onReverseReport(req, res) {
     res.end('OK');
-        
+
     var qs = url.parse(req.url, true).query;
     logger.info('Reverse Report', {qs: qs});
 }
@@ -53,15 +53,15 @@ function onReverseReport(req, res) {
 function calculateSignature(ts, destination, password) {
     var a = ts + destination.substr(destination.length - 4);
     var b = destination.substr(destination.length - 4).split('').reverse().join('') + password;
-    
+
     return xor.encode(a,b);
 }
 
 function createXmlPayload(task, userid, password) {
     var ts = strftime('%H%M%S', new Date());
-    
+
     var signature = calculateSignature(ts, task.destination, password);
-    
+
     var payload = {
         evoucher: [
             {command: 'TOPUP'},
@@ -74,11 +74,11 @@ function createXmlPayload(task, userid, password) {
             {trxke: 1},
         ]
     };
-    
+
     if (logger) {
         logger.verbose('Generate xml payload', {payload: payload});
     }
-    
+
     return "<?xml version=\"1.0\" ?>\n" + xml(payload);
 }
 
@@ -86,11 +86,11 @@ function topupRequest(task, retry) {
     if (retry === undefined) {
         retry = max_retry;
     }
-    
+
     var payload = createXmlPayload(task, config.h2h_out.userid, config.h2h_out.password);
-    
+
     var partner = url.parse(config.h2h_out.partner);
-    
+
     var request_options = {
         host: partner.hostname,
         path: partner.path,
@@ -101,17 +101,17 @@ function topupRequest(task, retry) {
             'Content-Length': Buffer.byteLength(payload)
         }
     };
-    
+
     var buffer = "";
-    
+
     logger.info('Requesting to partner', {request_options: request_options});
-    
+
     var req = http.request(request_options, function( res )    {
 
         logger.verbose('Status code: ' + res.statusCode );
         var buffer = "";
         res.on( "data", function( data ) { buffer = buffer + data; } );
-        res.on( "end", function( data ) {             
+        res.on( "end", function( data ) {
             logger.verbose('Got direct response from partner', {resp: buffer});
             directResponseHandler(buffer, task);
         });
@@ -139,21 +139,30 @@ function directResponseHandler(body, task) {
             callbackReport(request_id, '68', buffer);
             return;
         }
-        
+
         logger.info('Direct response parsed', {result: result});
-        
+
         var response_code = '68';
-        
+
         var request_id = task.requestId;
         var status = result.evoucher.result[0].trim();
         var message = result.evoucher.value[0].string[0].trim();
-        
+
         if (status == '0') {
-            response_code = '00';
+            if (message.indexOf('SUKSES') >= 0) {
+                response_code = '00';
+            }
+            else if (message.indexOf('GAGAL') >= 0) {
+                response_code = '40';
+            }
+            else {
+                response_code = '68';
+            }
+
         }
         else if (status == "-1") {
             response_code = '40';
-            
+
             /*
             var new_response_code = responseCodeFromMessage(message);
             if (new_response_code) {
@@ -164,7 +173,7 @@ function directResponseHandler(body, task) {
         } else {
             response_code = '68';
         }
-        
+
         callbackReport(request_id, response_code, message);
     });
 }
-- 
1.9.0