var url = require('url'); var math = require('mathjs'); var request = require('request'); var xml = require("xml2js").parseString; var config; var callbackReport; var max_retry = 3; var sleep_before_retry = 3000; process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; function topupRequest(task, retry) { if (config.globals.requests_count == undefined) { config.globals.requests_count = 1; } else { config.globals.requests_count++; } if (config.globals.active_requests_count == undefined) { config.globals.active_requests_count = 1; } else { config.globals.active_requests_count++; } if (config.globals.max_active_requests_count == undefined) { config.globals.max_active_requests_count = config.globals.active_requests_count; } else { config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count); } if (retry === undefined) { retry = max_retry; } var params = { userid: config.h2h_out.userid, pwd: config.h2h_out.password, memberreff: task['requestId'], produk: task['remoteProduct'], tujuan: task['destination'] }; console.log('PARAMS:'); console.log(params); request.post({url: config.h2h_out.partner, form: params}, function(err, httpResponse, httpResponseBody) { if (err) { console.log('HTTP Request Error (' + task['requestId'] + '): '); console.log(error); if (retry) { console.log('Retrying trx hit (' + retry + ')'); setTimeout(function() { topupRequest(task, retry - 1); }, sleep_before_retry); } else { callbackReport(task['requestId'], '54', 'Gangguan koneksi ke suplier'); } return; } console.log('Server Response: '); console.log(httpResponseBody); if (httpResponseBody.indexOf('502 Proxy Error') >= 0) { callbackReport(task['requestId'], '54', '502 Proxy error'); return; } xml(httpResponseBody, function(err, result) { if (err) { console.log('Gagal parsing XML respon server'); topupRequest(task, retry - 1); return; } console.log('Response Data:'); console.log(result); var response_code = result.respon.rc[0].replace(/^00/, ''); var token = ''; if (result.respon.token) { token = result.respon.token[0]; } var data_pelanggan = ''; if (result.respon.data) { data_pelanggan = result.respon.data[0].replace(/ /g, '-'); } var message = result.respon.pesan[0].replace(/\n/g, ' '); if (token && data_pelanggan) { var sn = token + '/' + data_pelanggan; message = 'SN=' + sn + '; ' + message; } callbackReport(task['requestId'], response_code, message); if (response_code == '68') { setTimeout(function() { topupRequest(task, 5); }, 60000); } }); }); } function start(_config, _callbackReport) { config = _config; callbackReport = _callbackReport } function parseSN(message) { var sn_regex = new RegExp(config.h2h_out.sn_pattern); var sn_match = message.match(sn_regex); //console.log('SN MATCH:'); //console.log(sn_match); if (sn_match <= 0) { console.log('SN Not found: ' + message); return ''; } var sn = sn_match[0]; var sn_remove_patterns = config.h2h_out.sn_remove_patterns.split(config.h2h_out.sn_remove_patterns_separator); //console.log('SN REMOVE PATTERNS:'); //console.log (sn_remove_patterns); var count = sn_remove_patterns.length; for(var i = 0; i < count; i++) { sn = sn.replace(sn_remove_patterns[i], ''); } return sn.trim(); } function parseResult(message) { var data; xml(message, function(err, result) { data = result; }); return data; } exports.start = start; exports.topupRequest = topupRequest; exports.parseResult = parseResult;