From a12a4d7452caa074de4e9f0d26f04cbbccda2361 Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <gua@adhisimon.org>
Date: Wed, 22 Jul 2015 17:47:39 +0700
Subject: [PATCH] merge direct dan undirect response

---
 partner-datacell.js | 57 +++++++++++++++++++++++++++++++----------------------
 1 file changed, 33 insertions(+), 24 deletions(-)

diff --git a/partner-datacell.js b/partner-datacell.js
index 5dfdb40..cc1d76c 100644
--- a/partner-datacell.js
+++ b/partner-datacell.js
@@ -85,26 +85,8 @@ function topupRequest(task, retry) {
         console.log('Status code: ' + res.statusCode );
         var buffer = "";
         res.on( "data", function( data ) { buffer = buffer + data; } );
-        res.on( "end", function( data ) { 
-            
-            xml2js(buffer, function (err, result) {
-                if (err) {
-                    console.log(buffer);
-                    callbackReport(task['requestId'], '40', buffer);
-                    return;
-                }
-                
-                console.log(result);
-                
-                var response_code = '68';
-                var message = result.datacell.message[0].trim();
-                if (result.datacell.resultcode[0] == '999') {
-                    response_code = '40';
-                }
-                
-                callbackReport(task['requestId'], response_code, message);
-            });
-            
+        res.on( "end", function( data ) {             
+                topupResponseHandler(data);
         });
 
     });
@@ -117,12 +99,37 @@ function topupRequest(task, retry) {
     req.end();
 }
 
+function topupResponseHandler(body, request_id) {
+    xml2js(body, function (err, result) {
+        if (err) {
+            console.log(body);
+            callbackReport(request_id, '40', buffer);
+            return;
+        }
+        
+        console.log(result);
+        
+        request_id = result.datacell.ref_trxid[0].trim():
+        
+        var response_code = '68';
+        var message = result.datacell.message[0].trim();
+        
+        if (result.datacell.resultcode[0] == '999') {
+            response_code = '40';
+            
+            if (message.indexOf('Nomor tujuan salah') >= 0) {
+                response_code = '14';
+            }
+        }
+        
+        callbackReport(request_id, response_code, message);
+    });
+}
+
 function createServer() {
 
     var httpServer = http.createServer(function(req, res) {
-        console.log('Got request from partner, url: ' + req.url);
-        //console.log('REQ:');
-        //console.log(req);
+        console.log('Got request from partner ("' + req.url + '")');
         
         var body = "";
         req.on('data', function (chunk) {
@@ -130,9 +137,11 @@ function createServer() {
         });
         
         req.on('end', function () {
-            console.log('POSTed: ' + body);
             res.writeHead(200);
             res.end('OK');
+            
+            console.log(body);
+            topupResponseHandler(body);
         });
     });
     
-- 
1.9.0