var request = require('request'); var strftime = require('strftime'); var max_retry = 10; var sleep_before_retry = 3000; var config; var partner; var available_products = []; function unaliasResponseCode(response_code, config_responsecode_alias) { if (config_responsecode_alias == undefined && config && config.h2h_out && config.h2h_out.responsecode_alias) { config_responsecode_alias = config.h2h_out.responsecode_alias; } if (!config_responsecode_alias) { return response_code; } items = config_responsecode_alias.split(','); items_count = items.length; for (var i=0; i < items_count; i++) { codes = items[i].split(':'); if (codes.length <= 0) { continue; } if (response_code == codes[0]) { console.log('Change response code from ' + codes[0] + ' to ' + codes[1]); return codes[1]; } } return response_code; } function pullCity() { var url = config.globals.aaa_host + '/pull_city'; console.log('Pull cities from AAA - ' + url); request(url, function (error, response, body) { if (!error && response.statusCode == 200) { //console.log('city=' + body); } else { console.log('Error in pull city'); } }); } function pullProduct() { var url = config.globals.aaa_host + '/pull_product?opr_name=' + config.globals.operators; console.log('Pull products from AAA - ' + url); request(url, function (error, response, body) { if (error || response.statusCode != 200) { console.log('Error in pull products'); return; } var productsAndOperators = body.split(';'); var productsCount = productsAndOperators.length; for (var i=0; i < productsCount; i++) { var product = productsAndOperators[i].split(',', 1)[0]; available_products.push(product); } //console.log(available_products); }); } function pull() { var url = config.globals.aaa_host + '/pull?city=ALL&nom=' + config.globals.products + '&chip_info=' + config.globals.gateway_name; //console.log('AAA PULL - ' + url); request(url, function (error, response, body) { if (!error && response.statusCode == 200) { if (body == 'NONE') { return; } console.log(body); var result = body.split(';'); if (result[0] != 'OK') { return; } var task = []; task['requestId'] = result[1]; task['timestamp'] = result[3]; task['destination'] = result[4]; task['product'] = result[7]; if (config.products[task['product']] !== undefined) { task['remoteProduct'] = config.products[task['product']]; } else { task['remoteProduct'] = task['product']; } partner.topupRequest(task); } else { console.log('Error in pull task'); return; } }); } function pullLoop() { if (!config.globals.pause) { pull(); } setTimeout(pullLoop, config.globals.interval); } function callbackReport(requestId, responseCode, message, retry) { if (retry === undefined) { retry = max_retry; } responseCode = unaliasResponseCode(responseCode); timestamp = strftime('%Y%m%d%H%M%S'); var url = config.globals.aaa_host + '/topup?trans_id=' + requestId + '&trans_date' + timestamp + '&trans_date=' + timestamp + '&resp_code=' + responseCode + '&ussd_msg=' + config.globals.gateway_name + '$' + encodeURIComponent(message); console.log('Report to AAA - ' + url); request(url, function (error, response, body) { if (error || response.statusCode != 200) { console.log('Error report to AAA'); if (retry) { console.log('Retrying to report to AAA (' + retry + ')'); callbackReport(requestId, responseCode, message, retry - 1); } } }); } function start(_config, _partner) { config = _config; partner = _partner; pullCity(); pullProduct(); setTimeout(pullLoop, 10 * 1000); } exports.start = start; exports.callbackReport = callbackReport; exports.unaliasResponseCode = unaliasResponseCode;