Commit a63583e160cc2fc7c5bc6762175798414f92356b

Authored by Adhidarma Hadiwinoto
1 parent d073f46c90
Exists in master

error 91

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

1 var url = require('url'); 1 var url = require('url');
2 var math = require('mathjs'); 2 var math = require('mathjs');
3 var request = require('request'); 3 var request = require('request');
4 var xml = require("xml2js").parseString; 4 var xml = require("xml2js").parseString;
5 var winston = require('winston'); 5 var winston = require('winston');
6 6
7 var logger; 7 var logger;
8 var config; 8 var config;
9 var callbackReport; 9 var callbackReport;
10 var aaa; 10 var aaa;
11 11
12 var max_retry = 15; 12 var max_retry = 15;
13 var sleep_before_retry = 60 * 1000; 13 var sleep_before_retry = 60 * 1000;
14 14
15 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; 15 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
16 16
17 function parseSN(message, _config) { 17 function parseSN(message, _config) {
18 18
19 if (!_config) { 19 if (!_config) {
20 _config = config; 20 _config = config;
21 } 21 }
22 22
23 var sn_regex = new RegExp(_config.h2h_out.sn_pattern); 23 var sn_regex = new RegExp(_config.h2h_out.sn_pattern);
24 var sn_match = message.match(sn_regex); 24 var sn_match = message.match(sn_regex);
25 25
26 if (sn_match <= 0) { 26 if (sn_match <= 0) {
27 logger.info('SN Not found: ' + message); 27 logger.info('SN Not found: ' + message);
28 return ''; 28 return '';
29 } 29 }
30 30
31 var sn = sn_match[0]; 31 var sn = sn_match[0];
32 var sn_remove_patterns = _config.h2h_out.sn_remove_patterns.split(_config.h2h_out.sn_remove_patterns_separator); 32 var sn_remove_patterns = _config.h2h_out.sn_remove_patterns.split(_config.h2h_out.sn_remove_patterns_separator);
33 33
34 var count = sn_remove_patterns.length; 34 var count = sn_remove_patterns.length;
35 35
36 for(var i = 0; i < count; i++) { 36 for(var i = 0; i < count; i++) {
37 sn = sn.replace(sn_remove_patterns[i], ''); 37 sn = sn.replace(sn_remove_patterns[i], '');
38 } 38 }
39 39
40 return sn.trim(); 40 return sn.trim();
41 } 41 }
42 42
43 function topupRequest(task, retry) { 43 function topupRequest(task, retry) {
44 /* 44 /*
45 if (config.globals.requests_count == undefined) { 45 if (config.globals.requests_count == undefined) {
46 config.globals.requests_count = 1; 46 config.globals.requests_count = 1;
47 } else { 47 } else {
48 config.globals.requests_count++; 48 config.globals.requests_count++;
49 } 49 }
50 50
51 if (config.globals.active_requests_count == undefined) { 51 if (config.globals.active_requests_count == undefined) {
52 config.globals.active_requests_count = 1; 52 config.globals.active_requests_count = 1;
53 } else { 53 } else {
54 config.globals.active_requests_count++; 54 config.globals.active_requests_count++;
55 } 55 }
56 56
57 if (config.globals.max_active_requests_count == undefined) { 57 if (config.globals.max_active_requests_count == undefined) {
58 config.globals.max_active_requests_count = config.globals.active_requests_count; 58 config.globals.max_active_requests_count = config.globals.active_requests_count;
59 } else { 59 } else {
60 config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count); 60 config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count);
61 } 61 }
62 */ 62 */
63 63
64 64
65 if (retry === undefined) { 65 if (retry === undefined) {
66 retry = max_retry; 66 retry = max_retry;
67 } 67 }
68 68
69 var params = { 69 var params = {
70 userid: config.h2h_out.userid, 70 userid: config.h2h_out.userid,
71 pwd: config.h2h_out.password, 71 pwd: config.h2h_out.password,
72 memberreff: task['requestId'], 72 memberreff: task['requestId'],
73 produk: task['remoteProduct'], 73 produk: task['remoteProduct'],
74 tujuan: task['destination'] 74 tujuan: task['destination']
75 }; 75 };
76 logger.info('Creating http request to gateway', {params: params}); 76 logger.info('Creating http request to gateway', {params: params});
77 77
78 request.post({url: config.h2h_out.partner, form: params}, function(err, httpResponse, httpResponseBody) { 78 request.post({url: config.h2h_out.partner, form: params}, function(err, httpResponse, httpResponseBody) {
79 79
80 /* 80 /*
81 config.globals.active_requests_count--; 81 config.globals.active_requests_count--;
82 */ 82 */
83 83
84 if (err) { 84 if (err) {
85 logger.warn('HTTP Request Error (' + task['requestId'] + '): ' + err); 85 logger.warn('HTTP Request Error (' + task['requestId'] + '): ' + err);
86 86
87 callbackReport(task['requestId'], '89', 'Gangguan koneksi ke suplier'); 87 callbackReport(task['requestId'], '91', 'Gangguan koneksi ke suplier: ' + err);
88 return; 88 return;
89 } 89 }
90 90
91 logger.info('Got response from gateway ', {response_body: httpResponseBody}); 91 logger.info('Got response from gateway ', {response_body: httpResponseBody});
92 92
93 if (httpResponseBody.indexOf('502 Proxy Error') >= 0) { 93 if (httpResponseBody.indexOf('502 Proxy Error') >= 0) {
94 callbackReport(task['requestId'], '91', '502 Proxy error'); 94 callbackReport(task['requestId'], '91', '502 Proxy error');
95 return; 95 return;
96 } 96 }
97 97
98 xml(httpResponseBody, function(err, result) { 98 xml(httpResponseBody, function(err, result) {
99 if (err) { 99 if (err) {
100 logger.warn('Gagal parsing XML respon server'); 100 logger.warn('Gagal parsing XML respon server');
101 //topupRequest(task, retry - 1); 101 //topupRequest(task, retry - 1);
102 callbackReport(task['requestId'], '40', 'Gagal parsing XML pada respon server'); 102 callbackReport(task['requestId'], '40', 'Gagal parsing XML pada respon server');
103 return; 103 return;
104 } 104 }
105 105
106 logger.info('Response Data:', {result: result}); 106 logger.info('Response Data:', {result: result});
107 107
108 var response_code = result.respon.rc[0].replace(/^00/, ''); 108 var response_code = result.respon.rc[0].replace(/^00/, '');
109 if (response_code == '54' || response_code == '68') { 109 if (response_code == '54' || response_code == '68') {
110 if (retry) { 110 if (retry) {
111 setTimeout(function() { 111 setTimeout(function() {
112 112
113 logger.info('Sending advice', {task: task}); 113 logger.info('Sending advice', {task: task});
114 114
115 task['remoteProduct'] = 'ADVPLN'; 115 task['remoteProduct'] = 'ADVPLN';
116 topupRequest(task, retry - 1); 116 topupRequest(task, retry - 1);
117 117
118 }, sleep_before_retry); 118 }, sleep_before_retry);
119 119
120 } else { 120 } else {
121 logger.warn('Max retries exceeded', {task: task}); 121 logger.warn('Max retries exceeded', {task: task});
122 callbackReport(task['requestId'], '68', message + '. Max retries exceeded'); 122 callbackReport(task['requestId'], '68', message + '. Max retries exceeded');
123 } 123 }
124 return; 124 return;
125 } 125 }
126 126
127 var token = ''; 127 var token = '';
128 if (result.respon.token) { 128 if (result.respon.token) {
129 token = result.respon.token[0]; 129 token = result.respon.token[0];
130 } 130 }
131 131
132 var data_pelanggan = 'NO-DATA'; 132 var data_pelanggan = 'NO-DATA';
133 if (result.respon.data) { 133 if (result.respon.data) {
134 134
135 try { 135 try {
136 var _data_pelanggan = result.respon.data[0].replace(/ /g, '-'); 136 var _data_pelanggan = result.respon.data[0].replace(/ /g, '-');
137 var fields = _data_pelanggan.split('/'); 137 var fields = _data_pelanggan.split('/');
138 138
139 data_pelanggan = [ 139 data_pelanggan = [
140 fields[0], fields[1], fields[2], fields[3] 140 fields[0], fields[1], fields[2], fields[3]
141 ].join('/'); 141 ].join('/');
142 } 142 }
143 catch(err) { 143 catch(err) {
144 logger.warn('Error parsing data pelanggan', {data_pelanggan: _data_pelanggan}); 144 logger.warn('Error parsing data pelanggan', {data_pelanggan: _data_pelanggan});
145 } 145 }
146 146
147 147
148 } 148 }
149 149
150 var message = result.respon.pesan[0].replace(/\n/g, ' '); 150 var message = result.respon.pesan[0].replace(/\n/g, ' ');
151 151
152 152
153 if (response_code == '00') { 153 if (response_code == '00') {
154 154
155 var sn = ""; 155 var sn = "";
156 156
157 if (config.h2h_out.parse_sn == 'YES') { 157 if (config.h2h_out.parse_sn == 'YES') {
158 sn = parseSN(message); 158 sn = parseSN(message);
159 } else if (token && data_pelanggan) { 159 } else if (token && data_pelanggan) {
160 sn = token + '/' + data_pelanggan; 160 sn = token + '/' + data_pelanggan;
161 } 161 }
162 162
163 message = 'SN=' + sn + '; ' + message; 163 message = 'SN=' + sn + '; ' + message;
164 } 164 }
165 165
166 callbackReport(task['requestId'], response_code, message); 166 callbackReport(task['requestId'], response_code, message);
167 167
168 }); 168 });
169 }); 169 });
170 } 170 }
171 171
172 function start(_config, _callbackReport, options) { 172 function start(_config, _callbackReport, options) {
173 config = _config; 173 config = _config;
174 callbackReport = _callbackReport; 174 callbackReport = _callbackReport;
175 175
176 if (options && options.aaa) { 176 if (options && options.aaa) {
177 aaa = options.aaa; 177 aaa = options.aaa;
178 } 178 }
179 179
180 if (options && options.logger) { 180 if (options && options.logger) {
181 logger = options.logger; 181 logger = options.logger;
182 } else { 182 } else {
183 logger = new winston.Logger({ 183 logger = new winston.Logger({
184 transports: [ 184 transports: [
185 new (winston.transports.Console)() 185 new (winston.transports.Console)()
186 ] 186 ]
187 }); 187 });
188 } 188 }
189 } 189 }
190 190
191 function parseResult(message) { 191 function parseResult(message) {
192 var data; 192 var data;
193 xml(message, function(err, result) { 193 xml(message, function(err, result) {
194 data = result; 194 data = result;
195 }); 195 });
196 return data; 196 return data;
197 } 197 }
198 198
199 exports.start = start; 199 exports.start = start;
200 exports.topupRequest = topupRequest; 200 exports.topupRequest = topupRequest;
201 exports.parseResult = parseResult; 201 exports.parseResult = parseResult;
202 exports.parseSN = parseSN; 202 exports.parseSN = parseSN;
203 203