Blame view

partner-kospinjasa.js 8.67 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
52
53
      saldoCheck(billpayment, task);
  }
  
  function saldoCheck(callback, task) {
  
      var params = {
          userName: config.h2h_out.userid,
          productCode: '00000' ,
          terminal: 'H2HIPN10',
          transactionType: '61',
          reff: Math.random() * 99999999;
          timeStamp: strftime('%Y-%m-%d %H:%M:%S', new Date())
1f837fd31   Adhidarma Hadiwinoto   on progress
54
      }
9e047c122   Adhidarma Hadiwinoto   saldoCheck
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
      params.signature = createSignatureForSaldoCheck(params, config.h2h_out.password);
  
      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});
          }
  
          var balance;
          logger.verbose('saldoCheck result', {result});
  
  
          if (task) {}
              callback(task, balance);
          }
      });
  
  }
  
  function billpayment(task, balance) {
5a947e400   Adhidarma Hadiwinoto   siap coba dapat r...
86
      var remoteProduct = task.remoteProduct.split(',');
b6b185202   Adhidarma Hadiwinoto   inputCheck
87
      var params = {
7f796c813   Adhidarma Hadiwinoto   coba easysoap
88
89
          userName: config.h2h_out.userid,
          productCode: remoteProduct[0] ,
7be37af22   Adhidarma Hadiwinoto   pakai terminal H2...
90
          terminal: 'H2HIPN10',
7f796c813   Adhidarma Hadiwinoto   coba easysoap
91
92
93
94
95
          transactionType: '50',
          billNumber: createBillNumber(task.destination),
          amount: remoteProduct[1],
          bit61: createBillNumber(task.destination),
          reff: task.requestId,
342d268ac   Adhidarma Hadiwinoto   ubah timeStamp fo...
96
          timeStamp: strftime('%Y-%m-%d %H:%M:%S', new Date())
7f796c813   Adhidarma Hadiwinoto   coba easysoap
97
      }
b6b185202   Adhidarma Hadiwinoto   inputCheck
98
99
      var signature = createSignature(params, config.h2h_out.password);
      params.signature = signature;
7f796c813   Adhidarma Hadiwinoto   coba easysoap
100

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

699851497   Adhidarma Hadiwinoto   rearrange params
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
          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
119
120
121
122
123
124
125
126
127
              logger.verbose(
                  'Got response',
                  {
                      lastEndpoint: soapClient.lastEndpoint,
                      lastRequest: soapClient.lastRequest,
                      lastMessage: soapClient.lastMessage,
                      lastResponse: soapClient.lastResponse,
                  }
              );
3899d9816   Adhidarma Hadiwinoto   log last request
128

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

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

4252c2818   Adhidarma Hadiwinoto   penanganan rc
260
261
262
      var message =
          response.outputParameter.resultCode.$value
          + " " + response.outputParameter.resultDesc.$value
aa561d430   Adhidarma Hadiwinoto   sn
263
          + "; BIT39: " + response.outputParameter.bit39.$value
4252c2818   Adhidarma Hadiwinoto   penanganan rc
264
          ;
97991a1dc   Adhidarma Hadiwinoto   pakai whiskers
265

4252c2818   Adhidarma Hadiwinoto   penanganan rc
266
267
268
      if (response.outputParameter.resultDesc.$value != st24message) {
          var message = message + " " + st24message;
      }
97991a1dc   Adhidarma Hadiwinoto   pakai whiskers
269

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

4252c2818   Adhidarma Hadiwinoto   penanganan rc
286
      return crypto.createHash('sha1').update(plain).digest().toString('hex');
5a947e400   Adhidarma Hadiwinoto   siap coba dapat r...
287
  }
9e047c122   Adhidarma Hadiwinoto   saldoCheck
288
289
290
291
292
293
294
295
296
297
298
299
300
  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...
301
302
  function createBillNumber(destination) {
      return ("0000000000000" + destination).slice(-13);
1f837fd31   Adhidarma Hadiwinoto   on progress
303
304
305
306
  }
  
  exports.start = start;
  exports.topupRequest = topupRequest;
5a947e400   Adhidarma Hadiwinoto   siap coba dapat r...
307
308
  exports.createSignature = createSignature;
  exports.createBillNumber = createBillNumber;