Blame view

partner-kospinjasa.js 9.07 KB
1f837fd31   Adhidarma Hadiwinoto   on progress
1
2
  var winston = require('winston');
  var soap = require('soap');
5a947e400   Adhidarma Hadiwinoto   siap coba dapat r...
3
4
  var crypto = require('crypto');
  var strftime = require('strftime');
97991a1dc   Adhidarma Hadiwinoto   pakai whiskers
5
6
7
  var fs = require("fs");
  var whiskers = require("whiskers");
  var http = require("http");
e7d59da25   Adhidarma Hadiwinoto   require url
8
  var url = require("url");
97991a1dc   Adhidarma Hadiwinoto   pakai whiskers
9
10
11
  
  process.chdir(__dirname);
  var soapTemplate = fs.readFileSync("message.xml");
1f837fd31   Adhidarma Hadiwinoto   on progress
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
  
  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) {
9e047c122   Adhidarma Hadiwinoto   saldoCheck
42
43
44
45
46
47
48
49
50
51
      saldoCheck(billpayment, task);
  }
  
  function saldoCheck(callback, task) {
  
      var params = {
          userName: config.h2h_out.userid,
          productCode: '00000' ,
          terminal: 'H2HIPN10',
          transactionType: '61',
1c0291c88   Adhidarma Hadiwinoto   perbaikan random ...
52
          reff: Math.ceil( Math.random() * 99999999 ),
9e047c122   Adhidarma Hadiwinoto   saldoCheck
53
          timeStamp: strftime('%Y-%m-%d %H:%M:%S', new Date())
1f837fd31   Adhidarma Hadiwinoto   on progress
54
      }
9e047c122   Adhidarma Hadiwinoto   saldoCheck
55
      params.signature = createSignatureForSaldoCheck(params, config.h2h_out.password);
9b569c12b   Adhidarma Hadiwinoto   create soapclient...
56
      soap.createClient(config.h2h_out.partner, function(err, soapClient) {
9e047c122   Adhidarma Hadiwinoto   saldoCheck
57
58
  
          if (err) {
9b569c12b   Adhidarma Hadiwinoto   create soapclient...
59
60
61
              logger.warn('Error creating soap client for saldoCheck', {err: err});
              callbackReport(task.requestId, '40', 'Error creating soap client for saldoCheck: ' + err);
              return;
9e047c122   Adhidarma Hadiwinoto   saldoCheck
62
          }
9b569c12b   Adhidarma Hadiwinoto   create soapclient...
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
          logger.info('Requesting to service', {url: config.h2h_out.partner, params: params});
          soapClient.apih2h.apih2hPort.saldoCheck({ inputSaldo: params }, function(err, result) {
  
              logger.verbose(
                  'Got saldoCheck response',
                  {
                      lastEndpoint: soapClient.lastEndpoint,
                      lastRequest: soapClient.lastRequest,
                      lastMessage: soapClient.lastMessage,
                      lastResponse: soapClient.lastResponse,
                  }
              );
  
              if (err) {
                  logger.warn('Error requesting saldoCheck', {err: err});
              }
9e047c122   Adhidarma Hadiwinoto   saldoCheck
79

9b569c12b   Adhidarma Hadiwinoto   create soapclient...
80
81
              var balance;
              logger.verbose('saldoCheck result', {result: result});
9e047c122   Adhidarma Hadiwinoto   saldoCheck
82

9b569c12b   Adhidarma Hadiwinoto   create soapclient...
83
84
85
86
87
88
  
              if (task) {
                  callback(task, balance);
              }
          });
      }
9e047c122   Adhidarma Hadiwinoto   saldoCheck
89
90
91
92
  
  }
  
  function billpayment(task, balance) {
5a947e400   Adhidarma Hadiwinoto   siap coba dapat r...
93
      var remoteProduct = task.remoteProduct.split(',');
b6b185202   Adhidarma Hadiwinoto   inputCheck
94
      var params = {
7f796c813   Adhidarma Hadiwinoto   coba easysoap
95
96
          userName: config.h2h_out.userid,
          productCode: remoteProduct[0] ,
7be37af22   Adhidarma Hadiwinoto   pakai terminal H2...
97
          terminal: 'H2HIPN10',
7f796c813   Adhidarma Hadiwinoto   coba easysoap
98
99
100
101
102
          transactionType: '50',
          billNumber: createBillNumber(task.destination),
          amount: remoteProduct[1],
          bit61: createBillNumber(task.destination),
          reff: task.requestId,
342d268ac   Adhidarma Hadiwinoto   ubah timeStamp fo...
103
          timeStamp: strftime('%Y-%m-%d %H:%M:%S', new Date())
7f796c813   Adhidarma Hadiwinoto   coba easysoap
104
      }
b6b185202   Adhidarma Hadiwinoto   inputCheck
105
106
      var signature = createSignature(params, config.h2h_out.password);
      params.signature = signature;
7f796c813   Adhidarma Hadiwinoto   coba easysoap
107

777c49c56   Adhidarma Hadiwinoto   hapus forceSoap12...
108
      soap.createClient(config.h2h_out.partner, function(err, soapClient) {
35d3e5057   Adhidarma Hadiwinoto   pakai signature
109

699851497   Adhidarma Hadiwinoto   rearrange params
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
          var _params = {
              userName: params.userName,
              signature: params.signature,
              productCode: params.productCode,
              terminal: params.terminal,
              transactionType: params.transactionType,
              billNumber: params.billNumber,
              amount: params.amount,
              bit61: params.bit61,
              reff: params.reff,
              timeStamp: params.timeStamp
          }
  
          logger.info('Requesting to service', {url: config.h2h_out.partner, params: _params});
  
          soapClient.apih2h.apih2hPort.billpayment({ inputCheck: _params }, function(err, result) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
126
127
128
129
130
131
132
133
134
              logger.verbose(
                  'Got response',
                  {
                      lastEndpoint: soapClient.lastEndpoint,
                      lastRequest: soapClient.lastRequest,
                      lastMessage: soapClient.lastMessage,
                      lastResponse: soapClient.lastResponse,
                  }
              );
3899d9816   Adhidarma Hadiwinoto   log last request
135

5a947e400   Adhidarma Hadiwinoto   siap coba dapat r...
136
137
138
139
140
              if (err) {
                  logger.warn('Error requesting service', {err: err});
                  callbackReport(task.requestId, '68', 'something wrong');
                  return;
              }
4252c2818   Adhidarma Hadiwinoto   penanganan rc
141
              topupResponseHandler(task, result);
1f837fd31   Adhidarma Hadiwinoto   on progress
142
143
144
          });
      });
  }
