Commit 1173f582ad31945fee39ffe9377e341601022b80

Authored by Adhidarma Hadiwinoto
1 parent 4ae3d637f3
Exists in master

all errors are 40

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