Blame view

partner-datacell.js 5.39 KB
d2933ca99   Adhidarma Hadiwinoto   require http
1
  var http = require('http');
ff32317e9   Adhidarma Hadiwinoto   prototype partner...
2
3
4
  var url = require('url');
  var math = require('mathjs');
  var xml = require('xml');
f53f2def0   Adhidarma Hadiwinoto   mulai tangani dir...
5
  var xml2js = require('xml2js').parseString;
ff32317e9   Adhidarma Hadiwinoto   prototype partner...
6
7
8
9
10
11
12
13
14
15
16
17
  var strftime = require('strftime');
  var xor = require('base64-xor');
  var request = require('request');
  
  var config;
  var callbackReport;
  
  var max_retry = 2;
  var sleep_before_retry = 2000;
  
  function calculateSignature(userid, password, msisdn, timestamp) {
      var a = msisdn.substr(msisdn.length - 4) + timestamp;
e7725f72e   Adhidarma Hadiwinoto   debug sig
18
      console.log(a);
ff32317e9   Adhidarma Hadiwinoto   prototype partner...
19
      var b = userid.substr(0, 4) + password;
e7725f72e   Adhidarma Hadiwinoto   debug sig
20
      console.log(b);
ff32317e9   Adhidarma Hadiwinoto   prototype partner...
21
22
23
24
25
26
27
28
      
      return xor.encode(a,b);
  }
  
  function createPayload(task) {
      var timestamp = strftime('%H%M%S');
      
      var payload = {
9de9fde1f   Adhidarma Hadiwinoto   curly
29
30
31
32
33
34
35
36
37
          datacell: [
              { perintah: 'charge'},
              {oprcode: task['remoteProduct']},
              {userid: config.h2h_out.userid},
              {time: timestamp},
              {msisdn: task['destination']},
              {ref_trxid: task['requestId']},
              {sgn: calculateSignature(config.h2h_out.userid, config.h2h_out.password, task['destination'], timestamp)}
          ]
ff32317e9   Adhidarma Hadiwinoto   prototype partner...
38
39
40
      };
      
      console.log(payload);
c66f76c6e   Adhidarma Hadiwinoto   top level element
41
42
      return "<?xml version=\"1.0\" ?>
  " + xml(payload);
ff32317e9   Adhidarma Hadiwinoto   prototype partner...
43
44
45
  }
  
  function topupRequest(task, retry) {
ff32317e9   Adhidarma Hadiwinoto   prototype partner...
46
      var payload_xml = createPayload(task);
b8c6efb92   Adhidarma Hadiwinoto   simplified
47
      //console.log(payload_xml);
88b4e0d50   Adhidarma Hadiwinoto   gunakan req.end
48
      
7e26aeff4   Adhidarma Hadiwinoto   coba plain http req
49
50
51
52
      var postRequest = {
          host: "202.152.62.2",
          path: "/RELOAD97.php",
          port: 7713,
a1b7fb567   Adhidarma Hadiwinoto   coba pakai header
53
54
55
56
57
          method: "POST",
          headers: {
              'Content-Type': 'text/xml',
              'Content-Length': Buffer.byteLength(payload_xml)
          }
7e26aeff4   Adhidarma Hadiwinoto   coba plain http req
58
59
60
61
      };
      
      var buffer = "";
      var req = http.request( postRequest, function( res )    {
f53f2def0   Adhidarma Hadiwinoto   mulai tangani dir...
62
63
64
          console.log('Status code: ' + res.statusCode );
          var buffer = "";
          res.on( "data", function( data ) { buffer = buffer + data; } );
a12a4d745   Adhidarma Hadiwinoto   merge direct dan ...
65
          res.on( "end", function( data ) {             
a07de0104   Adhidarma Hadiwinoto   data dan buffer lagi
66
                  topupResponseHandler(buffer);
f53f2def0   Adhidarma Hadiwinoto   mulai tangani dir...
67
          });
7e26aeff4   Adhidarma Hadiwinoto   coba plain http req
68
69
70
71
72
73
74
75
76
  
      });
  
      req.on('error', function(e) {
          console.log('problem with request: ' + e.message);
      });
  
      req.write( payload_xml );
      req.end();
ff32317e9   Adhidarma Hadiwinoto   prototype partner...
77
  }
