diff --git a/partner-kospinjasa.js b/partner-kospinjasa.js index 4482ca9..166d97b 100644 --- a/partner-kospinjasa.js +++ b/partner-kospinjasa.js @@ -83,7 +83,15 @@ function topupRequestSoap(task, params, retry) { logger.info('Requesting to service', {url: config.h2h_out.partner, params: _params}); soapClient.apih2h.apih2hPort.billpayment({ inputCheck: _params }, function(err, result) { - logger.info('Got response', {lastRequest: soapClient.lastRequest, lastMessage: soapClient.lastMessage, lastEndpoint: soapClient.lastEndpoint}); + logger.verbose( + 'Got response', + { + lastEndpoint: soapClient.lastEndpoint, + lastRequest: soapClient.lastRequest, + lastMessage: soapClient.lastMessage, + lastResponse: soapClient.lastResponse, + } + ); if (err) { logger.warn('Error requesting service', {err: err}); @@ -91,62 +99,128 @@ function topupRequestSoap(task, params, retry) { return; } - var responseMessageToST24 = result.outputParameter.resultCode.$value + ' - ' + result.outputParameter.resultDesc.$value; - - logger.info('Got result: ' + responseMessageToST24, {result: result}); - - callbackReport(task.requestId, '68', responseMessageToST24); + topupResponseHandler(task, result); }); }); } -function topupRequestSoapDIY(task, params, retry) { - var message = whiskers.render(soapTemplate, params); - logger.verbose("Generating SOAP message", {message: message}); - - var partnerUrl = url.parse(config.h2h_out.partner_endpoint); - var postRequest = { - host: partnerUrl.hostname, - path: partnerUrl.path, - port: partnerUrl.port, - method: "POST", - headers: { - 'Content-Type': 'text/xml', - 'Content-Length': Buffer.byteLength(message), - //'SOAPAction': "urn:apih2h#billpayment" - } - }; - - logger.info('POST to partner', {postRequest: postRequest}); - var req = http.request(postRequest, function( res ) { - - logger.verbose('Request status code: ' + res.statusCode ); - var buffer = ""; - - res.on( "data", function( data ) { - buffer = buffer + data; - }); - - res.on( "end", function( data ) { - topupResponseHandler(buffer, task); - }); +function topupResponseHandler(task, response) { + var st24rc = '68'; + var st24message = response.outputParameter.resultDesc.$value; - }); - - req.on('error', function(e) { - logger.warn('problem with request: ' + e.message); - callbackReport(task.requestId, '68', e.message); + if ( response.outputParameter.resultCode.$value == '001' ) { + // product disabled + st24rc = '13'; + } + else if ( response.outputParameter.resultCode.$value == '002' ) { + // prodcode disable + st24rc = '13'; + } + else if ( response.outputParameter.resultCode.$value == '003' ) { + // duplicate reff + st24rc = '55'; + } + else if ( response.outputParameter.resultCode.$value == '004' ) { + // not enough balance + st24rc = '40'; + } + else if ( response.outputParameter.resultCode.$value == '005' ) { + // username blocked + st24rc = '40'; + } + else if ( response.outputParameter.resultCode.$value == '006' ) { + // not exists username + st24rc = '40'; + } + else if ( response.outputParameter.resultCode.$value == '011' ) { + // invalid request + st24rc = '40' + } + else if ( response.outputParameter.resultCode.$value == '012' ) { + // no route to host + st24rc = '40' + } + else if ( response.outputParameter.resultCode.$value == '013' ) { + // invalid signature + st24rc = '40' + } + else if ( response.outputParameter.bit39.$value == '06' ) { + st24rc = '40'; + st24message = 'Error Transaksi ditolak karena terjadi error di H2H dengan response code diluar daftar ini. Silahkan hubungi H2H'; + } + else if ( response.outputParameter.bit39.$value == '12' ) { + st24rc = '40'; + st24message = 'Invalid Transaction Transaksi ditolak karena flow transaksi tidak valid'; + } + else if ( response.outputParameter.bit39.$value == '13' ) { + st24rc = '13'; + st24message = 'Invalid voucher nominal'; + } + else if ( response.outputParameter.bit39.$value == '14' ) { + st24rc = '14'; + st24message = 'MSISDN tidak ditemukan'; + } + else if ( response.outputParameter.bit39.$value == '30' ) { + st24rc = '40'; + st24message = 'Format Error'; + } + else if ( response.outputParameter.bit39.$value == '31' ) { + st24rc = '40'; + st24message = 'Kode bank tidak terdaftar'; + } + else if ( response.outputParameter.bit39.$value == '63' ) { + st24rc = '40'; + st24message = 'Reversal denied'; + } + else if ( response.outputParameter.bit39.$value == '68' ) { + st24rc = '68'; + st24message = 'Transaksi sedang dalam proses'; + } + else if ( response.outputParameter.bit39.$value == '69' ) { + st24rc = '68'; + st24message = 'Respon Ok lebih dari 24 detik'; + } + else if ( response.outputParameter.bit39.$value == '70' ) { + st24rc = '13'; + st24message = 'Voucher out of stock'; + } + else if ( response.outputParameter.bit39.$value == '79' ) { + st24rc = '14'; + st24message = 'Phone number is blocked by Telkomsel'; + } + else if ( response.outputParameter.bit39.$value == '81' ) { + st24rc = '14'; + st24message = 'Phone number is expired'; + } + else if ( response.outputParameter.bit39.$value == '89' ) { + st24rc = '40'; + st24message = 'Link to billing provider is down'; + } + else if ( response.outputParameter.bit39.$value == '91' ) { + st24rc = '40'; + st24message = 'Database problem'; + } + else if ( response.outputParameter.bit39.$value == '92' ) { + st24rc = '40'; + st24message = 'Unable to route transaction'; + } + else if ( response.outputParameter.bit39.$value == '94' ) { + st24rc = '40'; + st24message = 'Duplicate reversal request'; + } - topupRequestRetry(task); - }); + var message = + response.outputParameter.resultCode.$value + + " " + response.outputParameter.resultDesc.$value + + "; " + response.outputParameter.bit39.$value + ; - req.write(message); - req.end(); -} + if (response.outputParameter.resultDesc.$value != st24message) { + var message = message + " " + st24message; + } -function topupResponseHandler(response, task) { - logger.verbose('Got response', {response: response, task: task}); - callbackReport(task.requestId, '68', 'Got response'); + logger.info('Got result: ' + message, {result: result}); + callbackReport(task.requestId, st24rc, st24message); } function topupRequestRetry(task) { @@ -162,11 +236,8 @@ function topupRequestRetry(task) { } - - function createSignature(params, password) { var passwordHash = crypto.createHash('sha256').update(password).digest().toString('hex'); - var plain = params.userName + passwordHash @@ -178,13 +249,7 @@ function createSignature(params, password) { + params.reff + params.timeStamp; - var result = crypto.createHash('sha1').update(plain).digest().toString('hex'); - - if (logger) { - logger.verbose('Calculating signature', {plain: plain, result: result, params: params, password: password}); - } - - return result; + return crypto.createHash('sha1').update(plain).digest().toString('hex'); } function createBillNumber(destination) {