Commit 26654005ccb66c2b8357f00759f7e0ab9ca90177

Authored by Adhidarma Hadiwinoto
1 parent 0cb041dc12
Exists in master

parsesn

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