Commit e02146d4722d05185050fad2945b4f91dddc235e

Authored by Adhidarma Hadiwinoto
1 parent 26654005cc
Exists in master

40 jika gagal parsing

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