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