4252c2818   Adhidarma Hadiwinoto   penanganan rc
145
146
147
  function topupResponseHandler(task, response) {
      var st24rc = '68';
      var st24message = response.outputParameter.resultDesc.$value;
97991a1dc   Adhidarma Hadiwinoto   pakai whiskers
148

aa561d430   Adhidarma Hadiwinoto   sn
149
150
151
152
      var resultCode = parseInt(response.outputParameter.resultCode.$value);
      var bit39 = parseInt(response.outputParameter.bit39.$value);
  
      if ( resultCode == 1 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
153
154
155
          // product disabled
          st24rc = '13';
      }
aa561d430   Adhidarma Hadiwinoto   sn
156
      else if ( resultCode == 2 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
157
158
159
          // prodcode disable
          st24rc = '13';
      }
aa561d430   Adhidarma Hadiwinoto   sn
160
      else if ( resultCode == 3 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
161
162
163
          // duplicate reff
          st24rc = '55';
      }
aa561d430   Adhidarma Hadiwinoto   sn
164
      else if ( resultCode == 4 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
165
166
167
          // not enough balance
          st24rc = '40';
      }
aa561d430   Adhidarma Hadiwinoto   sn
168
      else if ( resultCode == 5 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
169
170
171
          // username blocked
          st24rc = '40';
      }
aa561d430   Adhidarma Hadiwinoto   sn
172
      else if ( resultCode == 6 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
173
174
175
          // not exists username
          st24rc = '40';
      }
aa561d430   Adhidarma Hadiwinoto   sn
176
      else if ( resultCode == 11 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
177
178
179
          // invalid request
          st24rc = '40'
      }
aa561d430   Adhidarma Hadiwinoto   sn
180
      else if ( resultCode == 12 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
181
182
183
          // no route to host
          st24rc = '40'
      }
aa561d430   Adhidarma Hadiwinoto   sn
184
      else if ( resultCode == 13 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
185
186
187
          // invalid signature
          st24rc = '40'
      }
aa561d430   Adhidarma Hadiwinoto   sn
188
      else if ( bit39 == 6 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
189
190
191
          st24rc = '40';
          st24message = 'Error Transaksi ditolak karena terjadi error di H2H dengan response code diluar daftar ini. Silahkan hubungi H2H';
      }
aa561d430   Adhidarma Hadiwinoto   sn
192
      else if ( bit39 == 12 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
193
194
195
          st24rc = '40';
          st24message = 'Invalid Transaction Transaksi ditolak karena flow transaksi tidak valid';
      }
aa561d430   Adhidarma Hadiwinoto   sn
196
      else if ( bit39 == 13 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
197
198
199
          st24rc = '13';
          st24message = 'Invalid voucher nominal';
      }
aa561d430   Adhidarma Hadiwinoto   sn
200
      else if ( bit39 == 14 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
201
202
203
          st24rc = '14';
          st24message = 'MSISDN tidak ditemukan';
      }
aa561d430   Adhidarma Hadiwinoto   sn
204
      else if ( bit39 == 30 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
205
206
207
          st24rc = '40';
          st24message = 'Format Error';
      }
aa561d430   Adhidarma Hadiwinoto   sn
208
      else if ( bit39 == 31 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
209
210
211
          st24rc = '40';
          st24message = 'Kode bank tidak terdaftar';
      }
aa561d430   Adhidarma Hadiwinoto   sn
212
      else if ( bit39 == 63 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
213
214
215
          st24rc = '40';
          st24message = 'Reversal denied';
      }
aa561d430   Adhidarma Hadiwinoto   sn
216
      else if ( bit39 == 68 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
217
218
219
          st24rc = '68';
          st24message = 'Transaksi sedang dalam proses';
      }
aa561d430   Adhidarma Hadiwinoto   sn
220
      else if ( bit39 == 69 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
221
222
223
          st24rc = '68';
          st24message = 'Respon Ok lebih dari 24 detik';
      }
aa561d430   Adhidarma Hadiwinoto   sn
224
      else if ( bit39 == 70 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
225
226
227
          st24rc = '13';
          st24message = 'Voucher out of stock';
      }
aa561d430   Adhidarma Hadiwinoto   sn
228
      else if ( bit39 == 79 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
229
230
231
          st24rc = '14';
          st24message = 'Phone number is blocked by Telkomsel';
      }
aa561d430   Adhidarma Hadiwinoto   sn
232
      else if ( bit39 == 81 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
233
234
235
          st24rc = '14';
          st24message = 'Phone number is expired';
      }
aa561d430   Adhidarma Hadiwinoto   sn
236
      else if ( bit39 == 89 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
237
238
239
          st24rc = '40';
          st24message = 'Link to billing provider is down';
      }
aa561d430   Adhidarma Hadiwinoto   sn
240
      else if ( bit39 == 91 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
241
242
243
          st24rc = '40';
          st24message = 'Database problem';
      }
aa561d430   Adhidarma Hadiwinoto   sn
244
      else if ( bit39 == 92 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
245
246
247
          st24rc = '40';
          st24message = 'Unable to route transaction';
      }
aa561d430   Adhidarma Hadiwinoto   sn
248
      else if ( bit39 == 94 ) {
4252c2818   Adhidarma Hadiwinoto   penanganan rc
249
250
251
          st24rc = '40';
          st24message = 'Duplicate reversal request';
      }
aa561d430   Adhidarma Hadiwinoto   sn
252
253
254
255
256
257
258
      else if ( resultCode == 0 && bit39 == 0) {
  
          var sn = '';
  
          try {
              sn = response.outputParameter.bit61.$value.substring(43);
          }
e2e928e50   Adhidarma Hadiwinoto   typo
259
          catch(e) {
aa561d430   Adhidarma Hadiwinoto   sn
260
261
262
263
264
265
              sn = '';
          }
  
          st24message = 'SN=' + sn + '; ' + st24message;
          st24rc = '00';
      }
97991a1dc   Adhidarma Hadiwinoto   pakai whiskers
266

4252c2818   Adhidarma Hadiwinoto   penanganan rc
267
268
269
      var message =
          response.outputParameter.resultCode.$value
          + " " + response.outputParameter.resultDesc.$value
aa561d430   Adhidarma Hadiwinoto   sn
270
          + "; BIT39: " + response.outputParameter.bit39.$value
4252c2818   Adhidarma Hadiwinoto   penanganan rc
271
          ;
97991a1dc   Adhidarma Hadiwinoto   pakai whiskers
272

4252c2818   Adhidarma Hadiwinoto   penanganan rc
273
274
275
      if (response.outputParameter.resultDesc.$value != st24message) {
          var message = message + " " + st24message;
      }
97991a1dc   Adhidarma Hadiwinoto   pakai whiskers
276

13e965f4e   Adhidarma Hadiwinoto   typo
277
      logger.info('Got result: ' + message, {response: response});
4252c2818   Adhidarma Hadiwinoto   penanganan rc
278
      callbackReport(task.requestId, st24rc, st24message);
97991a1dc   Adhidarma Hadiwinoto   pakai whiskers
279
  }
