diff --git a/partner-trustlink.js b/partner-trustlink.js index f6f911a..708e1fa 100644 --- a/partner-trustlink.js +++ b/partner-trustlink.js @@ -82,7 +82,7 @@ function createXmlPayload(task, userid, password) { return "<?xml version=\"1.0\" ?>\n" + xml(payload); } -function topupRequest(task, retry) { +function topupRequestHit(task, retry) { if (retry === undefined) { retry = max_retry; } @@ -136,7 +136,7 @@ function directResponseHandler(body, task) { xml2js(body, function (err, result) { if (err) { logger.warn('Error parsing xml', {body: body}); - callbackReport(request_id, '68', buffer); + callbackReport(task.requestId, '68', buffer); return; } @@ -148,34 +148,18 @@ function directResponseHandler(body, task) { var status = result.evoucher.result[0].trim(); var message = result.evoucher.value[0].string[0].trim(); - if (status == '0') { - if (message.indexOf('SUKSES') >= 0) { - /* - var sn = getSNFromMessage(message); - message = 'SN=' + sn + '; ' + message; - */ - - response_code = '68'; - } - else if (message.indexOf('GAGAL') >= 0) { - response_code = '40'; - } - else { - response_code = '68'; - } - - } - else if (status == "-1") { - response_code = '40'; - + if (message.indexOf('SUKSES') >= 0) { /* - var new_response_code = responseCodeFromMessage(message); - if (new_response_code) { - response_code = new_response_code; - } + var sn = getSNFromMessage(message); + message = 'SN=' + sn + '; ' + message; */ - } else { + response_code = '68'; + } + else if (message.indexOf('GAGAL') >= 0) { + response_code = '40'; + } + else { response_code = '68'; } @@ -193,6 +177,37 @@ function getSNFromMessage(message) { } } +function topupRequest(task, retry) { + var key = 'DUPCHECK.gw:' + config.globals.gateway_name + '.prod:' + task.remoteProduct + '.dest:' + task.destination + '.date:' + strftime('%Y%m%d', new Date); + redisClient.get(key, function(err, data) { + if (err) { + callbackReport(task.requestId, '40', 'Gagal cek anti transaksi duplikat (redis error)'); + return; + } + + if (!data) { + + redisClient.set(key, JSON.stringify(task)); + redisClient.expire(key, 3600 * 24 * 2); + + } else { + + try { + var taskOnRedis = JSON.parse(data); + if (task.requestId == taskOnRedis.requestId) { + topupRequestHit(task, retry); + } else { + callbackReport(task.requestId, '55', 'Transaksi duplikat') + } + } + catch(errJSONParse) { + callbackReport(task.requestId, '68', "error parsing json"); + } + } + + }); +} + exports.start = start; exports.topupRequest = topupRequest; exports.calculateSignature = calculateSignature;