Blame view
partner-cjk.js
3.08 KB
ebb83f38d
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
var winston = require('winston'); var crypto = require('crypto'); var xml = require('xml'); var url = require('url'); 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 calculateSignature(params) { return crypto.createHash('sha256').update( params.trxtype + params.prdcode + params.value + params.msisdn + params.trxid + params.uid ).digest().toString('hex'); } function createXmlPayload(params) { return "<?xml version=\"1.0\" ?> " + xml({ ciwaru: [ {trxtype: params.trxtype}, {prdcode: params.prdcode}, {value: params.value}, {msisdn: params.msisdn}, {trxid: params.trxid}, {uid: params.uid}, {hash: calculateSignature(params)} ] }); } function getSNFromMessage(message) { var sn_match = message.match(/SN (\w+) /); return sn_match[1]; } function topupResponseHandler(body) { logger.info('Got reply from partner', {body: body}); xml2js(body, function(err, result) { if (err) { logger.warn('XML parsing error', {err: err}); } logger.info('XML message from partner', {result: result}); }); } function topupRequest(task, retry) { var remoteProduct = task.remoteProduct.split(','); var params = { trxtype: '01', prdcode: remoteProduct[0], value: remoteProduct[1], msisdn: task.destination, trxid: task.requestId, uid: config.h2h_out.userid, }; var postBody = createXmlPayload(params); var partnerUrl = url.parse(config.h2h_out.partner); var postRequest = { host: partnerUrl.hostname, path: partnerUrl.path, port: partnerUrl.port, method: "POST", headers: { 'Content-Type': 'text/xml', 'Content-Length': Buffer.byteLength(postBody) } }; logger.info('POST to partner', {postRequest: postRequest}); var req = http.request(postRequest, function( res ) { logger.info('Status code: ' + res.statusCode ); var buffer = ""; res.on( "data", function( data ) { buffer = buffer + data; } ); res.on( "end", function( data ) { topupResponseHandler(buffer); }); }); req.on('error', function(e) { logger.warn('problem with request: ' + e.message); callbackReport(task['requestId'], '40', e.message); }); req.write(postBody); req.end(); } |
2759fd109
|
112 113 |
exports.start = start; exports.topupRequest = topupRequest; |
ebb83f38d
|
114 115 116 |
exports.calculateSignature = calculateSignature; exports.createXmlPayload = createXmlPayload; exports.getSNFromMessage = getSNFromMessage; |