Commit 4ae3d637f30283cf81728053960e73df6b3be938

Authored by Adhidarma Hadiwinoto
1 parent ed701973dd
Exists in master

require http

Showing 1 changed file with 1 additions and 0 deletions Inline Diff

1 var winston = require('winston'); 1 var winston = require('winston');
2 var request = require('request'); 2 var request = require('request');
3 var xmlrpc = require('xmlrpc'); 3 var xmlrpc = require('xmlrpc');
4 var url = require('url'); 4 var url = require('url');
5 var http = require('http');
5 6
6 var max_retry = 3; 7 var max_retry = 3;
7 var sleep_before_retry = 2000; 8 var sleep_before_retry = 2000;
8 9
9 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; 10 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
10 11
11 var config; 12 var config;
12 var callbackReport; 13 var callbackReport;
13 var aaa; 14 var aaa;
14 var logger; 15 var logger;
15 var options; 16 var options;
16 17
17 function start(_config, _callbackReport, options) { 18 function start(_config, _callbackReport, options) {
18 config = _config; 19 config = _config;
19 callbackReport = _callbackReport 20 callbackReport = _callbackReport
20 21
21 if (options && options.aaa) { 22 if (options && options.aaa) {
22 aaa = options.aaa; 23 aaa = options.aaa;
23 } 24 }
24 25
25 if (options && options.logger) { 26 if (options && options.logger) {
26 logger = options.logger; 27 logger = options.logger;
27 } else { 28 } else {
28 logger = new winston.Logger({ 29 logger = new winston.Logger({
29 transports: [ 30 transports: [
30 new (winston.transports.Console)() 31 new (winston.transports.Console)()
31 ] 32 ]
32 }); 33 });
33 } 34 }
34 35
35 createHttpReportServer(); 36 createHttpReportServer();
36 } 37 }
37 38
38 function createHttpReportServer() { 39 function createHttpReportServer() {
39 var httpServer = http.createServer(function(request, response) { 40 var httpServer = http.createServer(function(request, response) {
40 var qs = url.parse(request.url, true).query; 41 var qs = url.parse(request.url, true).query;
41 var path = url.parse(request.url).pathname; 42 var path = url.parse(request.url).pathname;
42 43
43 logger.info('Got reverse report from partner', {path: path, qs: qs}); 44 logger.info('Got reverse report from partner', {path: path, qs: qs});
44 response.end('OK'); 45 response.end('OK');
45 46
46 /* 47 /*
47 var trxid; 48 var trxid;
48 try { 49 try {
49 trxid = qs.transid; 50 trxid = qs.transid;
50 } 51 }
51 catch(err) { 52 catch(err) {
52 } 53 }
53 54
54 if (trxid) { 55 if (trxid) {
55 logger.info('Requesting advice from webreport', {trxid: trxid}) 56 logger.info('Requesting advice from webreport', {trxid: trxid})
56 cekstatus.advice({trxid: trxid}, callbackFromWebReport); 57 cekstatus.advice({trxid: trxid}, callbackFromWebReport);
57 } 58 }
58 */ 59 */
59 60
60 }); 61 });
61 62
62 httpServer.listen(config.h2h_out.listen_port, function() { 63 httpServer.listen(config.h2h_out.listen_port, function() {
63 logger.info('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port); 64 logger.info('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port);
64 }); 65 });
65 } 66 }
66 67
67 function topupRequestHttpGet(task, retry) { 68 function topupRequestHttpGet(task, retry) {
68 69
69 var options = { 70 var options = {
70 method: 'GET', 71 method: 'GET',
71 url: config.h2h_out.partner, 72 url: config.h2h_out.partner,
72 qs: { 73 qs: {
73 id: config.h2h_out.userid, 74 id: config.h2h_out.userid,
74 pin: config.h2h_out.pin, 75 pin: config.h2h_out.pin,
75 user: config.h2h_out.user, 76 user: config.h2h_out.user,
76 pass: config.h2h_put.password, 77 pass: config.h2h_put.password,
77 kodeproduk: task.remoteProduct, 78 kodeproduk: task.remoteProduct,
78 tujuan: task.destination, 79 tujuan: task.destination,
79 idtrx: task.requestId 80 idtrx: task.requestId
80 } 81 }
81 } 82 }
82 83
83 request(options, function(err, res, body) { 84 request(options, function(err, res, body) {
84 }); 85 });
85 } 86 }
86 87
87 function topupRequestXMLRPC(task, retry) { 88 function topupRequestXMLRPC(task, retry) {
88 var partnerUrl = url.parse(config.h2h_out.partner); 89 var partnerUrl = url.parse(config.h2h_out.partner);
89 var clientOptions = { 90 var clientOptions = {
90 host: partnerUrl.hostname 91 host: partnerUrl.hostname
91 , port: partnerUrl.port 92 , port: partnerUrl.port
92 , path: partnerUrl.pathname 93 , path: partnerUrl.pathname
93 }; 94 };
94 logger.info('Preparing XMLRPC client options', {options: clientOptions}); 95 logger.info('Preparing XMLRPC client options', {options: clientOptions});
95 96
96 var client; 97 var client;
97 if (partnerUrl.protocol == 'https:') { 98 if (partnerUrl.protocol == 'https:') {
98 client = xmlrpc.createSecureClient(clientOptions); 99 client = xmlrpc.createSecureClient(clientOptions);
99 } else { 100 } else {
100 client = xmlrpc.createClient(clientOptions); 101 client = xmlrpc.createClient(clientOptions);
101 } 102 }
102 103
103 var params = { 104 var params = {
104 MSISDN: config.h2h_out.userid, 105 MSISDN: config.h2h_out.userid,
105 REQUESTID: task.requestId, 106 REQUESTID: task.requestId,
106 PIN: config.h2h_out.password, 107 PIN: config.h2h_out.password,
107 NOHP: task.destination, 108 NOHP: task.destination,
108 NOM: task.remoteProduct 109 NOM: task.remoteProduct
109 }; 110 };
110 111
111 var methodName = 'topUpRequest'; 112 var methodName = 'topUpRequest';
112 logger.info('Preparing XMLRPC client method', {methodname: methodName, params: params}); 113 logger.info('Preparing XMLRPC client method', {methodname: methodName, params: params});
113 114
114 client.methodCall(methodName, [ params ], function (error, value) { 115 client.methodCall(methodName, [ params ], function (error, value) {
115 // Results of the method response 116 // Results of the method response
116 if (error) { 117 if (error) {
117 118
118 logger.warn('XMLRPC Client Error', {requestId: task['requestId'], errorMessage: error}); 119 logger.warn('XMLRPC Client Error', {requestId: task['requestId'], errorMessage: error});
119 120
120 if (retry) { 121 if (retry) {
121 122
122 logger.info('Retrying topUpRequest (' + retry + ')'); 123 logger.info('Retrying topUpRequest (' + retry + ')');
123 setTimeout(function() { 124 setTimeout(function() {
124 topupRequest(task, retry - 1); 125 topupRequest(task, retry - 1);
125 }, sleep_before_retry); 126 }, sleep_before_retry);
126 127
127 } else { 128 } else {
128 callbackReport(task['requestId'], '91', 'Gangguan koneksi ke suplier: ' + error); 129 callbackReport(task['requestId'], '91', 'Gangguan koneksi ke suplier: ' + error);
129 } 130 }
130 return; 131 return;
131 } 132 }
132 133
133 logger.info('Got XMLRPC response from partner for', {response_method: methodName, response_message: value}); 134 logger.info('Got XMLRPC response from partner for', {response_method: methodName, response_message: value});
134 135
135 if (value['RESPONSECODE'] == '00' && config.h2h_out.parse_sn == 'YES') { 136 if (value['RESPONSECODE'] == '00' && config.h2h_out.parse_sn == 'YES') {
136 value['MESSAGE'] = 'SN=' + parseSN(value['MESSAGE']) + '; ' + value['MESSAGE']; 137 value['MESSAGE'] = 'SN=' + parseSN(value['MESSAGE']) + '; ' + value['MESSAGE'];
137 } 138 }
138 139
139 callbackReport(value['REQUESTID'], value['RESPONSECODE'], value['MESSAGE']); 140 callbackReport(value['REQUESTID'], value['RESPONSECODE'], value['MESSAGE']);
140 }); 141 });
141 } 142 }
142 143
143 function topupRequest(task, retry) { 144 function topupRequest(task, retry) {
144 topupRequestXMLRPC(task, retry); 145 topupRequestXMLRPC(task, retry);
145 } 146 }
146 147
147 exports.start = start; 148 exports.start = start;
148 exports.topupRequest = topupRequest; 149 exports.topupRequest = topupRequest;
149 150