b6b185202   Adhidarma Hadiwinoto   inputCheck
280
  function createSignature(params, password) {
5a947e400   Adhidarma Hadiwinoto   siap coba dapat r...
281
      var passwordHash = crypto.createHash('sha256').update(password).digest().toString('hex');
dfcc535b5   Adhidarma Hadiwinoto   coba perbaiki cre...
282
      var plain =
b6b185202   Adhidarma Hadiwinoto   inputCheck
283
          params.userName
5a947e400   Adhidarma Hadiwinoto   siap coba dapat r...
284
          + passwordHash
b6b185202   Adhidarma Hadiwinoto   inputCheck
285
286
287
288
289
290
291
          + params.productCode
          + params.terminal
          + params.transactionType
          + params.billNumber
          + params.amount
          + params.reff
          + params.timeStamp;
dfcc535b5   Adhidarma Hadiwinoto   coba perbaiki cre...
292

4252c2818   Adhidarma Hadiwinoto   penanganan rc
293
      return crypto.createHash('sha1').update(plain).digest().toString('hex');
5a947e400   Adhidarma Hadiwinoto   siap coba dapat r...
294
  }
9e047c122   Adhidarma Hadiwinoto   saldoCheck
295
296
297
298
299
300
301
302
303
304
305
306
307
  function createSignatureForSaldoCheck(params, password) {
      var passwordHash = crypto.createHash('sha256').update(password).digest().toString('hex');
      var plain =
          params.userName
          + passwordHash
          + params.productCode
          + params.terminal
          + params.transactionType
          + params.reff
          + params.timeStamp;
  
      return crypto.createHash('sha1').update(plain).digest().toString('hex');
  }
5a947e400   Adhidarma Hadiwinoto   siap coba dapat r...
308
309
  function createBillNumber(destination) {
      return ("0000000000000" + destination).slice(-13);
1f837fd31   Adhidarma Hadiwinoto   on progress
310
311
312
313
  }
  
  exports.start = start;
  exports.topupRequest = topupRequest;
5a947e400   Adhidarma Hadiwinoto   siap coba dapat r...
314
315
  exports.createSignature = createSignature;
  exports.createBillNumber = createBillNumber;