Commit 5b3574125b0e87a4d051f68c72439aa434d52f42

Authored by Adhidarma Hadiwinoto
1 parent b79e0678c2
Exists in master

penyesuaian errorcode ketika gagal koneksi atau proxy error

Showing 1 changed file with 2 additions and 2 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 10
11 var max_retry = 15; 11 var max_retry = 15;
12 var sleep_before_retry = 3000; 12 var sleep_before_retry = 3000;
13 13
14 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; 14 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
15 15
16 function parseSN(message, _config) { 16 function parseSN(message, _config) {
17 17
18 if (!_config) { 18 if (!_config) {
19 _config = config; 19 _config = config;
20 } 20 }
21 21
22 var sn_regex = new RegExp(_config.h2h_out.sn_pattern); 22 var sn_regex = new RegExp(_config.h2h_out.sn_pattern);
23 var sn_match = message.match(sn_regex); 23 var sn_match = message.match(sn_regex);
24 24
25 if (sn_match <= 0) { 25 if (sn_match <= 0) {
26 logger.info('SN Not found: ' + message); 26 logger.info('SN Not found: ' + message);
27 return ''; 27 return '';
28 } 28 }
29 29
30 var sn = sn_match[0]; 30 var sn = sn_match[0];
31 var sn_remove_patterns = _config.h2h_out.sn_remove_patterns.split(_config.h2h_out.sn_remove_patterns_separator); 31 var sn_remove_patterns = _config.h2h_out.sn_remove_patterns.split(_config.h2h_out.sn_remove_patterns_separator);
32 32
33 var count = sn_remove_patterns.length; 33 var count = sn_remove_patterns.length;
34 34
35 for(var i = 0; i < count; i++) { 35 for(var i = 0; i < count; i++) {
36 sn = sn.replace(sn_remove_patterns[i], ''); 36 sn = sn.replace(sn_remove_patterns[i], '');
37 } 37 }
38 38
39 return sn.trim(); 39 return sn.trim();
40 } 40 }
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'], '40', 'Gangguan koneksi ke suplier'); 87 callbackReport(task['requestId'], '89', 'Gangguan koneksi ke suplier');
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'], '40', '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 topupRequest(task, retry - 1); 112 topupRequest(task, retry - 1);
113 }, 60000); 113 }, 60000);
114 114
115 } else { 115 } else {
116 callbackReport(task['requestId'], '68', message); 116 callbackReport(task['requestId'], '68', message);
117 } 117 }
118 return; 118 return;
119 } 119 }
120 120
121 var token = ''; 121 var token = '';
122 if (result.respon.token) { 122 if (result.respon.token) {
123 token = result.respon.token[0]; 123 token = result.respon.token[0];
124 } 124 }
125 125
126 var data_pelanggan = 'NO-DATA'; 126 var data_pelanggan = 'NO-DATA';
127 if (result.respon.data) { 127 if (result.respon.data) {
128 data_pelanggan = result.respon.data[0].replace(/ /g, '-'); 128 data_pelanggan = result.respon.data[0].replace(/ /g, '-');
129 } 129 }
130 130
131 var message = result.respon.pesan[0].replace(/\n/g, ' '); 131 var message = result.respon.pesan[0].replace(/\n/g, ' ');
132 132
133 133
134 if (response_code == '00') { 134 if (response_code == '00') {
135 135
136 var sn = ""; 136 var sn = "";
137 137
138 if (config.h2h_out.parse_sn == 'YES') { 138 if (config.h2h_out.parse_sn == 'YES') {
139 sn = parseSN(message); 139 sn = parseSN(message);
140 } else if (token && data_pelanggan) { 140 } else if (token && data_pelanggan) {
141 sn = token + '/' + data_pelanggan; 141 sn = token + '/' + data_pelanggan;
142 } 142 }
143 143
144 message = 'SN=' + sn + '; ' + message; 144 message = 'SN=' + sn + '; ' + message;
145 } 145 }
146 146
147 callbackReport(task['requestId'], response_code, message); 147 callbackReport(task['requestId'], response_code, message);
148 148
149 }); 149 });
150 }); 150 });
151 } 151 }
152 152
153 function start(_config, _callbackReport, options) { 153 function start(_config, _callbackReport, options) {
154 config = _config; 154 config = _config;
155 callbackReport = _callbackReport 155 callbackReport = _callbackReport
156 156
157 if (options && options.logger) { 157 if (options && options.logger) {
158 logger = options.logger; 158 logger = options.logger;
159 } else { 159 } else {
160 logger = new winston.Logger({ 160 logger = new winston.Logger({
161 transports: [ 161 transports: [
162 new (winston.transports.Console)() 162 new (winston.transports.Console)()
163 ] 163 ]
164 }); 164 });
165 } 165 }
166 } 166 }
167 167
168 function parseResult(message) { 168 function parseResult(message) {
169 var data; 169 var data;
170 xml(message, function(err, result) { 170 xml(message, function(err, result) {
171 data = result; 171 data = result;
172 }); 172 });
173 return data; 173 return data;
174 } 174 }
175 175
176 exports.start = start; 176 exports.start = start;
177 exports.topupRequest = topupRequest; 177 exports.topupRequest = topupRequest;
178 exports.parseResult = parseResult; 178 exports.parseResult = parseResult;
179 exports.parseSN = parseSN; 179 exports.parseSN = parseSN;
180 180