Commit 88bd9e5f661bdf97884ed9a233cee17427db9e37
1 parent
fd60275efa
Exists in
master
initMongoClient
Showing 1 changed file with 25 additions and 0 deletions Inline Diff
partner-sc.js
1 | var fs = require('fs'); | 1 | var fs = require('fs'); |
2 | var https = require('https'); | 2 | var https = require('https'); |
3 | var http = require('http'); | 3 | var http = require('http'); |
4 | var url = require('url'); | 4 | var url = require('url'); |
5 | var request = require('request'); | 5 | var request = require('request'); |
6 | var xml2js = require('xml2js').parseString; | 6 | var xml2js = require('xml2js').parseString; |
7 | var strftime = require('strftime'); | 7 | var strftime = require('strftime'); |
8 | var math = require('mathjs'); | 8 | var math = require('mathjs'); |
9 | var winston = require('winston'); | 9 | var winston = require('winston'); |
10 | var cekstatus = require('./cekstatus.js'); | 10 | var cekstatus = require('./cekstatus.js'); |
11 | var mongoClient = require('mongodb').MongoClient; | ||
12 | var mongodb; | ||
11 | 13 | ||
12 | var config; | 14 | var config; |
13 | var httpServer; | 15 | var httpServer; |
14 | var aaa; | 16 | var aaa; |
15 | var logger; | 17 | var logger; |
16 | var callbackReport; | 18 | var callbackReport; |
17 | 19 | ||
18 | process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; | 20 | process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; |
19 | 21 | ||
20 | var sleep_before_retry = 30000; | 22 | var sleep_before_retry = 30000; |
21 | 23 | ||
22 | var logTag = __filename.split('/').reverse()[0]; | 24 | var logTag = __filename.split('/').reverse()[0]; |
23 | 25 | ||
26 | unction initMongoClient() { | ||
27 | if (!config.mongodb || !config.mongodb.url) { | ||
28 | return; | ||
29 | } | ||
30 | |||
31 | try { | ||
32 | var url = config.mongodb.url; | ||
33 | |||
34 | mongoClient.connect(url, function(err, db) { | ||
35 | if (err) { | ||
36 | logger.warn('Failed to connect to mongodb', {err: err}); | ||
37 | return; | ||
38 | } | ||
39 | mongodb = db; | ||
40 | logger.info('MongoDB connected'); | ||
41 | }); | ||
42 | } | ||
43 | catch(err) { | ||
44 | logger.warn('Exception when connecting to mongodb', {err: err, url: url}); | ||
45 | } | ||
46 | |||
47 | } | ||
48 | |||
24 | function topupRequest(task) { | 49 | function topupRequest(task) { |
25 | 50 | ||
26 | var ts = strftime('%Y%m%d%H%M%S', new Date()); | 51 | var ts = strftime('%Y%m%d%H%M%S', new Date()); |
27 | 52 | ||
28 | var data = | 53 | var data = |
29 | config.h2h_out.userid | 54 | config.h2h_out.userid |
30 | + '|' + config.h2h_out.password | 55 | + '|' + config.h2h_out.password |
31 | + '|' + task['remoteProduct'] | 56 | + '|' + task['remoteProduct'] |
32 | + '|' + task['destination'] + '|0'; | 57 | + '|' + task['destination'] + '|0'; |
33 | 58 | ||
34 | var options = { | 59 | var options = { |
35 | url: config.h2h_out.partner, | 60 | url: config.h2h_out.partner, |
36 | qs: { | 61 | qs: { |
37 | ts: ts, | 62 | ts: ts, |
38 | data: data, | 63 | data: data, |
39 | reffid: task['requestId'] | 64 | reffid: task['requestId'] |
40 | } | 65 | } |
41 | }; | 66 | }; |
42 | logger.info('Creating http request', {options: options}); | 67 | logger.info('Creating http request', {options: options}); |
43 | 68 | ||
44 | request(options, function (error, response, body) { | 69 | request(options, function (error, response, body) { |
45 | var responseCode = '40'; | 70 | var responseCode = '40'; |
46 | var responseMessage = 'Gateway Error'; | 71 | var responseMessage = 'Gateway Error'; |
47 | 72 | ||
48 | if (error) { | 73 | if (error) { |
49 | 74 | ||
50 | logger.warn('HTTP REQUEST ERROR', error); | 75 | logger.warn('HTTP REQUEST ERROR', error); |
51 | callbackReport(task['requestId'], '89', 'HTTP REQUEST ERROR (' + error + ')'); | 76 | callbackReport(task['requestId'], '89', 'HTTP REQUEST ERROR (' + error + ')'); |
52 | 77 | ||
53 | } else if (response.statusCode != 200) { | 78 | } else if (response.statusCode != 200) { |
54 | 79 | ||
55 | var error_message = 'GATEWAY ERROR (HTTP RESPONSE CODE: ' + response.statusCode + ')'; | 80 | var error_message = 'GATEWAY ERROR (HTTP RESPONSE CODE: ' + response.statusCode + ')'; |
56 | logger.warn(error_message); | 81 | logger.warn(error_message); |
57 | callbackReport(task['requestId'], '91', error_message); | 82 | callbackReport(task['requestId'], '91', error_message); |
58 | 83 | ||
59 | } else { | 84 | } else { |
60 | 85 | ||
61 | logger.info('DIRECT RESPONSE', {body: body}); | 86 | logger.info('DIRECT RESPONSE', {body: body}); |
62 | 87 | ||
63 | xml2js(body, function (err, result) { | 88 | xml2js(body, function (err, result) { |
64 | if (err) { | 89 | if (err) { |
65 | callbackReport(task['requestId'], '40', body); | 90 | callbackReport(task['requestId'], '40', body); |
66 | } else { | 91 | } else { |
67 | var directResponse = result; | 92 | var directResponse = result; |
68 | logger.info(directResponse); | 93 | logger.info(directResponse); |
69 | 94 | ||
70 | try { | 95 | try { |
71 | var result_price; | 96 | var result_price; |
72 | try { | 97 | try { |
73 | result_price = directResponse.Result.Price[0].trim(); | 98 | result_price = directResponse.Result.Price[0].trim(); |
74 | } | 99 | } |
75 | catch(err) { | 100 | catch(err) { |
76 | result_price = 0; | 101 | result_price = 0; |
77 | } | 102 | } |
78 | 103 | ||
79 | var result_error_message; | 104 | var result_error_message; |
80 | try { | 105 | try { |
81 | result_error_message = directResponse.Result.ErrorMsg[0].trim(); | 106 | result_error_message = directResponse.Result.ErrorMsg[0].trim(); |
82 | } | 107 | } |
83 | catch(err) { | 108 | catch(err) { |
84 | result_error_message = ''; | 109 | result_error_message = ''; |
85 | } | 110 | } |
86 | 111 | ||
87 | var resultCode = directResponse.Result.ResultCode[0].trim(); | 112 | var resultCode = directResponse.Result.ResultCode[0].trim(); |
88 | 113 | ||
89 | responseMessage = | 114 | responseMessage = |
90 | 'ResultCode: ' + resultCode | 115 | 'ResultCode: ' + resultCode |
91 | + ' | ErrorMsg: ' + result_error_message | 116 | + ' | ErrorMsg: ' + result_error_message |
92 | + ' | DateTime: ' + directResponse.Result.DateTime[0].trim() | 117 | + ' | DateTime: ' + directResponse.Result.DateTime[0].trim() |
93 | + ' | nsm: ' + directResponse.Result.nsm[0].trim() | 118 | + ' | nsm: ' + directResponse.Result.nsm[0].trim() |
94 | + ' | idpel: ' + directResponse.Result.idpel[0].trim() | 119 | + ' | idpel: ' + directResponse.Result.idpel[0].trim() |
95 | + ' | reffid: ' + directResponse.Result.reffid[0].trim() | 120 | + ' | reffid: ' + directResponse.Result.reffid[0].trim() |
96 | + ' | TransID: ' + directResponse.Result.TransID[0].trim() | 121 | + ' | TransID: ' + directResponse.Result.TransID[0].trim() |
97 | + ' | reff_switching: ' + directResponse.Result.reff_switching[0].trim() | 122 | + ' | reff_switching: ' + directResponse.Result.reff_switching[0].trim() |
98 | + ' | amount_trx: ' + directResponse.Result.amount_trx[0].trim() | 123 | + ' | amount_trx: ' + directResponse.Result.amount_trx[0].trim() |
99 | + ' | token: ' + directResponse.Result.token[0].trim() | 124 | + ' | token: ' + directResponse.Result.token[0].trim() |
100 | + ' | PrevBalance: ' + directResponse.Result.PrevBalance[0].trim() | 125 | + ' | PrevBalance: ' + directResponse.Result.PrevBalance[0].trim() |
101 | + ' | Price: ' + result_price | 126 | + ' | Price: ' + result_price |
102 | + ' | EndBalance: ' + directResponse.Result.EndBalance[0].trim() | 127 | + ' | EndBalance: ' + directResponse.Result.EndBalance[0].trim() |
103 | ; | 128 | ; |
104 | 129 | ||
105 | logger.info('Response message: ' + responseMessage); | 130 | logger.info('Response message: ' + responseMessage); |
106 | 131 | ||
107 | if (aaa) { | 132 | if (aaa) { |
108 | // update balance | 133 | // update balance |
109 | aaa.updateBalance(directResponse.Result.EndBalance[0]); | 134 | aaa.updateBalance(directResponse.Result.EndBalance[0]); |
110 | } | 135 | } |
111 | 136 | ||
112 | if (resultCode == '0000') { | 137 | if (resultCode == '0000') { |
113 | var nama_pelanggan = directResponse.Result.nama_pel[0].trim(); | 138 | var nama_pelanggan = directResponse.Result.nama_pel[0].trim(); |
114 | nama_pelanggan = nama_pelanggan.replace(/-\/-/g, '-'); | 139 | nama_pelanggan = nama_pelanggan.replace(/-\/-/g, '-'); |
115 | var sn = directResponse.Result.token[0].trim() + '/' + nama_pelanggan + '/' + directResponse.Result.tarif[0].trim() + 'VA/' + directResponse.Result.jml_daya[0].trim(); | 140 | var sn = directResponse.Result.token[0].trim() + '/' + nama_pelanggan + '/' + directResponse.Result.tarif[0].trim() + 'VA/' + directResponse.Result.jml_daya[0].trim(); |
116 | sn = sn.replace(/\s/g, '-'); | 141 | sn = sn.replace(/\s/g, '-'); |
117 | 142 | ||
118 | responseMessage = 'SN=' + sn + '; ' + responseMessage; | 143 | responseMessage = 'SN=' + sn + '; ' + responseMessage; |
119 | logger.info('New response message: ' + responseMessage); | 144 | logger.info('New response message: ' + responseMessage); |
120 | } | 145 | } |
121 | 146 | ||
122 | var pendingResultCode = ['0005', '0012', '0068', '0090', '0063', '0018', '0096']; | 147 | var pendingResultCode = ['0005', '0012', '0068', '0090', '0063', '0018', '0096']; |
123 | if (pendingResultCode.indexOf(resultCode) != -1) { | 148 | if (pendingResultCode.indexOf(resultCode) != -1) { |
124 | callbackReport(task['requestId'], '68', responseMessage); | 149 | callbackReport(task['requestId'], '68', responseMessage); |
125 | 150 | ||
126 | logger.info('Got pending status, requesting advice from webreport in ' + sleep_before_retry + 'ms'); | 151 | logger.info('Got pending status, requesting advice from webreport in ' + sleep_before_retry + 'ms'); |
127 | setTimeout(function () { | 152 | setTimeout(function () { |
128 | cekstatus.advice({trxid: directResponse.Result.TransID[0].trim()}, callbackFromWebReport); | 153 | cekstatus.advice({trxid: directResponse.Result.TransID[0].trim()}, callbackFromWebReport); |
129 | }, sleep_before_retry); | 154 | }, sleep_before_retry); |
130 | 155 | ||
131 | return; | 156 | return; |
132 | } | 157 | } |
133 | 158 | ||
134 | responseCode = resultCode.replace(/^00/, ""); | 159 | responseCode = resultCode.replace(/^00/, ""); |
135 | 160 | ||
136 | if (result_error_message == 'Inq - APLICATION SERVER RESPONSE TIMEOUT') { | 161 | if (result_error_message == 'Inq - APLICATION SERVER RESPONSE TIMEOUT') { |
137 | responseCode = '91'; | 162 | responseCode = '91'; |
138 | } | 163 | } |
139 | 164 | ||
140 | } | 165 | } |
141 | catch(err) { | 166 | catch(err) { |
142 | responseCode = '40'; | 167 | responseCode = '40'; |
143 | responseMessage = 'Invalid response from gateway'; | 168 | responseMessage = 'Invalid response from gateway'; |
144 | } | 169 | } |
145 | } | 170 | } |
146 | 171 | ||
147 | callbackReport(task['requestId'], responseCode, responseMessage); | 172 | callbackReport(task['requestId'], responseCode, responseMessage); |
148 | }); | 173 | }); |
149 | } | 174 | } |
150 | 175 | ||
151 | //callbackReport(task['requestId'], responseCode, responseMessage); | 176 | //callbackReport(task['requestId'], responseCode, responseMessage); |
152 | }); | 177 | }); |
153 | } | 178 | } |
154 | 179 | ||
155 | function callbackFromWebReport(status) { | 180 | function callbackFromWebReport(status) { |
156 | if (!status) { | 181 | if (!status) { |
157 | logger.warn('Advice from webreport return empty status'); | 182 | logger.warn('Advice from webreport return empty status'); |
158 | return; | 183 | return; |
159 | } | 184 | } |
160 | 185 | ||
161 | logger.info('Got advice result from webreport', {status: status}); | 186 | logger.info('Got advice result from webreport', {status: status}); |
162 | 187 | ||
163 | var responseCode = '68'; | 188 | var responseCode = '68'; |
164 | 189 | ||
165 | var result_price = 0; | 190 | var result_price = 0; |
166 | try { | 191 | try { |
167 | result_price = directResponse.Result.Price[0].trim(); | 192 | result_price = directResponse.Result.Price[0].trim(); |
168 | } | 193 | } |
169 | catch(err) {} | 194 | catch(err) {} |
170 | 195 | ||
171 | var errorMsg = ''; | 196 | var errorMsg = ''; |
172 | try { | 197 | try { |
173 | errorMsg = status.response.errormsg[0]; | 198 | errorMsg = status.response.errormsg[0]; |
174 | } | 199 | } |
175 | catch(err) {} | 200 | catch(err) {} |
176 | 201 | ||
177 | var responseMessage = ''; | 202 | var responseMessage = ''; |
178 | try { | 203 | try { |
179 | responseMessage = | 204 | responseMessage = |
180 | 'Hasil advice dari webreport ' | 205 | 'Hasil advice dari webreport ' |
181 | + 'ResultCode: ' + status.response.resultcode[0] | 206 | + 'ResultCode: ' + status.response.resultcode[0] |
182 | } | 207 | } |
183 | catch(err) { | 208 | catch(err) { |
184 | logger.warn('Error parsing ResultCode from webreport advice.', {err: err}); | 209 | logger.warn('Error parsing ResultCode from webreport advice.', {err: err}); |
185 | } | 210 | } |
186 | 211 | ||
187 | try { | 212 | try { |
188 | responseMessage = | 213 | responseMessage = |
189 | responseMessage | 214 | responseMessage |
190 | + ' | ErrorMsg: ' + errorMsg | 215 | + ' | ErrorMsg: ' + errorMsg |
191 | } | 216 | } |
192 | catch(err) { | 217 | catch(err) { |
193 | logger.warn('Error parsing ErrorMsg from webreport advice.', {err: err}); | 218 | logger.warn('Error parsing ErrorMsg from webreport advice.', {err: err}); |
194 | } | 219 | } |
195 | 220 | ||
196 | try { | 221 | try { |
197 | responseMessage = | 222 | responseMessage = |
198 | responseMessage | 223 | responseMessage |
199 | + ' | TrxDate: ' + status.trxDate; | 224 | + ' | TrxDate: ' + status.trxDate; |
200 | } | 225 | } |
201 | catch(err) { | 226 | catch(err) { |
202 | logger.warn('Error parsing TrxDate from webreport advice.', {err: err}); | 227 | logger.warn('Error parsing TrxDate from webreport advice.', {err: err}); |
203 | } | 228 | } |
204 | 229 | ||
205 | try { | 230 | try { |
206 | responseMessage = | 231 | responseMessage = |
207 | responseMessage | 232 | responseMessage |
208 | + ' | UpdateDate: ' + status.updateDate; | 233 | + ' | UpdateDate: ' + status.updateDate; |
209 | 234 | ||
210 | } | 235 | } |
211 | catch(err) { | 236 | catch(err) { |
212 | logger.warn('Error parsing UpdateDate from webreport advice.', {err: err}); | 237 | logger.warn('Error parsing UpdateDate from webreport advice.', {err: err}); |
213 | } | 238 | } |
214 | 239 | ||
215 | try { | 240 | try { |
216 | responseMessage = | 241 | responseMessage = |
217 | responseMessage | 242 | responseMessage |
218 | + ' | nsm: ' + status.response.nsm[0]; | 243 | + ' | nsm: ' + status.response.nsm[0]; |
219 | } | 244 | } |
220 | catch(err) { | 245 | catch(err) { |
221 | logger.warn('Error parsing nsm from webreport advice.', {err: err}); | 246 | logger.warn('Error parsing nsm from webreport advice.', {err: err}); |
222 | } | 247 | } |
223 | 248 | ||
224 | try { | 249 | try { |
225 | responseMessage = | 250 | responseMessage = |
226 | responseMessage | 251 | responseMessage |
227 | + ' | idpel: ' + status.response.idpel[0]; | 252 | + ' | idpel: ' + status.response.idpel[0]; |
228 | } | 253 | } |
229 | catch(err) { | 254 | catch(err) { |
230 | logger.warn('Error parsing idpel from webreport advice.', {err: err}); | 255 | logger.warn('Error parsing idpel from webreport advice.', {err: err}); |
231 | } | 256 | } |
232 | 257 | ||
233 | try { | 258 | try { |
234 | responseMessage = | 259 | responseMessage = |
235 | responseMessage | 260 | responseMessage |
236 | + ' | reffid: ' + status.response.reffid[0].trim(); | 261 | + ' | reffid: ' + status.response.reffid[0].trim(); |
237 | } | 262 | } |
238 | catch(err) { | 263 | catch(err) { |
239 | logger.warn('Error parsing reffid from webreport advice.', {err: err}); | 264 | logger.warn('Error parsing reffid from webreport advice.', {err: err}); |
240 | } | 265 | } |
241 | 266 | ||
242 | try { | 267 | try { |
243 | responseMessage = | 268 | responseMessage = |
244 | responseMessage | 269 | responseMessage |
245 | + ' | TransID: ' + status.response.transid[0].trim(); | 270 | + ' | TransID: ' + status.response.transid[0].trim(); |
246 | } | 271 | } |
247 | catch(err) { | 272 | catch(err) { |
248 | logger.warn('Error parsing TransID from webreport advice.', {err: err}); | 273 | logger.warn('Error parsing TransID from webreport advice.', {err: err}); |
249 | } | 274 | } |
250 | 275 | ||
251 | try { | 276 | try { |
252 | responseMessage = | 277 | responseMessage = |
253 | responseMessage | 278 | responseMessage |
254 | + ' | reff_switching: ' + status.response.reff_switching[0]; | 279 | + ' | reff_switching: ' + status.response.reff_switching[0]; |
255 | } | 280 | } |
256 | catch(err) { | 281 | catch(err) { |
257 | logger.warn('Error parsing reff_switching from webreport advice.', {err: err}); | 282 | logger.warn('Error parsing reff_switching from webreport advice.', {err: err}); |
258 | } | 283 | } |
259 | 284 | ||
260 | try { | 285 | try { |
261 | responseMessage = | 286 | responseMessage = |
262 | responseMessage | 287 | responseMessage |
263 | + ' | amount_trx: ' + status.response.amount_trx[0]; | 288 | + ' | amount_trx: ' + status.response.amount_trx[0]; |
264 | } | 289 | } |
265 | catch(err) { | 290 | catch(err) { |
266 | logger.warn('Error parsing amount_trx from webreport advice.', {err: err}); | 291 | logger.warn('Error parsing amount_trx from webreport advice.', {err: err}); |
267 | } | 292 | } |
268 | 293 | ||
269 | try { | 294 | try { |
270 | responseMessage = | 295 | responseMessage = |
271 | responseMessage | 296 | responseMessage |
272 | + ' | token: ' + status.response.token[0]; | 297 | + ' | token: ' + status.response.token[0]; |
273 | } | 298 | } |
274 | catch(err) { | 299 | catch(err) { |
275 | logger.warn('Error parsing token from webreport advice.', {err: err}); | 300 | logger.warn('Error parsing token from webreport advice.', {err: err}); |
276 | } | 301 | } |
277 | 302 | ||
278 | try { | 303 | try { |
279 | responseMessage = | 304 | responseMessage = |
280 | responseMessage | 305 | responseMessage |
281 | + ' | PrevBalance: ' + status.response.prevbalance[0]; | 306 | + ' | PrevBalance: ' + status.response.prevbalance[0]; |
282 | } | 307 | } |
283 | catch(err) { | 308 | catch(err) { |
284 | logger.warn('Error parsing PrevBalance from webreport advice.', {err: err}); | 309 | logger.warn('Error parsing PrevBalance from webreport advice.', {err: err}); |
285 | } | 310 | } |
286 | 311 | ||
287 | try { | 312 | try { |
288 | responseMessage = | 313 | responseMessage = |
289 | responseMessage | 314 | responseMessage |
290 | + ' | Price: ' + status.amount; | 315 | + ' | Price: ' + status.amount; |
291 | } | 316 | } |
292 | catch(err) { | 317 | catch(err) { |
293 | logger.warn('Error parsing Price from webreport advice.', {err: err}); | 318 | logger.warn('Error parsing Price from webreport advice.', {err: err}); |
294 | } | 319 | } |
295 | 320 | ||
296 | try { | 321 | try { |
297 | responseMessage = | 322 | responseMessage = |
298 | responseMessage | 323 | responseMessage |
299 | + ' | EndBalance: ' + status.response.endbalance[0]; | 324 | + ' | EndBalance: ' + status.response.endbalance[0]; |
300 | } | 325 | } |
301 | catch(err) { | 326 | catch(err) { |
302 | logger.warn('Error parsing EndBalance from webreport advice.', {err: err}); | 327 | logger.warn('Error parsing EndBalance from webreport advice.', {err: err}); |
303 | } | 328 | } |
304 | 329 | ||
305 | 330 | ||
306 | if ((status.status == 'S') && (status.response.resultcode[0] == '0000')) { | 331 | if ((status.status == 'S') && (status.response.resultcode[0] == '0000')) { |
307 | responseCode = '00'; | 332 | responseCode = '00'; |
308 | 333 | ||
309 | var nama_pelanggan = status.response.nama_pel[0] ; | 334 | var nama_pelanggan = status.response.nama_pel[0] ; |
310 | nama_pelanggan = nama_pelanggan.replace(/-\/-/g, '-'); | 335 | nama_pelanggan = nama_pelanggan.replace(/-\/-/g, '-'); |
311 | 336 | ||
312 | var sn = status.response.token[0] + '/' + nama_pelanggan + '/' + status.response.tarif[0] + 'VA/' + status.response.jml_daya[0]; | 337 | var sn = status.response.token[0] + '/' + nama_pelanggan + '/' + status.response.tarif[0] + 'VA/' + status.response.jml_daya[0]; |
313 | responseMessage = 'SN=' + sn + '; ' + responseMessage; | 338 | responseMessage = 'SN=' + sn + '; ' + responseMessage; |
314 | 339 | ||
315 | } else if ((status.status == 'P') || (status.status == 'W')) { | 340 | } else if ((status.status == 'P') || (status.status == 'W')) { |
316 | 341 | ||
317 | callbackReport(status.response.reffid[0].trim(), '68', responseMessage); | 342 | callbackReport(status.response.reffid[0].trim(), '68', responseMessage); |
318 | logger.info('Got pending status, requesting advice from webreport in ' + sleep_before_retry + 'ms'); | 343 | logger.info('Got pending status, requesting advice from webreport in ' + sleep_before_retry + 'ms'); |
319 | 344 | ||
320 | setTimeout(function () { | 345 | setTimeout(function () { |
321 | 346 | ||
322 | cekstatus.advice({trxid: status.trxId,}, callbackFromWebReport); | 347 | cekstatus.advice({trxid: status.trxId,}, callbackFromWebReport); |
323 | 348 | ||
324 | }, sleep_before_retry); | 349 | }, sleep_before_retry); |
325 | return; | 350 | return; |
326 | 351 | ||
327 | } else { | 352 | } else { |
328 | responseCode = status.response.resultcode[0].replace(/^00/, ""); | 353 | responseCode = status.response.resultcode[0].replace(/^00/, ""); |
329 | if (['00', '05', '12', '68', '90', '63', '18', '96'].indexOf(responseCode) >= 0) { | 354 | if (['00', '05', '12', '68', '90', '63', '18', '96'].indexOf(responseCode) >= 0) { |
330 | responseCode = '40'; | 355 | responseCode = '40'; |
331 | } | 356 | } |
332 | } | 357 | } |
333 | 358 | ||
334 | 359 | ||
335 | callbackReport(status.response.reffid[0].trim(), responseCode, responseMessage); | 360 | callbackReport(status.response.reffid[0].trim(), responseCode, responseMessage); |
336 | } | 361 | } |
337 | 362 | ||
338 | function createHttpReportServer() { | 363 | function createHttpReportServer() { |
339 | var httpServer = http.createServer(function(request, response) { | 364 | var httpServer = http.createServer(function(request, response) { |
340 | var qs = url.parse(request.url, true).query; | 365 | var qs = url.parse(request.url, true).query; |
341 | var path = url.parse(request.url).pathname; | 366 | var path = url.parse(request.url).pathname; |
342 | 367 | ||
343 | logger.info('Got reverse report from partner', {path: path, qs: qs}); | 368 | logger.info('Got reverse report from partner', {path: path, qs: qs}); |
344 | response.end('OK'); | 369 | response.end('OK'); |
345 | 370 | ||
346 | var trxid; | 371 | var trxid; |
347 | try { | 372 | try { |
348 | trxid = qs.transid; | 373 | trxid = qs.transid; |
349 | } | 374 | } |
350 | catch(err) { | 375 | catch(err) { |
351 | } | 376 | } |
352 | 377 | ||
353 | if (trxid) { | 378 | if (trxid) { |
354 | logger.info('Requesting advice from webreport', {trxid: trxid}) | 379 | logger.info('Requesting advice from webreport', {trxid: trxid}) |
355 | cekstatus.advice({trxid: trxid}, callbackFromWebReport); | 380 | cekstatus.advice({trxid: trxid}, callbackFromWebReport); |
356 | } | 381 | } |
357 | 382 | ||
358 | }); | 383 | }); |
359 | 384 | ||
360 | httpServer.listen(config.h2h_out.listen_port, function() { | 385 | httpServer.listen(config.h2h_out.listen_port, function() { |
361 | logger.info('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port); | 386 | logger.info('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port); |
362 | }); | 387 | }); |
363 | } | 388 | } |
364 | 389 | ||
365 | function start(_config, _callbackReport, options) { | 390 | function start(_config, _callbackReport, options) { |
366 | config = _config; | 391 | config = _config; |
367 | callbackReport = _callbackReport; | 392 | callbackReport = _callbackReport; |
368 | 393 | ||
369 | if (options && options.aaa) { | 394 | if (options && options.aaa) { |
370 | aaa = options.aaa; | 395 | aaa = options.aaa; |
371 | } | 396 | } |
372 | 397 | ||
373 | if (options && options.logger) { | 398 | if (options && options.logger) { |
374 | logger = options.logger; | 399 | logger = options.logger; |
375 | } else { | 400 | } else { |
376 | logger = new winston.Logger({ | 401 | logger = new winston.Logger({ |
377 | transports: [ | 402 | transports: [ |
378 | new (winston.transports.Console)() | 403 | new (winston.transports.Console)() |
379 | ] | 404 | ] |
380 | }); | 405 | }); |
381 | } | 406 | } |
382 | 407 | ||
383 | createHttpReportServer(); | 408 | createHttpReportServer(); |
384 | } | 409 | } |
385 | 410 | ||
386 | exports.start = start; | 411 | exports.start = start; |
387 | exports.topupRequest = topupRequest; | 412 | exports.topupRequest = topupRequest; |
388 | 413 |