diff --git a/package.json b/package.json index bcd8eef..9e68a2f 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "dependencies": { "easysoap": "^1.0.5", "ini": "^1.3.4", + "moment": "^2.13.0", "sate24": "git+http://gitlab.kodesumber.com/reload97/node-sate24.git", "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git", "soap": "^0.15.0", diff --git a/partner-kospinjasa.js b/partner-kospinjasa.js index e3c5ff4..7fcc020 100644 --- a/partner-kospinjasa.js +++ b/partner-kospinjasa.js @@ -6,6 +6,8 @@ var fs = require("fs"); var whiskers = require("whiskers"); var http = require("http"); var url = require("url"); +var mongoClient = require('mongodb').MongoClient; +var moment = require('moment'); process.chdir(__dirname); var soapTemplate = fs.readFileSync("message.xml"); @@ -18,6 +20,7 @@ var callbackReport; var aaa; var logger; var options; +var mongodb; function start(_config, _callbackReport, options) { config = _config; @@ -36,9 +39,89 @@ function start(_config, _callbackReport, options) { ] }); } + + initMongoClient(); +} + +function initMongoClient() { + if (!config || !config.mongodb || !config.mongodb.url) { + return; + } + + try { + var url = config.mongodb.url; + + mongoClient.connect(url, function(err, db) { + if (err) { + logger.warn('Failed to connect to mongodb', {err: err}); + return; + } + mongodb = db; + logger.info('MongoDB connected'); + }); + } + catch(err) { + logger.warn('Exception when connecting to mongodb', {err: err, url: url}); + } +} + +function insertTaskToMongoDb(task) { + if (!isMongoReady()) { return; } + + task.supplier = config.globals.gateway_name; + task.rc = '68'; + + try { + mongodb.collection(config.mongodb.collection).insertOne(task); + } + catch(err) { + //logger.warn('Exception when inserting document to mongodb', {err: err, task: task}); + } +} + +function pushResponseToMongoDb(task, response, rc) { + if (!isMongoReady()) { return; } + + try { + mongodb.collection(config.mongodb.collection).updateOne( + {requestId: task.requestId}, + { + $set: { + lastResponse: response, + supplier: config.globals.gateway_name, + rc: rc + }, + $push: { + responses: response + } + }, + function(err, result) { + if (err) { + logger.warn('Error when pushing response to mongodb', {err: err, task: task, response: response}); + return; + } + } + ); + } + catch(err) { + logger.warn('Exception when pushing response to mongodb', {err: err, task: task, response: response}); + } +} + +function isMongoReady() { + if (!config.mongodb) { return; } + if (!config.mongodb.collection) { return; } + if (!mongodb) { return; } + + return true; } function topupRequest(task, retry) { + task.ts = moment(task.timestamp, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss'); + task.ts_date = moment(task.timestamp, 'YYYYMMDDHHmmss').format('YYYY-MM-DD'); + + insertTaskToMongoDb(task); + saldoCheck(billpayment, task); } @@ -58,8 +141,13 @@ function saldoCheck(callback, task) { soap.createClient(config.h2h_out.partner, function(err, soapClient) { if (err) { - logger.warn('Error creating soap client for saldoCheck', {err: err}); - callbackReport(task.requestId, '40', 'Error creating soap client for saldoCheck: ' + err); + + var errorMessage = 'Error creating soap client for saldoCheck: ' + err; + + logger.warn(errorMessage, {err: err}); + callbackReport(task.requestId, '40', errorMessage); + pushResponseToMongoDb(task, {ts: ts, supplier: config.globals.gateway_name, raw: errorMessage}, '40'); + return; } @@ -77,8 +165,11 @@ function saldoCheck(callback, task) { ); if (err) { - logger.warn('Error requesting saldoCheck', {err: err}); - callbackReport(task.requestId, '40', 'Gagal check saldo'); + var errorMessage = 'Error requesting saldoCheck: ' + err; + + logger.warn(errorMessage, {err: err}); + callbackReport(task.requestId, '40', errorMessage); + pushResponseToMongoDb(task, {ts: ts, supplier: config.globals.gateway_name, raw: errorMessage}, '40'); } var balance; @@ -147,17 +238,21 @@ function billpayment(task, balance) { ); if (err) { - logger.warn('Error requesting service', {err: err}); - callbackReport(task.requestId, '68', 'something wrong'); + var errorMessage = 'Error requesting service: ' + err; + + logger.warn(errorMessage, {err: err}); + callbackReport(task.requestId, '68', errorMessage); + pushResponseToMongoDb(task, {ts: ts, supplier: config.globals.gateway_name, raw: soapClient.lastResponse, parsed: result}, '68'); + return; } - topupResponseHandler(task, result, balance); + topupResponseHandler(task, result, balance, soapClient.lastResponse); }); }); } -function topupResponseHandler(task, response, balance) { +function topupResponseHandler(task, response, balance, rawResponse) { var st24rc = '68'; var st24message = response.outputParameter.resultDesc.$value; @@ -293,6 +388,7 @@ function topupResponseHandler(task, response, balance) { logger.info('Got result: ' + message, {response: response}); callbackReport(task.requestId, st24rc, st24message + ' -- Prev Balance: ' + balance); + pushResponseToMongoDb(task, {ts: ts, supplier: config.globals.gateway_name, raw: rawResponse, parsed: response}, st24rc); } function createSignature(params, password) {