Commit ee5a6e87a179dc469e64e38b166b829f64c07a4a

Authored by Adhidarma Hadiwinoto
1 parent 5c0335fe26
Exists in master

simplified try catch

Showing 1 changed file with 5 additions and 10 deletions Inline Diff

1 var http = require('http'); 1 var http = require('http');
2 var url = require('url'); 2 var url = require('url');
3 var math = require('mathjs'); 3 var math = require('mathjs');
4 var xml = require('xml'); 4 var xml = require('xml');
5 var xml2js = require('xml2js').parseString; 5 var xml2js = require('xml2js').parseString;
6 var strftime = require('strftime'); 6 var strftime = require('strftime');
7 var xor = require('base64-xor'); 7 var xor = require('base64-xor');
8 var request = require('request'); 8 var request = require('request');
9 9
10 var config; 10 var config;
11 var callbackReport; 11 var callbackReport;
12 12
13 var max_retry = 2; 13 var max_retry = 2;
14 var sleep_before_retry = 2000; 14 var sleep_before_retry = 2000;
15 15
16 function calculateSignature(userid, password, msisdn, timestamp) { 16 function calculateSignature(userid, password, msisdn, timestamp) {
17 var a = msisdn.substr(msisdn.length - 4) + timestamp; 17 var a = msisdn.substr(msisdn.length - 4) + timestamp;
18 console.log(a); 18 console.log(a);
19 var b = userid.substr(0, 4) + password; 19 var b = userid.substr(0, 4) + password;
20 console.log(b); 20 console.log(b);
21 21
22 return xor.encode(a,b); 22 return xor.encode(a,b);
23 } 23 }
24 24
25 function createPayload(task) { 25 function createPayload(task) {
26 var timestamp = strftime('%H%M%S'); 26 var timestamp = strftime('%H%M%S');
27 27
28 var payload = { 28 var payload = {
29 datacell: [ 29 datacell: [
30 { perintah: 'charge'}, 30 { perintah: 'charge'},
31 {oprcode: task['remoteProduct']}, 31 {oprcode: task['remoteProduct']},
32 {userid: config.h2h_out.userid}, 32 {userid: config.h2h_out.userid},
33 {time: timestamp}, 33 {time: timestamp},
34 {msisdn: task['destination']}, 34 {msisdn: task['destination']},
35 {ref_trxid: task['requestId']}, 35 {ref_trxid: task['requestId']},
36 {sgn: calculateSignature(config.h2h_out.userid, config.h2h_out.password, task['destination'], timestamp)} 36 {sgn: calculateSignature(config.h2h_out.userid, config.h2h_out.password, task['destination'], timestamp)}
37 ] 37 ]
38 }; 38 };
39 39
40 console.log(payload); 40 console.log(payload);
41 return "<?xml version=\"1.0\" ?>\n" + xml(payload); 41 return "<?xml version=\"1.0\" ?>\n" + xml(payload);
42 } 42 }
43 43
44 function topupRequest(task, retry) { 44 function topupRequest(task, retry) {
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 if (retry === undefined) { 64 if (retry === undefined) {
65 retry = max_retry; 65 retry = max_retry;
66 } 66 }
67 67
68 var payload_xml = createPayload(task); 68 var payload_xml = createPayload(task);
69 console.log(payload_xml); 69 console.log(payload_xml);
70 70
71 var postRequest = { 71 var postRequest = {
72 host: "202.152.62.2", 72 host: "202.152.62.2",
73 path: "/RELOAD97.php", 73 path: "/RELOAD97.php",
74 port: 7713, 74 port: 7713,
75 method: "POST", 75 method: "POST",
76 headers: { 76 headers: {
77 'Content-Type': 'text/xml', 77 'Content-Type': 'text/xml',
78 'Content-Length': Buffer.byteLength(payload_xml) 78 'Content-Length': Buffer.byteLength(payload_xml)
79 } 79 }
80 }; 80 };
81 81
82 var buffer = ""; 82 var buffer = "";
83 var req = http.request( postRequest, function( res ) { 83 var req = http.request( postRequest, function( res ) {
84 84
85 console.log('Status code: ' + res.statusCode ); 85 console.log('Status code: ' + res.statusCode );
86 var buffer = ""; 86 var buffer = "";
87 res.on( "data", function( data ) { buffer = buffer + data; } ); 87 res.on( "data", function( data ) { buffer = buffer + data; } );
88 res.on( "end", function( data ) { 88 res.on( "end", function( data ) {
89 topupResponseHandler(buffer); 89 topupResponseHandler(buffer);
90 }); 90 });
91 91
92 }); 92 });
93 93
94 req.on('error', function(e) { 94 req.on('error', function(e) {
95 console.log('problem with request: ' + e.message); 95 console.log('problem with request: ' + e.message);
96 }); 96 });
97 97
98 req.write( payload_xml ); 98 req.write( payload_xml );
99 req.end(); 99 req.end();
100 } 100 }
101 101
102 function topupResponseHandler(body, request_id) { 102 function topupResponseHandler(body, request_id) {
103 xml2js(body, function (err, result) { 103 xml2js(body, function (err, result) {
104 if (err) { 104 if (err) {
105 console.log(body); 105 console.log(body);
106 callbackReport(request_id, '40', buffer); 106 callbackReport(request_id, '40', buffer);
107 return; 107 return;
108 } 108 }
109 109
110 console.log(result); 110 console.log(result);
111 111
112 request_id = result.datacell.ref_trxid[0].trim(); 112 request_id = result.datacell.ref_trxid[0].trim();
113 113
114 var response_code = '68'; 114 var response_code = '68';
115 115
116 var message = ''; 116 var message = '';
117 try { 117 try {
118 if (result.datacell.message.length > 0) { 118 if (result.datacell.message && result.datacell.message.length > 0) {
119 message = result.datacell.message[0].trim(); 119 message = result.datacell.message[0].trim();
120 } else if (result.datacell.msg.length > 0) { 120 } else if (result.datacell.msg && result.datacell.msg.length > 0) {
121 message = result.datacell.msg[0].trim(); 121 message = result.datacell.msg[0].trim();
122 } 122 }
123 } 123 }
124 catch(err) { 124 catch(err) {
125 message = 'exception saat parsing message'; 125 message = 'exception saat parsing message';
126 } 126 }
127 127
128 128 if (result.datacell.resultcode && result.datacell.resultcode[0] == '999') {
129 try { 129 response_code = '40';
130 if (result.datacell.resultcode[0] == '999') {
131 response_code = '40';
132 }
133 }
134 catch(err) {
135 response_code = '68';
136 } 130 }
137 131
132
138 if (message.indexOf('Nomor tujuan salah') >= 0) { 133 if (message.indexOf('Nomor tujuan salah') >= 0) {
139 response_code = '14'; 134 response_code = '14';
140 } else if (message.indexOf('*GAGAL, transaksi yang sama sudah ada dalam 10 menit') >= 0) { 135 } else if (message.indexOf('*GAGAL, transaksi yang sama sudah ada dalam 10 menit') >= 0) {
141 response_code = '55'; 136 response_code = '55';
142 } 137 }
143 138
144 callbackReport(request_id, response_code, message); 139 callbackReport(request_id, response_code, message);
145 }); 140 });
146 } 141 }
147 142
148 function createServer() { 143 function createServer() {
149 144
150 var httpServer = http.createServer(function(req, res) { 145 var httpServer = http.createServer(function(req, res) {
151 console.log('Got request from partner ("' + req.url + '")'); 146 console.log('Got request from partner ("' + req.url + '")');
152 147
153 var body = ""; 148 var body = "";
154 req.on('data', function (chunk) { 149 req.on('data', function (chunk) {
155 body += chunk; 150 body += chunk;
156 }); 151 });
157 152
158 req.on('end', function () { 153 req.on('end', function () {
159 res.writeHead(200); 154 res.writeHead(200);
160 res.end('OK'); 155 res.end('OK');
161 156
162 console.log(body); 157 console.log(body);
163 topupResponseHandler(body); 158 topupResponseHandler(body);
164 }); 159 });
165 }); 160 });
166 161
167 httpServer.listen(config.h2h_out.listen_port, function() { 162 httpServer.listen(config.h2h_out.listen_port, function() {
168 console.log('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port); 163 console.log('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port);
169 }); 164 });
170 } 165 }
171 166
172 167
173 function start(_config, _callbackReport) { 168 function start(_config, _callbackReport) {
174 config = _config; 169 config = _config;
175 callbackReport = _callbackReport 170 callbackReport = _callbackReport
176 171
177 createServer(); 172 createServer();
178 } 173 }
179 174
180 exports.start = start; 175 exports.start = start;
181 exports.topupRequest = topupRequest; 176 exports.topupRequest = topupRequest;