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;