xmlout.js 3.74 KB
var xmlrpc = require('xmlrpc');
var url = require('url');
var config;
var callbackReport;

process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

function topupRequest(task) {

    var partnerUrl = url.parse(config.h2h_out.partner);
    var clientOptions = {
        host: partnerUrl.hostname
        , port: partnerUrl.port
        , path: partnerUrl.pathname
    };
    console.log('XMLRPC client options:');
    console.log(clientOptions);

    var client;
    if (partnerUrl.protocol == 'https:') {
        console.log('Use SSL');
        client = xmlrpc.createSecureClient(clientOptions);
    } else {
        console.log('Not using SSL');
        client = xmlrpc.createClient(clientOptions);
    }

    var methodName = 'topUpRequest';
    console.log('methodName: ' + methodName);

    var params = {
        MSISDN: config.h2h_out.userid,
        REQUESTID: task['requestId'],
        PIN: config.h2h_out.password,
        NOHP: task['destination'],
        NOM: task['remoteProduct']
    };
    console.log('PARAMS:');
    console.log(params);


    client.methodCall(methodName, [ params ], function (error, value) {
        // Results of the method response
        if (error) {
            console.log('Error: ');
            console.log(error);
            return;
        }
        console.log('Method response for \'' + methodName + '\': ')
        console.log(value);

        callbackReport(value['REQUESTID'], value['RESPONSECODE'], value['MESSAGE']);
    });
}

function createServer() {

    console.log('Creating XML-RPC server on port ' + config.h2h_out.listen_port);
    var serverOptions = {
        port: config.h2h_out.listen_port
    };

    var server = xmlrpc.createServer(serverOptions);

    server.on('NotFound', function (method, params) {
        console.log(method + ' is not found on our XML-RPC server');
        console.log('params:');
        console.log(params);
    });

    server.on('topUpReport', function (err, params, callback) {
        console.log('RECEIVE topUpReport, params:');
        console.log(params);
        
        var paramscount = params.length;
        for (var i = 0; i < paramscount; i++) {
            var value = params[i];
            
            callbackReport(value['REQUESTID'], value['RESPONSECODE'], value['MESSAGE']);
        }

        callback(null, 'ACK REPORT OK');
    })

}

function checkStatus(task) {
    var partnerUrl = url.parse(config.h2h_out.partner);
    var clientOptions = {
        host: partnerUrl.hostname
        , port: partnerUrl.port
        , path: partnerUrl.pathname
    };
    console.log('XMLRPC client options:');
    console.log(clientOptions);

    var client;
    if (partnerUrl.protocol == 'https:') {
        console.log('Use SSL');
        client = xmlrpc.createSecureClient(clientOptions);
    } else {
        console.log('Not using SSL');
        client = xmlrpc.createClient(clientOptions);
    }

    var methodName = 'topUpInquiry';
    console.log('methodName: ' + methodName);

    var params = {
        MSISDN: config.h2h_out.userid,
        REQUESTID: task['requestId'],
        PIN: config.h2h_out.password,
        NOHP: task['destination']
    };
    console.log('PARAMS:');
    console.log(params);

    client.methodCall(methodName, [ params ], function (error, value) {
        // Results of the method response
        if (error) {
            console.log('Error: ');
            console.log(error);
            return;
        }
        console.log('Method response for \'' + methodName + '\': ')
        console.log(value);

        callbackReport(value['REQUESTID'], value['RESPONSECODE'], value['MESSAGE']);
    });
}

function start(_config, _callbackReport) {
    config = _config;
    callbackReport = _callbackReport

    createServer();
}


exports.start = start;
exports.topupRequest = topupRequest;