Blame view

partner-cjk.js 3.08 KB
ebb83f38d   Adhidarma Hadiwinoto   alpha version
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   Adhidarma Hadiwinoto   exporting start d...
112
113
  exports.start = start;
  exports.topupRequest = topupRequest;
ebb83f38d   Adhidarma Hadiwinoto   alpha version
114
115
116
  exports.calculateSignature = calculateSignature;
  exports.createXmlPayload = createXmlPayload;
  exports.getSNFromMessage = getSNFromMessage;