diff --git a/index.js b/index.js new file mode 100644 index 0000000..d32f084 --- /dev/null +++ b/index.js @@ -0,0 +1,26 @@ +var fs = require('fs'); +var ini = require('ini'); +var expresso = require('sate24-expresso'); +var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8')); + +process.chdir(__dirname); + +var logger = require('sate24/logger.js').start(); +var HttpServer = require('sate24/httpserver.js'); +var aaa = require('sate24/aaa.js'); +var partner = require('./partner-bayarkilat.js'); + +var matrix = aaa.prepareMatrix(); + +var options = { + 'aaa': aaa, + 'logger': logger, + 'config': config, + 'matrix': matrix, +} + +var httpServer = HttpServer.start(config, options); + +partner.start(config, aaa.callbackReport, options); +aaa.start(config, partner, options); +expresso.start(options); diff --git a/package.json b/package.json index 325c22a..e457ac1 100644 --- a/package.json +++ b/package.json @@ -18,5 +18,12 @@ "bayarkilat" ], "author": "Adhidarma Hadiwinoto <me@adhisimon.org>", - "license": "ISC" + "license": "ISC", + "dependencies": { + "sate24": "git+http://gitlab.kodesumber.com/reload97/node-sate24.git", + "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git" + }, + "devDependencies": { + "should": "^9.0.2" + } } diff --git a/partner-bayarkilat.js b/partner-bayarkilat.js new file mode 100644 index 0000000..56552de --- /dev/null +++ b/partner-bayarkilat.js @@ -0,0 +1,87 @@ +var request = require('request'); +var url = require('url'); +var winston = require('winston'); + +var config; +var aaa; +var callbackReport; +var logger; + +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)() + ] + }); + } +} + + +function topupRequest(task, retry) { + aaa.insertTaskToMongoDb(task); + + var partnerUrl = url.parse(config.h2h_out.partner); + var product = prepareRemoteProductCode(task.remoteProduct); + + var options = { + host: partnerUrl.hostname, + path: partnerUrl.pathname, + port: partnerUrl.port, + qs: { + request: 'PURCHASE*' + + task.requestId + '*' + + product.product + '*' + + product.productDetail + '*' + + task.destination + '*' + + task.nominal + '*' + + '0*' + + config.h2h_out.noid + '*' + + config.h2h_out.userid + '*' + + config.h2h_out.password + } + }; + + request(options, function(error, response, body) { + if (error) { + logger.warn('Error requesting to partner', {error: error}); + callbackReport(task.requestId, '68', 'Error requesting to partner. ' + error); + return; + } + + if (response.statusCode != 200) { + var message = 'Partner response with http status code other that 200 (' + response.statusCode +')'; + + logger.warn(message); + callbackReport(task.requestId, '68', message); + return; + } + + callbackReport(task.requestId, '68', body); + }); +} + +function prepareRemoteProductCode(remoteProduct) { + var product = remoteProduct.split(','); + + if (product.length != 3) { + return; + } + + return { + product: product[0], + productDetail: product[1], + nominal: product[2] + } +} + +exports.prepareRemoteProductCode = prepareRemoteProductCode; diff --git a/test.js b/test.js new file mode 100644 index 0000000..98bfb09 --- /dev/null +++ b/test.js @@ -0,0 +1,15 @@ +var should = require('should'); +var partner = require('./partner-bayarkilat'); + +describe('#partner-bayarkilat', function() { + + describe('#prepareRemoteProductCode', function() { + product = partner.prepareRemoteProductCode('PULSA,TELKOMSEL10,10000'); + + it('should return correct object', function() { + product.product.should.equal('PULSA'); + product.productDetail.should.equal('TELKOMSEL10'); + product.nominal.should.equal('10000'); + }); + }); +});