a12a4d745   Adhidarma Hadiwinoto   merge direct dan ...
78
79
80
81
82
83
84
85
86
87
  function topupResponseHandler(body, request_id) {
      xml2js(body, function (err, result) {
          if (err) {
              console.log(body);
              callbackReport(request_id, '40', buffer);
              return;
          }
          
          console.log(result);
          
0af71fbe8   Adhidarma Hadiwinoto   typo fixed
88
          request_id = result.datacell.ref_trxid[0].trim();
a12a4d745   Adhidarma Hadiwinoto   merge direct dan ...
89
90
          
          var response_code = '68';
1b8530b3c   Adhidarma Hadiwinoto   penanganan field ...
91
92
93
          
          var message = '';
          try {
ee5a6e87a   Adhidarma Hadiwinoto   simplified try catch
94
              if (result.datacell.message && result.datacell.message.length > 0) {
1b8530b3c   Adhidarma Hadiwinoto   penanganan field ...
95
                  message = result.datacell.message[0].trim();
ee5a6e87a   Adhidarma Hadiwinoto   simplified try catch
96
              } else if (result.datacell.msg && result.datacell.msg.length > 0) {
1b8530b3c   Adhidarma Hadiwinoto   penanganan field ...
97
98
99
100
101
102
103
                  message = result.datacell.msg[0].trim();
              } 
          }
          catch(err) {
              message = 'exception saat parsing message';
          }
          
ee5a6e87a   Adhidarma Hadiwinoto   simplified try catch
104
105
          if (result.datacell.resultcode && result.datacell.resultcode[0] == '999') {
              response_code = '40';
e86b13f39   Adhidarma Hadiwinoto   penanganan unknow...
106
107
108
109
110
111
          }
          
          if (message.indexOf('Nomor tujuan salah') >= 0) {
              response_code = '14';
          } else if (message.indexOf('*GAGAL, transaksi yang sama sudah ada dalam 10 menit') >= 0) {
              response_code = '55';
30de6570b   Adhidarma Hadiwinoto   penanganan gagal
112
113
114
115
          } else if (message.indexOf('saldo sdh dikembalikan') >= 0) {
              response_code = '40'
          } else if (message.indexOf('Trx dpt diulang') >= 0) {
              response_code = '40'
5f9c539d6   Adhidarma Hadiwinoto   parseSN
116
117
          } else if (message.indexOf('SUKSES SN Operator:') >= 0) {
              response_code = '00';
d0d82611e   Adhidarma Hadiwinoto   sn verbose
118
              
5f9c539d6   Adhidarma Hadiwinoto   parseSN
119
              var sn = parseSN(message);
d0d82611e   Adhidarma Hadiwinoto   sn verbose
120
121
              console.log ('SN Operator: ' + sn);
              
9aba07466   Adhidarma Hadiwinoto   hanya set sn jika...
122
              /*
5f9c539d6   Adhidarma Hadiwinoto   parseSN
123
124
              if (!sn) {
                  
d0d82611e   Adhidarma Hadiwinoto   sn verbose
125
                  console.log('Missing real operator SN, using SN from suplier');
5f9c539d6   Adhidarma Hadiwinoto   parseSN
126
127
128
129
130
131
132
                  try {
                      sn = result.datacell.trxid[0].trim();
                  }
                  catch(err) {
                      sn = '';
                  }
              }
9aba07466   Adhidarma Hadiwinoto   hanya set sn jika...
133
134
135
136
137
138
139
              */
              
              if (sn) {
                  message = 'SN=' + sn + '; ' + message;
              } else {
                  message = message + ' - ' + ' Unknown original SN';
              }
a12a4d745   Adhidarma Hadiwinoto   merge direct dan ...
140
141
142
143
144
          }
          
          callbackReport(request_id, response_code, message);
      });
  }
5f9c539d6   Adhidarma Hadiwinoto   parseSN
145
146
147
148
149
150
151
  function parseSN(message) {
      var results = message.match(/SN Operator: .+ SN Kami/);
      if (!results || results.length <= 0) {
          return '';
      }
      
      var result = results[0];
8a5b9fc20   Adhidarma Hadiwinoto   perbaikan parseSN
152
153
      result = result.replace('SN Operator:', '');
      result = result.replace('SN Kami', '');
5f9c539d6   Adhidarma Hadiwinoto   parseSN
154
      result = result.trim();
8a5b9fc20   Adhidarma Hadiwinoto   perbaikan parseSN
155
156
157
158
159
      
      if (result == '00') {
          result = '';
      }
      
5f9c539d6   Adhidarma Hadiwinoto   parseSN
160
161
      return result;
  }
ff32317e9   Adhidarma Hadiwinoto   prototype partner...
162
  function createServer() {
e303a718e   Adhidarma Hadiwinoto   penanganan sn
163

e556ce560   Adhidarma Hadiwinoto   refactor nama var...
164
      var httpServer = http.createServer(function(req, res) {
a12a4d745   Adhidarma Hadiwinoto   merge direct dan ...
165
          console.log('Got request from partner ("' + req.url + '")');
e303a718e   Adhidarma Hadiwinoto   penanganan sn
166
167
168
169
170
171
172
          
          var body = "";
          req.on('data', function (chunk) {
              body += chunk;
          });
          
          req.on('end', function () {
e303a718e   Adhidarma Hadiwinoto   penanganan sn
173
174
              res.writeHead(200);
              res.end('OK');
a12a4d745   Adhidarma Hadiwinoto   merge direct dan ...
175
176
177
              
              console.log(body);
              topupResponseHandler(body);
e303a718e   Adhidarma Hadiwinoto   penanganan sn
178
          });
ff32317e9   Adhidarma Hadiwinoto   prototype partner...
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
      });
      
      httpServer.listen(config.h2h_out.listen_port, function() {
          console.log('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port);
      });
  }
  
  
  function start(_config, _callbackReport) {
      config = _config;
      callbackReport = _callbackReport
  
      createServer();
  }
  
  exports.start = start;
  exports.topupRequest = topupRequest;