Commit e02146d4722d05185050fad2945b4f91dddc235e
1 parent
26654005cc
Exists in
master
40 jika gagal parsing
Showing 1 changed file with 2 additions and 1 deletions Inline Diff
httppulsakita.js
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 |