diff --git a/package.json b/package.json index 86151e4..febe5e3 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "sate24": "git+http://git@gitlab.kodesumber.com/reload97/node-sate24.git", "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git", "xmlrpc": "~1.3.1", - "winston": "~2.1.1" + "winston": "~2.1.1", + "xml2js": "~0.4.15" } } diff --git a/vre.js b/vre.js index 9112e73..dd68dd5 100644 --- a/vre.js +++ b/vre.js @@ -1,4 +1,5 @@ var xmlrpc = require('xmlrpc'); +var xmlParser = require("xml2js").parseString; var config; var callbackReport; @@ -26,4 +27,47 @@ function start(_config, _callbackReport, options) { createServer(); } +function createServer() { + var httpServer = http.createServer(onReverseReport).listen(config.h2h_out.listen_port, function() { + logger.info('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port); + }); +} + +function onReverseReport(http_request, http_response) { + xmlParser(http_request, function(err, data) { + + if (err) { + logger.warn('Can not parse XML request', {http_request: http_request}); + http_response('Something wrong'); + return; + } + + var message; + var trx_id; + + try { + message = data.reporth2h.msg.join().trim(); + trx_id = data.reporth2h.msg.join().trim(); + } + catch(missingFieldError) { + logger.warn('Missing field on xml report', {http_request: http_request, error: missingFieldError}); + http_response('Something wrong'); + return; + } + + var trx_status = '68'; + + if (message.indexOf('Sukses') >= 0) { + trx_status = '00'; + } + else if (message.indexOf('Gagal') >= 0) { + trx_status = '40'; + } + + callbackReport(trx_id, trx_status, message); + }); +} + + + exports.start = start;