httppulsakita.js 3.74 KB
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 (error) {
            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);
        
        xml(httpResponseBody, function(err, result) {
            if (err) {
                console.log('Gagal parsing XML respon server');
                topupRequest(task, retry - 1);
                return;
            } 
            
            var response_code = result.respon.rc.replace(/^00/, '');
            var token = result.respon.token;
            var data = result.respon.data.replace(/ /g, '-');
            var sn = token + '/' + data;
            
            var message = result.respon.pesan.replace(/\n/g, ' ');
            message = 'SN=' + sn + '; ' + message;
            
            callbackReport(task['requestId'], response_code, message);
            
        });
    });
}

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;