var winston = require('winston'); var request = require('request'); var xmlrpc = require('xmlrpc'); var url = require('url'); var http = require('http'); 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'], '68', 'Silahkan resend. 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']; } if (value['RESPONSECODE'] != '00') { value['RESPONSECODE'] = '40'; } callbackReport(value['REQUESTID'], value['RESPONSECODE'], value['MESSAGE']); }); } function topupRequest(task, retry) { topupRequestXMLRPC(task, retry); } exports.start = start; exports.topupRequest = topupRequest;