From 9e047c12240b1d93d5e075b4dae92f7fa17e6cc5 Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <gua@adhisimon.org>
Date: Fri, 20 May 2016 15:42:48 +0700
Subject: [PATCH] saldoCheck

---
 partner-kospinjasa.js | 79 +++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 58 insertions(+), 21 deletions(-)

diff --git a/partner-kospinjasa.js b/partner-kospinjasa.js
index 7e92e8a..215bdbc 100644
--- a/partner-kospinjasa.js
+++ b/partner-kospinjasa.js
@@ -39,10 +39,52 @@ function start(_config, _callbackReport, options) {
 }
 
 function topupRequest(task, retry) {
-    if (retry === undefined) {
-        retry = max_retry;
+    saldoCheck(billpayment, task);
+}
+
+function saldoCheck(callback, task) {
+
+    var params = {
+        userName: config.h2h_out.userid,
+        productCode: '00000' ,
+        terminal: 'H2HIPN10',
+        transactionType: '61',
+        reff: Math.random() * 99999999;
+        timeStamp: strftime('%Y-%m-%d %H:%M:%S', new Date())
     }
 
+    params.signature = createSignatureForSaldoCheck(params, config.h2h_out.password);
+
+    logger.info('Requesting to service', {url: config.h2h_out.partner, params: params});
+    soapClient.apih2h.apih2hPort.saldoCheck({ inputSaldo: params }, function(err, result) {
+
+        logger.verbose(
+            'Got saldoCheck response',
+            {
+                lastEndpoint: soapClient.lastEndpoint,
+                lastRequest: soapClient.lastRequest,
+                lastMessage: soapClient.lastMessage,
+                lastResponse: soapClient.lastResponse,
+            }
+        );
+
+        if (err) {
+            logger.warn('Error requesting saldoCheck', {err: err});
+        }
+
+        var balance;
+        logger.verbose('saldoCheck result', {result});
+
+
+        if (task) {}
+            callback(task, balance);
+        }
+    });
+
+}
+
+function billpayment(task, balance) {
+
     var remoteProduct = task.remoteProduct.split(',');
     var params = {
         userName: config.h2h_out.userid,
@@ -59,12 +101,6 @@ function topupRequest(task, retry) {
     var signature = createSignature(params, config.h2h_out.password);
     params.signature = signature;
 
-    //topupRequestSoapDIY(task, params, retry);
-    topupRequestSoap(task, params, retry);
-}
-
-function topupRequestSoap(task, params, retry) {
-
     soap.createClient(config.h2h_out.partner, function(err, soapClient) {
 
         var _params = {
@@ -240,19 +276,6 @@ function topupResponseHandler(task, response) {
     callbackReport(task.requestId, st24rc, st24message);
 }
 
-function topupRequestRetry(task) {
-    task.retry--;
-
-    if (task.retry > 0) {
-        logger.info('Retrying in ' +  sleepBeforeRetry + 's');
-        setTimeout(topupRequest, sleepBeforeRetry * 1000, task, task.retry);
-    }
-    else {
-        logger.warn('Maximum retry for pending status exceeded', {task: task});
-    }
-}
-
-
 function createSignature(params, password) {
     var passwordHash = crypto.createHash('sha256').update(password).digest().toString('hex');
     var plain =
@@ -269,6 +292,20 @@ function createSignature(params, password) {
     return crypto.createHash('sha1').update(plain).digest().toString('hex');
 }
 
+function createSignatureForSaldoCheck(params, password) {
+    var passwordHash = crypto.createHash('sha256').update(password).digest().toString('hex');
+    var plain =
+        params.userName
+        + passwordHash
+        + params.productCode
+        + params.terminal
+        + params.transactionType
+        + params.reff
+        + params.timeStamp;
+
+    return crypto.createHash('sha1').update(plain).digest().toString('hex');
+}
+
 function createBillNumber(destination) {
     return ("0000000000000" + destination).slice(-13);
 }
-- 
1.9.0