diff --git a/partner-irs.js b/partner-irs.js index 008dcdb..26e7064 100644 --- a/partner-irs.js +++ b/partner-irs.js @@ -22,11 +22,11 @@ var mongodb; function start(_config, _callbackReport, options) { config = _config; callbackReport = _callbackReport - + if (options && options.aaa) { aaa = options.aaa; } - + if (options && options.logger) { logger = options.logger; } else { @@ -36,7 +36,7 @@ function start(_config, _callbackReport, options) { ] }); } - + createXMLRPCServer(); initMongoClient(); } @@ -55,25 +55,26 @@ function createXMLRPCServer() { }); server.on('topUpReport', function (err, params, callback) { - + logger.info('Got XMLRPC topUpReport request from partner', {xmlrpc_method: 'topUpReport', xmlrpc_params: params}); - + var paramscount = params.length; for (var i = 0; i < paramscount; i++) { var value = params[i]; - + var responseTs = strftime('%Y-%m-%d %H:%M:%S', new Date()); var dummyTask = { requestId: value.REQUESTID }; - pushResponseToMongoDb(dummyTask, {ts: responseTs, supplier: config.globals.gateway_name, raw: JSON.stringify(value), parsed: value}); - + if (value['RESPONSECODE'] == '00' && config.h2h_out.parse_sn == 'YES') { value['MESSAGE'] = 'SN=' + parseSN(value['MESSAGE']) + '; ' + value['MESSAGE']; } - + if (value['RESPONSECODE'] != '00' && value['RESPONSECODE'] != '68') { value['RESPONSECODE'] = '40'; } - + + pushResponseToMongoDb(dummyTask, {ts: responseTs, supplier: config.globals.gateway_name, raw: JSON.stringify(value), parsed: value}, value['RESPONSECODE']); + callbackReport(value['REQUESTID'], value['RESPONSECODE'], value['MESSAGE']); } @@ -82,7 +83,7 @@ function createXMLRPCServer() { } function topupRequestHttpGet(task, retry) { - + var options = { method: 'GET', url: config.h2h_out.partner, @@ -96,7 +97,7 @@ function topupRequestHttpGet(task, retry) { idtrx: task.requestId } } - + request(options, function(err, res, body) { }); } @@ -116,7 +117,7 @@ function topupRequestXMLRPC(task, retry) { } else { client = xmlrpc.createClient(clientOptions); } - + var params = { MSISDN: config.h2h_out.userid, REQUESTID: task.requestId, @@ -124,42 +125,43 @@ function topupRequestXMLRPC(task, retry) { 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) { + + 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'], '68', 'Silahkan resend. Gangguan koneksi ke suplier: ' + error); } return; } - + logger.info('Got XMLRPC response from partner for', {response_method: methodName, response_message: value}); - + var responseTs = strftime('%Y-%m-%d %H:%M:%S', new Date()); - pushResponseToMongoDb(task, {ts: responseTs, supplier: config.globals.gateway_name, raw: JSON.stringify(value), parsed: value}); - + if (value['RESPONSECODE'] == '00' && config.h2h_out.parse_sn == 'YES') { value['MESSAGE'] = 'SN=' + parseSN(value['MESSAGE']) + '; ' + value['MESSAGE']; } - + if (value['RESPONSECODE'] != '00' && value['RESPONSECODE'] != '68') { value['RESPONSECODE'] = '40'; } - + + pushResponseToMongoDb(task, {ts: responseTs, supplier: config.globals.gateway_name, raw: JSON.stringify(value), parsed: value}, value['RESPONSECODE']); + callbackReport(value['REQUESTID'], value['RESPONSECODE'], value['MESSAGE']); }); } @@ -168,10 +170,10 @@ function topupRequest(task, retry) { if (retry === undefined) { 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); } - + topupRequestXMLRPC(task, retry); } @@ -179,10 +181,10 @@ function initMongoClient() { if (!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}); @@ -194,22 +196,22 @@ function initMongoClient() { } catch(err) { logger.warn('Exception when connecting to mongodb', {err: err, url: url}); - } + } } function isMongoReady() { if (!config.mongodb) { return; } if (!config.mongodb.collection) { return; } if (!mongodb) { return; } - + return true; } function insertTaskToMongoDb(task) { if (!isMongoReady()) { return; } - + task.supplier = config.globals.gateway_name; - + try { mongodb.collection(config.mongodb.collection).insertOne(task); } @@ -218,16 +220,17 @@ function insertTaskToMongoDb(task) { } } -function pushResponseToMongoDb(task, response) { +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 + supplier: config.globals.gateway_name, + rc: rc }, $push: { responses: response