diff --git a/xmlrpc-server.js b/xmlrpc-server.js index e4d744a..bc2f117 100644 --- a/xmlrpc-server.js +++ b/xmlrpc-server.js @@ -102,13 +102,26 @@ function createDiyHttpXmlRpcServer() { params = getXmlRpcParam(_params); logger.verbose('Got XMLRPC request', {method: method, params: params}); - sendToMaster(params, req.connection.remoteAddress, function(forwardError) { - if (forwardError) { - immediateReply(params, res, '40', forwardError.toString()); - } else { - immediateReply(params, res, '68'); - } - }); + if (method == 'topUpRequest') { + + sendTopUpRequestToMaster(params, req.connection.remoteAddress, function(forwardError) { + if (forwardError) { + immediateReply(params, res, '40', forwardError.toString()); + } else { + immediateReply(params, res, '68'); + } + }); + + } + else if (method == 'topUpInquiry') { + + sendTopUpInquryToMaster(params, req.connection.remoteAddress, res); + + } + else { + res.end('Invalid method'); + } + }) }); @@ -205,7 +218,74 @@ function composeMessage(params, remoteAddress) { } -function sendToMaster(param, remoteAddress, callback) { +function inquiryReply(responseCode, message, responseToClient) { + var responseData = { + 'RESPONSECODE': responseCode, + 'MESSAGE': message + } + + var responseBody = composeXmlRpcResponse(responseData) + logger.info("Sending inquiry response", {responseData: responseData}); + + responseToClient.writeHead(200, {'Content-Type': 'text/xml'}); + responseToClient.end(responseBody); +} + +function parseTopUpInquiryResponse(raw) { + var tokens = raw.split('$'); + if (tokens.length < 2) { + return { + responseCode: '68', + message: 'Gagal parsing hasil inquiry' + } + } + + var responseCode = tokens[0]; + var message = ''; + + for (var i = 1; i < tokens.length; i++) { + message += '$' + tokens[i]; + } + + return { + responseCode: responseCode, + message: message.replace('$', '') + } +} + +function sendTopUpInquryToMaster(params, remoteAddress, responseToClient) { + if (!config.inquiry_url) { + inquiryReply('68', 'Inquiry server tidak terdaftar'); + return; + } + + var requestOpts = { + url: config.inquiry_url, + qs: { + REQUESTID: params.REQUESTID, + MSISDN: param.MSISDN, + PIN: params.PIN, + NO_HP: params.NO_HP, + TRUST: 'NO_TRUST', + IP_ADDR: remoteAddress + } + }; + + request(requestOpts, function(requestError, response, body) { + + if (requestError) { + logger.warn('Error requesting to inquiry server: ' + requestError); + inquiryReply('68', 'Gagal konek ke inquiry server', responseToClient); + return; + } + + logger.info('Got response from inquiry server', {body: body, requestOpts: requestOpts}); + var params = parseTopUpInquiryResponse(body); + inquiryReply(params.responseCode, params.message, responseToClient); + }) +} + +function sendTopUpRequestToMaster(param, remoteAddress, callback) { /* var smscidSuffix = '99999999999999' + String(Math.round(Math.random() * 99999999999999));