From bb3e05947bedeefec5551c0fd0141af35b9f3097 Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <gua@adhisimon.org>
Date: Mon, 9 May 2016 20:16:15 +0700
Subject: [PATCH] siap dicoba

---
 logs/empty     |   0
 package.json   |  31 ++++++++++++
 partner-irs.js | 148 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 179 insertions(+)
 create mode 100644 logs/empty
 create mode 100644 package.json
 create mode 100644 partner-irs.js

diff --git a/logs/empty b/logs/empty
new file mode 100644
index 0000000..e69de29
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..cb9e37c
--- /dev/null
+++ b/package.json
@@ -0,0 +1,31 @@
+{
+  "name": "sate24-to-irs",
+  "version": "1.0.0",
+  "description": "ST25 to IRS",
+  "main": "index.js",
+  "scripts": {
+    "test": "mocha"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git@gitlab.kodesumber.com:reload97/sate24-to-irs.git"
+  },
+  "keywords": [
+    "st24",
+    "ppob",
+    "irs",
+    "reload97",
+    "r97"
+  ],
+  "author": "Adhidarma Hadiwinoto <me@adhisimon.org>",
+  "license": "ISC",
+  "dependencies": {
+    "ini": "^1.3.4",
+    "request": "^2.72.0",
+    "sate24": "git+http://gitlab.kodesumber.com/reload97/node-sate24.git",
+    "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git",
+    "url": "^0.11.0",
+    "winston": "^2.2.0",
+    "xmlrpc": "^1.3.1"
+  }
+}
diff --git a/partner-irs.js b/partner-irs.js
new file mode 100644
index 0000000..48f121e
--- /dev/null
+++ b/partner-irs.js
@@ -0,0 +1,148 @@
+var winston = require('winston');
+var request = require('request');
+var xmlrpc = require('xmlrpc');
+var url = require('url');
+
+var max_retry = 3;
+var sleep_before_retry = 2000;
+
+process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
+
+var config;
+var callbackReport;
+var aaa;
+var logger;
+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 {
+        logger = new winston.Logger({
+            transports: [
+              new (winston.transports.Console)()
+            ]
+        });
+    }
+    
+    createHttpReportServer();
+}
+
+function createHttpReportServer() {
+    var httpServer = http.createServer(function(request, response) {
+        var qs = url.parse(request.url, true).query;
+        var path = url.parse(request.url).pathname;
+        
+        logger.info('Got reverse report from partner', {path: path, qs: qs});
+        response.end('OK');
+        
+        /*
+        var  trxid;
+        try {
+            trxid = qs.transid;
+        }
+        catch(err) {
+        }
+        
+        if (trxid) {
+            logger.info('Requesting advice from webreport', {trxid: trxid})
+            cekstatus.advice({trxid: trxid}, callbackFromWebReport);
+        }
+        */
+        
+    });
+    
+    httpServer.listen(config.h2h_out.listen_port, function() {
+        logger.info('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port);
+    });
+}
+
+function topupRequestHttpGet(task, retry) {
+    
+    var options = {
+        method: 'GET',
+        url: config.h2h_out.partner,
+        qs: {
+            id: config.h2h_out.userid,
+            pin: config.h2h_out.pin,
+            user: config.h2h_out.user,
+            pass: config.h2h_put.password,
+            kodeproduk: task.remoteProduct,
+            tujuan: task.destination,
+            idtrx: task.requestId
+        }
+    }
+    
+    request(options, function(err, res, body) {
+    });
+}
+
+function topupRequestXMLRPC(task, retry) {
+    var partnerUrl = url.parse(config.h2h_out.partner);
+    var clientOptions = {
+        host: partnerUrl.hostname
+        , port: partnerUrl.port
+        , path: partnerUrl.pathname
+    };
+    logger.info('Preparing XMLRPC client options', {options: clientOptions});
+
+    var client;
+    if (partnerUrl.protocol == 'https:') {
+        client = xmlrpc.createSecureClient(clientOptions);
+    } else {
+        client = xmlrpc.createClient(clientOptions);
+    }
+    
+    var params = {
+        MSISDN: config.h2h_out.userid,
+        REQUESTID: task.requestId,
+        PIN: config.h2h_out.password,
+        NOHP: task.destination,
+        NOM: task.remoteProduct
+    };
+    
+    var methodName = 'topUpRequest';
+    logger.info('Preparing XMLRPC client method', {methodname: methodName, params: params});
+    
+    client.methodCall(methodName, [ params ], function (error, value) {
+        // Results of the method response
+        if (error) {
+            
+            logger.warn('XMLRPC Client Error', {requestId: task['requestId'], errorMessage: error});
+            
+            if (retry) {
+                
+                logger.info('Retrying topUpRequest (' + retry + ')');
+                setTimeout(function() {
+                    topupRequest(task, retry - 1);
+                }, sleep_before_retry);
+                
+            } else {
+                callbackReport(task['requestId'], '91', 'Gangguan koneksi ke suplier: ' + error);
+            }
+            return;
+        }
+        
+        logger.info('Got XMLRPC response from partner for', {response_method: methodName, response_message: value});
+        
+        if (value['RESPONSECODE'] == '00' && config.h2h_out.parse_sn == 'YES') {
+            value['MESSAGE'] = 'SN=' + parseSN(value['MESSAGE']) + '; ' + value['MESSAGE'];
+        }
+        
+        callbackReport(value['REQUESTID'], value['RESPONSECODE'], value['MESSAGE']);
+    });
+}
+
+function topupRequest(task, retry) {
+    topupRequestXMLRPC(task, retry);
+}
+
+exports.start = start;
+exports.topupRequest = topupRequest;
-- 
1.9.0