Commit 064e7c879a602e8df46d311804ab8f973ebfa7e0

Authored by Adhidarma Hadiwinoto
1 parent 6108ae8041
Exists in master

include sn di pushResponse

Showing 1 changed file with 5 additions and 3 deletions Inline Diff

partner-kospinjasa.js
1 var winston = require('winston'); 1 var winston = require('winston');
2 var soap = require('soap'); 2 var soap = require('soap');
3 var crypto = require('crypto'); 3 var crypto = require('crypto');
4 var strftime = require('strftime'); 4 var strftime = require('strftime');
5 var fs = require("fs"); 5 var fs = require("fs");
6 var http = require("http"); 6 var http = require("http");
7 var url = require("url"); 7 var url = require("url");
8 var mongoClient = require('mongodb').MongoClient; 8 var mongoClient = require('mongodb').MongoClient;
9 var moment = require('moment'); 9 var moment = require('moment');
10 10
11 process.chdir(__dirname); 11 process.chdir(__dirname);
12 12
13 var max_retry = 10; 13 var max_retry = 10;
14 var sleep_before_retry = 5000; 14 var sleep_before_retry = 5000;
15 15
16 var config; 16 var config;
17 var callbackReport; 17 var callbackReport;
18 var aaa; 18 var aaa;
19 var logger; 19 var logger;
20 var options; 20 var options;
21 var mongodb; 21 var mongodb;
22 22
23 function start(_config, _callbackReport, options) { 23 function start(_config, _callbackReport, options) {
24 config = _config; 24 config = _config;
25 callbackReport = _callbackReport 25 callbackReport = _callbackReport
26 26
27 if (options && options.aaa) { 27 if (options && options.aaa) {
28 aaa = options.aaa; 28 aaa = options.aaa;
29 } 29 }
30 30
31 if (options && options.logger) { 31 if (options && options.logger) {
32 logger = options.logger; 32 logger = options.logger;
33 } else { 33 } else {
34 logger = new winston.Logger({ 34 logger = new winston.Logger({
35 transports: [ 35 transports: [
36 new (winston.transports.Console)() 36 new (winston.transports.Console)()
37 ] 37 ]
38 }); 38 });
39 } 39 }
40 40
41 initMongoClient(); 41 initMongoClient();
42 } 42 }
43 43
44 function initMongoClient() { 44 function initMongoClient() {
45 if (!config || !config.mongodb || !config.mongodb.url) { 45 if (!config || !config.mongodb || !config.mongodb.url) {
46 return; 46 return;
47 } 47 }
48 48
49 try { 49 try {
50 var url = config.mongodb.url; 50 var url = config.mongodb.url;
51 51
52 mongoClient.connect(url, function(err, db) { 52 mongoClient.connect(url, function(err, db) {
53 if (err) { 53 if (err) {
54 logger.warn('Failed to connect to mongodb', {err: err}); 54 logger.warn('Failed to connect to mongodb', {err: err});
55 return; 55 return;
56 } 56 }
57 mongodb = db; 57 mongodb = db;
58 logger.info('MongoDB connected'); 58 logger.info('MongoDB connected');
59 }); 59 });
60 } 60 }
61 catch(err) { 61 catch(err) {
62 logger.warn('Exception when connecting to mongodb', {err: err, url: url}); 62 logger.warn('Exception when connecting to mongodb', {err: err, url: url});
63 } 63 }
64 } 64 }
65 65
66 function insertTaskToMongoDb(task) { 66 function insertTaskToMongoDb(task) {
67 if (!isMongoReady()) { return; } 67 if (!isMongoReady()) { return; }
68 68
69 task.supplier = config.globals.gateway_name; 69 task.supplier = config.globals.gateway_name;
70 task.rc = '68'; 70 task.rc = '68';
71 71
72 try { 72 try {
73 mongodb.collection(config.mongodb.collection).insertOne(task); 73 mongodb.collection(config.mongodb.collection).insertOne(task);
74 } 74 }
75 catch(err) { 75 catch(err) {
76 //logger.warn('Exception when inserting document to mongodb', {err: err, task: task}); 76 //logger.warn('Exception when inserting document to mongodb', {err: err, task: task});
77 } 77 }
78 } 78 }
79 79
80 function pushResponseToMongoDb(task, response, rc) { 80 function pushResponseToMongoDb(task, response, rc) {
81 if (!isMongoReady()) { return; } 81 if (!isMongoReady()) { return; }
82 82
83 83
84 try { 84 try {
85 if (!response.ts) { 85 if (!response.ts) {
86 response.ts = strftime('%Y-%m-%d %H:%M:%S', new Date()); 86 response.ts = strftime('%Y-%m-%d %H:%M:%S', new Date());
87 } 87 }
88 88
89 mongodb.collection(config.mongodb.collection).updateOne( 89 mongodb.collection(config.mongodb.collection).updateOne(
90 {requestId: task.requestId}, 90 {requestId: task.requestId},
91 { 91 {
92 $set: { 92 $set: {
93 lastResponse: response, 93 lastResponse: response,
94 supplier: config.globals.gateway_name, 94 supplier: config.globals.gateway_name,
95 rc: rc 95 rc: rc
96 }, 96 },
97 $push: { 97 $push: {
98 responses: response 98 responses: response
99 } 99 }
100 }, 100 },
101 function(err, result) { 101 function(err, result) {
102 if (err) { 102 if (err) {
103 logger.warn('Error when pushing response to mongodb', {err: err, task: task, response: response}); 103 logger.warn('Error when pushing response to mongodb', {err: err, task: task, response: response});
104 return; 104 return;
105 } 105 }
106 } 106 }
107 ); 107 );
108 } 108 }
109 catch(err) { 109 catch(err) {
110 logger.warn('Exception when pushing response to mongodb', {err: err, task: task, response: response}); 110 logger.warn('Exception when pushing response to mongodb', {err: err, task: task, response: response});
111 } 111 }
112 } 112 }
113 113
114 function isMongoReady() { 114 function isMongoReady() {
115 if (!config.mongodb) { return; } 115 if (!config.mongodb) { return; }
116 if (!config.mongodb.collection) { return; } 116 if (!config.mongodb.collection) { return; }
117 if (!mongodb) { return; } 117 if (!mongodb) { return; }
118 118
119 return true; 119 return true;
120 } 120 }
121 121
122 function topupRequest(task, retry) { 122 function topupRequest(task, retry) {
123 task.ts = moment(task.timestamp, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss'); 123 task.ts = moment(task.timestamp, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss');
124 task.ts_date = moment(task.timestamp, 'YYYYMMDDHHmmss').format('YYYY-MM-DD'); 124 task.ts_date = moment(task.timestamp, 'YYYYMMDDHHmmss').format('YYYY-MM-DD');
125 125
126 insertTaskToMongoDb(task); 126 insertTaskToMongoDb(task);
127 127
128 saldoCheck(billpayment, task); 128 saldoCheck(billpayment, task);
129 } 129 }
130 130
131 function saldoCheck(callback, task) { 131 function saldoCheck(callback, task) {
132 132
133 var params = { 133 var params = {
134 userName: config.h2h_out.userid, 134 userName: config.h2h_out.userid,
135 productCode: '00000' , 135 productCode: '00000' ,
136 terminal: 'H2HIPN10', 136 terminal: 'H2HIPN10',
137 transactionType: '61', 137 transactionType: '61',
138 reff: Math.ceil( Math.random() * 99999999 ), 138 reff: Math.ceil( Math.random() * 99999999 ),
139 timeStamp: strftime('%Y-%m-%d %H:%M:%S', new Date()) 139 timeStamp: strftime('%Y-%m-%d %H:%M:%S', new Date())
140 } 140 }
141 141
142 params.signature = createSignatureForSaldoCheck(params, config.h2h_out.password); 142 params.signature = createSignatureForSaldoCheck(params, config.h2h_out.password);
143 143
144 soap.createClient(config.h2h_out.partner, function(err, soapClient) { 144 soap.createClient(config.h2h_out.partner, function(err, soapClient) {
145 145
146 if (err) { 146 if (err) {
147 147
148 var errorMessage = 'Error creating soap client for saldoCheck: ' + err; 148 var errorMessage = 'Error creating soap client for saldoCheck: ' + err;
149 149
150 logger.warn(errorMessage, {err: err}); 150 logger.warn(errorMessage, {err: err});
151 callbackReport(task.requestId, '40', errorMessage); 151 callbackReport(task.requestId, '40', errorMessage);
152 pushResponseToMongoDb(task, {supplier: config.globals.gateway_name, raw: errorMessage}, '40'); 152 pushResponseToMongoDb(task, {supplier: config.globals.gateway_name, raw: errorMessage}, '40');
153 153
154 return; 154 return;
155 } 155 }
156 156
157 logger.info('Requesting to service', {url: config.h2h_out.partner, params: params}); 157 logger.info('Requesting to service', {url: config.h2h_out.partner, params: params});
158 soapClient.apih2h.apih2hPort.saldoCheck({ inputSaldo: params }, function(err, result) { 158 soapClient.apih2h.apih2hPort.saldoCheck({ inputSaldo: params }, function(err, result) {
159 159
160 logger.verbose( 160 logger.verbose(
161 'Got saldoCheck response', 161 'Got saldoCheck response',
162 { 162 {
163 lastEndpoint: soapClient.lastEndpoint, 163 lastEndpoint: soapClient.lastEndpoint,
164 lastRequest: soapClient.lastRequest, 164 lastRequest: soapClient.lastRequest,
165 lastMessage: soapClient.lastMessage, 165 lastMessage: soapClient.lastMessage,
166 lastResponse: soapClient.lastResponse, 166 lastResponse: soapClient.lastResponse,
167 } 167 }
168 ); 168 );
169 169
170 if (err) { 170 if (err) {
171 var errorMessage = 'Error requesting saldoCheck: ' + err; 171 var errorMessage = 'Error requesting saldoCheck: ' + err;
172 172
173 logger.warn(errorMessage, {err: err}); 173 logger.warn(errorMessage, {err: err});
174 callbackReport(task.requestId, '40', errorMessage); 174 callbackReport(task.requestId, '40', errorMessage);
175 pushResponseToMongoDb(task, {supplier: config.globals.gateway_name, raw: errorMessage}, '40'); 175 pushResponseToMongoDb(task, {supplier: config.globals.gateway_name, raw: errorMessage}, '40');
176 } 176 }
177 177
178 var balance; 178 var balance;
179 logger.verbose('saldoCheck result', {result: result}); 179 logger.verbose('saldoCheck result', {result: result});
180 180
181 try { 181 try {
182 balance = result.outputParameter.bit61.$value; 182 balance = result.outputParameter.bit61.$value;
183 } 183 }
184 catch(e) { 184 catch(e) {
185 balance = 'UNKNOWN'; 185 balance = 'UNKNOWN';
186 } 186 }
187 187
188 188
189 if (task) { 189 if (task) {
190 callback(task, balance); 190 callback(task, balance);
191 } 191 }
192 }); 192 });
193 }); 193 });
194 194
195 } 195 }
196 196
197 function billpayment(task, balance) { 197 function billpayment(task, balance) {
198 198
199 var remoteProduct = task.remoteProduct.split(','); 199 var remoteProduct = task.remoteProduct.split(',');
200 var params = { 200 var params = {
201 userName: config.h2h_out.userid, 201 userName: config.h2h_out.userid,
202 productCode: remoteProduct[0] , 202 productCode: remoteProduct[0] ,
203 terminal: 'H2HIPN10', 203 terminal: 'H2HIPN10',
204 transactionType: '50', 204 transactionType: '50',
205 billNumber: createBillNumber(task.destination), 205 billNumber: createBillNumber(task.destination),
206 amount: remoteProduct[1], 206 amount: remoteProduct[1],
207 bit61: createBillNumber(task.destination), 207 bit61: createBillNumber(task.destination),
208 reff: task.requestId, 208 reff: task.requestId,
209 timeStamp: strftime('%Y-%m-%d %H:%M:%S', new Date()) 209 timeStamp: strftime('%Y-%m-%d %H:%M:%S', new Date())
210 } 210 }
211 211
212 var signature = createSignature(params, config.h2h_out.password); 212 var signature = createSignature(params, config.h2h_out.password);
213 params.signature = signature; 213 params.signature = signature;
214 214
215 soap.createClient(config.h2h_out.partner, function(err, soapClient) { 215 soap.createClient(config.h2h_out.partner, function(err, soapClient) {
216 216
217 var _params = { 217 var _params = {
218 userName: params.userName, 218 userName: params.userName,
219 signature: params.signature, 219 signature: params.signature,
220 productCode: params.productCode, 220 productCode: params.productCode,
221 terminal: params.terminal, 221 terminal: params.terminal,
222 transactionType: params.transactionType, 222 transactionType: params.transactionType,
223 billNumber: params.billNumber, 223 billNumber: params.billNumber,
224 amount: params.amount, 224 amount: params.amount,
225 bit61: params.bit61, 225 bit61: params.bit61,
226 reff: params.reff, 226 reff: params.reff,
227 timeStamp: params.timeStamp 227 timeStamp: params.timeStamp
228 } 228 }
229 229
230 logger.info('Requesting to service', {url: config.h2h_out.partner, params: _params}); 230 logger.info('Requesting to service', {url: config.h2h_out.partner, params: _params});
231 231
232 soapClient.apih2h.apih2hPort.billpayment({ inputCheck: _params }, function(err, result) { 232 soapClient.apih2h.apih2hPort.billpayment({ inputCheck: _params }, function(err, result) {
233 logger.verbose( 233 logger.verbose(
234 'Got response', 234 'Got response',
235 { 235 {
236 lastEndpoint: soapClient.lastEndpoint, 236 lastEndpoint: soapClient.lastEndpoint,
237 lastRequest: soapClient.lastRequest, 237 lastRequest: soapClient.lastRequest,
238 lastMessage: soapClient.lastMessage, 238 lastMessage: soapClient.lastMessage,
239 lastResponse: soapClient.lastResponse, 239 lastResponse: soapClient.lastResponse,
240 } 240 }
241 ); 241 );
242 242
243 if (err) { 243 if (err) {
244 var errorMessage = 'Error requesting service: ' + err; 244 var errorMessage = 'Error requesting service: ' + err;
245 245
246 logger.warn(errorMessage, {err: err}); 246 logger.warn(errorMessage, {err: err});
247 callbackReport(task.requestId, '68', errorMessage); 247 callbackReport(task.requestId, '68', errorMessage);
248 pushResponseToMongoDb(task, {supplier: config.globals.gateway_name, raw: soapClient.lastResponse}, '68'); 248 pushResponseToMongoDb(task, {supplier: config.globals.gateway_name, raw: soapClient.lastResponse}, '68');
249 249
250 return; 250 return;
251 } 251 }
252 252
253 topupResponseHandler(task, result, balance, soapClient.lastResponse); 253 topupResponseHandler(task, result, balance, soapClient.lastResponse);
254 }); 254 });
255 }); 255 });
256 } 256 }
257 257
258 function topupResponseHandler(task, response, balance, rawResponse) { 258 function topupResponseHandler(task, response, balance, rawResponse) {
259 var st24rc = '68'; 259 var st24rc = '68';
260 var st24message = response.outputParameter.resultDesc.$value; 260 var st24message = response.outputParameter.resultDesc.$value;
261 261
262 var resultCode = parseInt(response.outputParameter.resultCode.$value); 262 var resultCode = parseInt(response.outputParameter.resultCode.$value);
263 var bit39 = parseInt(response.outputParameter.bit39.$value); 263 var bit39 = parseInt(response.outputParameter.bit39.$value);
264 264
265 var sn = '';
266
265 if ( resultCode == 1 ) { 267 if ( resultCode == 1 ) {
266 // product disabled 268 // product disabled
267 st24rc = '13'; 269 st24rc = '13';
268 } 270 }
269 else if ( resultCode == 2 ) { 271 else if ( resultCode == 2 ) {
270 // prodcode disable 272 // prodcode disable
271 st24rc = '13'; 273 st24rc = '13';
272 } 274 }
273 else if ( resultCode == 3 ) { 275 else if ( resultCode == 3 ) {
274 // duplicate reff 276 // duplicate reff
275 st24rc = '55'; 277 st24rc = '55';
276 } 278 }
277 else if ( resultCode == 4 ) { 279 else if ( resultCode == 4 ) {
278 // not enough balance 280 // not enough balance
279 st24rc = '40'; 281 st24rc = '40';
280 } 282 }
281 else if ( resultCode == 5 ) { 283 else if ( resultCode == 5 ) {
282 // username blocked 284 // username blocked
283 st24rc = '40'; 285 st24rc = '40';
284 } 286 }
285 else if ( resultCode == 6 ) { 287 else if ( resultCode == 6 ) {
286 // not exists username 288 // not exists username
287 st24rc = '40'; 289 st24rc = '40';
288 } 290 }
289 else if ( resultCode == 11 ) { 291 else if ( resultCode == 11 ) {
290 // invalid request 292 // invalid request
291 st24rc = '40' 293 st24rc = '40'
292 } 294 }
293 else if ( resultCode == 12 ) { 295 else if ( resultCode == 12 ) {
294 // no route to host 296 // no route to host
295 st24rc = '40' 297 st24rc = '40'
296 } 298 }
297 else if ( resultCode == 13 ) { 299 else if ( resultCode == 13 ) {
298 // invalid signature 300 // invalid signature
299 st24rc = '40' 301 st24rc = '40'
300 } 302 }
301 else if ( bit39 == 6 ) { 303 else if ( bit39 == 6 ) {
302 st24rc = '40'; 304 st24rc = '40';
303 st24message = 'Error Transaksi ditolak karena terjadi error di H2H dengan response code diluar daftar ini. Silahkan hubungi H2H'; 305 st24message = 'Error Transaksi ditolak karena terjadi error di H2H dengan response code diluar daftar ini. Silahkan hubungi H2H';
304 } 306 }
305 else if ( bit39 == 12 ) { 307 else if ( bit39 == 12 ) {
306 st24rc = '40'; 308 st24rc = '40';
307 st24message = 'Invalid Transaction Transaksi ditolak karena flow transaksi tidak valid'; 309 st24message = 'Invalid Transaction Transaksi ditolak karena flow transaksi tidak valid';
308 } 310 }
309 else if ( bit39 == 13 ) { 311 else if ( bit39 == 13 ) {
310 st24rc = '13'; 312 st24rc = '13';
311 st24message = 'Invalid voucher nominal'; 313 st24message = 'Invalid voucher nominal';
312 } 314 }
313 else if ( bit39 == 14 ) { 315 else if ( bit39 == 14 ) {
314 st24rc = '14'; 316 st24rc = '14';
315 st24message = 'MSISDN tidak ditemukan'; 317 st24message = 'MSISDN tidak ditemukan';
316 } 318 }
317 else if ( bit39 == 30 ) { 319 else if ( bit39 == 30 ) {
318 st24rc = '40'; 320 st24rc = '40';
319 st24message = 'Format Error'; 321 st24message = 'Format Error';
320 } 322 }
321 else if ( bit39 == 31 ) { 323 else if ( bit39 == 31 ) {
322 st24rc = '40'; 324 st24rc = '40';
323 st24message = 'Kode bank tidak terdaftar'; 325 st24message = 'Kode bank tidak terdaftar';
324 } 326 }
325 else if ( bit39 == 63 ) { 327 else if ( bit39 == 63 ) {
326 st24rc = '40'; 328 st24rc = '40';
327 st24message = 'Reversal denied'; 329 st24message = 'Reversal denied';
328 } 330 }
329 else if ( bit39 == 68 ) { 331 else if ( bit39 == 68 ) {
330 st24rc = '68'; 332 st24rc = '68';
331 st24message = 'Transaksi sedang dalam proses'; 333 st24message = 'Transaksi sedang dalam proses';
332 } 334 }
333 else if ( bit39 == 69 ) { 335 else if ( bit39 == 69 ) {
334 st24rc = '68'; 336 st24rc = '68';
335 st24message = 'Respon Ok lebih dari 24 detik'; 337 st24message = 'Respon Ok lebih dari 24 detik';
336 } 338 }
337 else if ( bit39 == 70 ) { 339 else if ( bit39 == 70 ) {
338 st24rc = '13'; 340 st24rc = '13';
339 st24message = 'Voucher out of stock'; 341 st24message = 'Voucher out of stock';
340 } 342 }
341 else if ( bit39 == 79 ) { 343 else if ( bit39 == 79 ) {
342 st24rc = '14'; 344 st24rc = '14';
343 st24message = 'Phone number is blocked by Telkomsel'; 345 st24message = 'Phone number is blocked by Telkomsel';
344 } 346 }
345 else if ( bit39 == 81 ) { 347 else if ( bit39 == 81 ) {
346 st24rc = '14'; 348 st24rc = '14';
347 st24message = 'Phone number is expired'; 349 st24message = 'Phone number is expired';
348 } 350 }
349 else if ( bit39 == 89 ) { 351 else if ( bit39 == 89 ) {
350 st24rc = '40'; 352 st24rc = '40';
351 st24message = 'Link to billing provider is down'; 353 st24message = 'Link to billing provider is down';
352 } 354 }
353 else if ( bit39 == 91 ) { 355 else if ( bit39 == 91 ) {
354 st24rc = '40'; 356 st24rc = '40';
355 st24message = 'Database problem'; 357 st24message = 'Database problem';
356 } 358 }
357 else if ( bit39 == 92 ) { 359 else if ( bit39 == 92 ) {
358 st24rc = '40'; 360 st24rc = '40';
359 st24message = 'Unable to route transaction'; 361 st24message = 'Unable to route transaction';
360 } 362 }
361 else if ( bit39 == 94 ) { 363 else if ( bit39 == 94 ) {
362 st24rc = '40'; 364 st24rc = '40';
363 st24message = 'Duplicate reversal request'; 365 st24message = 'Duplicate reversal request';
364 } 366 }
365 else if ( resultCode == 0 && bit39 == 0) { 367 else if ( resultCode == 0 && bit39 == 0) {
366 368
367 var sn = '';
368
369 try { 369 try {
370 sn = response.outputParameter.bit61.$value.substring(43); 370 sn = response.outputParameter.bit61.$value.substring(43);
371 } 371 }
372 catch(e) { 372 catch(e) {
373 sn = ''; 373 sn = '';
374 } 374 }
375 375
376 st24message = 'SN=' + sn + '; ' + st24message; 376 st24message = 'SN=' + sn + '; ' + st24message;
377 st24rc = '00'; 377 st24rc = '00';
378 } 378 }
379 379
380 var message = 380 var message =
381 response.outputParameter.resultCode.$value 381 response.outputParameter.resultCode.$value
382 + " " + response.outputParameter.resultDesc.$value 382 + " " + response.outputParameter.resultDesc.$value
383 + "; BIT39: " + response.outputParameter.bit39.$value 383 + "; BIT39: " + response.outputParameter.bit39.$value
384 ; 384 ;
385 385
386 if (response.outputParameter.resultDesc.$value != st24message) { 386 if (response.outputParameter.resultDesc.$value != st24message) {
387 var message = message + " " + st24message; 387 var message = message + " " + st24message;
388 } 388 }
389 389
390 message = message + ' -- Prev Balance: ' + balance; 390 message = message + ' -- Prev Balance: ' + balance;
391 391
392 var parsedResponse = { 392 var parsedResponse = {
393 productCode: response.outputParameter.productCode.$value, 393 productCode: response.outputParameter.productCode.$value,
394 terminal: response.outputParameter.terminal.$value, 394 terminal: response.outputParameter.terminal.$value,
395 transactionType: response.outputParameter.transactionType.$value, 395 transactionType: response.outputParameter.transactionType.$value,
396 billNumber: response.outputParameter.billNumber.$value, 396 billNumber: response.outputParameter.billNumber.$value,
397 amount: response.outputParameter.amount.$value, 397 amount: response.outputParameter.amount.$value,
398 bit61: response.outputParameter.bit61.$value, 398 bit61: response.outputParameter.bit61.$value,
399 reff: response.outputParameter.reff.$value, 399 reff: response.outputParameter.reff.$value,
400 timeStamp: response.outputParameter.timeStamp.$value, 400 timeStamp: response.outputParameter.timeStamp.$value,
401 resultCode: response.outputParameter.resultCode.$value, 401 resultCode: response.outputParameter.resultCode.$value,
402 resultDesc: response.outputParameter.resultDesc.$value, 402 resultDesc: response.outputParameter.resultDesc.$value,
403 bit39: response.outputParameter.bit39.$value, 403 bit39: response.outputParameter.bit39.$value,
404 prevBalance: balance, 404 prevBalance: balance,
405 sn: sn,
406 st24message: st24message,
405 } 407 }
406 408
407 var combinedMessage = ''; 409 var combinedMessage = '';
408 410
409 Object.keys(parsedResponse).forEach(function(key,index) { 411 Object.keys(parsedResponse).forEach(function(key,index) {
410 combinedMessage += key + ': ' + parsedResponse[key] + ' ' 412 combinedMessage += key + ': ' + parsedResponse[key] + '; '
411 }); 413 });
412 combinedMessage = combinedMessage.trim(); 414 combinedMessage = combinedMessage.trim();
413 415
414 parsedResponse.MESSAGE = combinedMessage; 416 parsedResponse.MESSAGE = combinedMessage;
415 417
416 logger.info('Got result: ' + message, {response: response}); 418 logger.info('Got result: ' + message, {response: response});
417 callbackReport(task.requestId, st24rc, st24message + ' -- Prev Balance: ' + balance); 419 callbackReport(task.requestId, st24rc, st24message + ' -- Prev Balance: ' + balance);
418 pushResponseToMongoDb(task, {supplier: config.globals.gateway_name, raw: rawResponse, parsed: parsedResponse}, st24rc); 420 pushResponseToMongoDb(task, {supplier: config.globals.gateway_name, raw: rawResponse, parsed: parsedResponse}, st24rc);
419 } 421 }
420 422
421 function createSignature(params, password) { 423 function createSignature(params, password) {
422 var passwordHash = crypto.createHash('sha256').update(password).digest().toString('hex'); 424 var passwordHash = crypto.createHash('sha256').update(password).digest().toString('hex');
423 var plain = 425 var plain =
424 params.userName 426 params.userName
425 + passwordHash 427 + passwordHash
426 + params.productCode 428 + params.productCode
427 + params.terminal 429 + params.terminal
428 + params.transactionType 430 + params.transactionType
429 + params.billNumber 431 + params.billNumber
430 + params.amount 432 + params.amount
431 + params.reff 433 + params.reff
432 + params.timeStamp; 434 + params.timeStamp;
433 435
434 return crypto.createHash('sha1').update(plain).digest().toString('hex'); 436 return crypto.createHash('sha1').update(plain).digest().toString('hex');
435 } 437 }
436 438
437 function createSignatureForSaldoCheck(params, password) { 439 function createSignatureForSaldoCheck(params, password) {
438 var passwordHash = crypto.createHash('sha256').update(password).digest().toString('hex'); 440 var passwordHash = crypto.createHash('sha256').update(password).digest().toString('hex');
439 var plain = 441 var plain =
440 params.userName 442 params.userName
441 + passwordHash 443 + passwordHash
442 + params.productCode 444 + params.productCode
443 + params.terminal 445 + params.terminal
444 + params.transactionType 446 + params.transactionType
445 + params.reff 447 + params.reff
446 + params.timeStamp; 448 + params.timeStamp;
447 449
448 return crypto.createHash('sha1').update(plain).digest().toString('hex'); 450 return crypto.createHash('sha1').update(plain).digest().toString('hex');
449 } 451 }
450 452
451 function createBillNumber(destination) { 453 function createBillNumber(destination) {
452 return ("0000000000000" + destination).slice(-13); 454 return ("0000000000000" + destination).slice(-13);
453 } 455 }
454 456
455 exports.start = start; 457 exports.start = start;
456 exports.topupRequest = topupRequest; 458 exports.topupRequest = topupRequest;
457 exports.createSignature = createSignature; 459 exports.createSignature = createSignature;