diff --git a/partner-bayarkilat.js b/partner-bayarkilat.js index 2187408..d27b4de 100644 --- a/partner-bayarkilat.js +++ b/partner-bayarkilat.js @@ -8,6 +8,9 @@ var aaa; var callbackReport; var logger; +var maxCheckRetry = 20; +var delayBeforeCheckRetry = 30 * 1000; + process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; function start(_config, _callbackReport, options) { @@ -29,21 +32,27 @@ function start(_config, _callbackReport, options) { } } - -function topupRequest(task, retry) { - aaa.insertTaskToMongoDb(task); +function createRequestOptions(methodName, task) { + if (('PURCHASE', 'CHECKING').indexOf(methodName) < 0) { + return; + } var partnerUrl = url.parse(config.h2h_out.partner); var product = prepareRemoteProductCode(task.remoteProduct); + var destination = task.destination; + if (methodName == 'CHECKING') { + destination = paddingDestination(destination); + } + var options = { url: config.h2h_out.partner, qs: { - request: 'PURCHASE*' + request: methodName + '*' + task.requestId + '*' + product.product + '*' + product.productDetail + '*' - + task.destination + '*' + + destination + '*' + product.nominal + '*' + '0*' + config.h2h_out.noid + '*' @@ -52,6 +61,41 @@ function topupRequest(task, retry) { } }; + return options; +} + +function topupCheck(task, retry) { + if (retry === null || retry === undefined) { + retry = maxCheckRetry + 1; + } + + retry = retry - 1; + + if (retry < 0) { + var message = 'Max retry check transaction retry exceeded'; + var response = { + raw: message, + parsed: { + MESSAGE: message + } + } + aaa.pushResponseToMongoDb(task, response, '68'); + callbackReport(task.requestId, '68', message); + return; + } + + requestToPartner('CHECKING', task, retry); +} + +function topupRequest(task) { + requestToPartner('PURCHASE', task); +} + +function requestToPartner(methodName, task, retry) { + aaa.insertTaskToMongoDb(task); + + var options = createRequestOptions(methodName, task); + logger.info('Requesting to partner', {requestOption: options}); request(options, function(error, response, body) { if (error) { @@ -67,6 +111,13 @@ function topupRequest(task, retry) { } aaa.pushResponseToMongoDb(task, _response, '68'); + setTimeout( + topupCheck, + delayBeforeCheckRetry, + task, + retry + ); + return; } @@ -86,6 +137,13 @@ function topupRequest(task, retry) { } aaa.pushResponseToMongoDb(task, _response, '68'); + setTimeout( + topupCheck, + delayBeforeCheckRetry, + task, + retry + ); + return; }