partner-bayarkilat.js 2.28 KB
var request = require('request');
var url = require('url');
var winston = require('winston');

var config;
var aaa;
var callbackReport;
var logger;

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

    if (options && options.aaa) {
            aaa = options.aaa;
    }

    if (options && options.logger) {
        logger = options.logger;
    } else {
        logger = new winston.Logger({
            transports: [
              new (winston.transports.Console)()
            ]
        });
    }
}


function topupRequest(task, retry) {
    aaa.insertTaskToMongoDb(task);

    var partnerUrl = url.parse(config.h2h_out.partner);
    var product = prepareRemoteProductCode(task.remoteProduct);

    var options = {
        url: url: config.h2h_out.partner,
        qs: {
            request: 'PURCHASE*'
                + task.requestId + '*'
                + product.product + '*'
                + product.productDetail + '*'
                + task.destination + '*'
                + task.nominal + '*'
                + '0*'
                + config.h2h_out.noid + '*'
                + config.h2h_out.userid + '*'
                + config.h2h_out.password
        }
    };

    request(options, function(error, response, body) {
        if (error) {
            logger.warn('Error requesting to partner', {error: error});
            callbackReport(task.requestId, '68', 'Error requesting to partner. ' + error);
            return;
        }

        if (response.statusCode != 200) {
            var message = 'Partner response with http status code other that 200 (' + response.statusCode +')';

            logger.warn(message);
            callbackReport(task.requestId, '68', message);
            return;
        }

        logger.verbose('Got response', {requestId: task.requestId, responseBody: body});
        callbackReport(task.requestId, '68', body);
    });
}

function prepareRemoteProductCode(remoteProduct) {
    var product = remoteProduct.split(',');

    if (product.length != 3) {
        return;
    }

    return {
        product: product[0],
        productDetail: product[1],
        nominal: product[2]
    }
}

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