partner-kospinjasa.js 2.48 KB
var winston = require('winston');
var soap = require('soap');
var crypto = require('crypto');
var strftime = require('strftime');

var max_retry = 10;
var sleep_before_retry = 5000;

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

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) {
    if (retry === undefined) {
        retry = max_retry;
    }

    var remoteProduct = task.remoteProduct.split(',');

    soap.createClient(url, function(err, client) {
        var args = {
            userName: config.h2h_out.userid,
            productCode: remoteProduct[0] ,
            terminal: 'terminal0',
            transactionType: '50',
            billNumber: createBillNumber(task.destination),
            amount: remoteProduct[1],
            bit61: createBillNumber(task.destination),
            reff: task.requestId,
            timeStamp: strftime('%d-%m-%Y %H:%M:%S', new Date()),
        }

        var signature = createSignature(args, config.h2h_out.password);
        args.signature = signature;

        client.billpayment(args, function(err, result) {
            if (err) {
                logger.warn('Error requesting service', {err: err});
                callbackReport(task.requestId, '68', 'something wrong');
                return;
            }

            logger.info('Got result', {result: result});
            callbackReport(task.requestId, '68', 'got result');
        });
    });
}

function createSignature(args, password) {
    var passwordHash = crypto.createHash('sha256').update(password).digest().toString('hex');

    var result = crypto.createHash('sha1').update(
        args.userName
        + passwordHash
        + args.productCode
        + args.terminal
        + args.transactionType
        + args.billNumber
        + args.amount
        + args.ref
        + args.timestamp
    ).digest().toString('hex');

    return result;
}

function createBillNumber(destination) {
    return ("0000000000000" + destination).slice(-13);
}

exports.start = start;
exports.topupRequest = topupRequest;
exports.createSignature = createSignature;
exports.createBillNumber = createBillNumber;