Commit 00c655ff2b671dabfb29020002cb5e9f88b361cc

Authored by Adhidarma Hadiwinoto
1 parent b8d9df0879
Exists in master

potong data pelanggan

Showing 1 changed file with 14 additions and 1 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 var winston = require('winston'); 5 var winston = require('winston');
6 6
7 var logger; 7 var logger;
8 var config; 8 var config;
9 var callbackReport; 9 var callbackReport;
10 10
11 var max_retry = 15; 11 var max_retry = 15;
12 var sleep_before_retry = 60 * 1000; 12 var sleep_before_retry = 60 * 1000;
13 13
14 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; 14 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
15 15
16 function parseSN(message, _config) { 16 function parseSN(message, _config) {
17 17
18 if (!_config) { 18 if (!_config) {
19 _config = config; 19 _config = config;
20 } 20 }
21 21
22 var sn_regex = new RegExp(_config.h2h_out.sn_pattern); 22 var sn_regex = new RegExp(_config.h2h_out.sn_pattern);
23 var sn_match = message.match(sn_regex); 23 var sn_match = message.match(sn_regex);
24 24
25 if (sn_match <= 0) { 25 if (sn_match <= 0) {
26 logger.info('SN Not found: ' + message); 26 logger.info('SN Not found: ' + message);
27 return ''; 27 return '';
28 } 28 }
29 29
30 var sn = sn_match[0]; 30 var sn = sn_match[0];
31 var sn_remove_patterns = _config.h2h_out.sn_remove_patterns.split(_config.h2h_out.sn_remove_patterns_separator); 31 var sn_remove_patterns = _config.h2h_out.sn_remove_patterns.split(_config.h2h_out.sn_remove_patterns_separator);
32 32
33 var count = sn_remove_patterns.length; 33 var count = sn_remove_patterns.length;
34 34
35 for(var i = 0; i < count; i++) { 35 for(var i = 0; i < count; i++) {
36 sn = sn.replace(sn_remove_patterns[i], ''); 36 sn = sn.replace(sn_remove_patterns[i], '');
37 } 37 }
38 38
39 return sn.trim(); 39 return sn.trim();
40 } 40 }
41 41
42 function topupRequest(task, retry) { 42 function topupRequest(task, retry) {
43 /* 43 /*
44 if (config.globals.requests_count == undefined) { 44 if (config.globals.requests_count == undefined) {
45 config.globals.requests_count = 1; 45 config.globals.requests_count = 1;
46 } else { 46 } else {
47 config.globals.requests_count++; 47 config.globals.requests_count++;
48 } 48 }
49 49
50 if (config.globals.active_requests_count == undefined) { 50 if (config.globals.active_requests_count == undefined) {
51 config.globals.active_requests_count = 1; 51 config.globals.active_requests_count = 1;
52 } else { 52 } else {
53 config.globals.active_requests_count++; 53 config.globals.active_requests_count++;
54 } 54 }
55 55
56 if (config.globals.max_active_requests_count == undefined) { 56 if (config.globals.max_active_requests_count == undefined) {
57 config.globals.max_active_requests_count = config.globals.active_requests_count; 57 config.globals.max_active_requests_count = config.globals.active_requests_count;
58 } else { 58 } else {
59 config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count); 59 config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count);
60 } 60 }
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 params = { 68 var params = {
69 userid: config.h2h_out.userid, 69 userid: config.h2h_out.userid,
70 pwd: config.h2h_out.password, 70 pwd: config.h2h_out.password,
71 memberreff: task['requestId'], 71 memberreff: task['requestId'],
72 produk: task['remoteProduct'], 72 produk: task['remoteProduct'],
73 tujuan: task['destination'] 73 tujuan: task['destination']
74 }; 74 };
75 logger.info('Creating http request to gateway', {params: params}); 75 logger.info('Creating http request to gateway', {params: params});
76 76
77 request.post({url: config.h2h_out.partner, form: params}, function(err, httpResponse, httpResponseBody) { 77 request.post({url: config.h2h_out.partner, form: params}, function(err, httpResponse, httpResponseBody) {
78 78
79 /* 79 /*
80 config.globals.active_requests_count--; 80 config.globals.active_requests_count--;
81 */ 81 */
82 82
83 if (err) { 83 if (err) {
84 logger.warn('HTTP Request Error (' + task['requestId'] + '): ' + err); 84 logger.warn('HTTP Request Error (' + task['requestId'] + '): ' + err);
85 85
86 callbackReport(task['requestId'], '89', 'Gangguan koneksi ke suplier'); 86 callbackReport(task['requestId'], '89', 'Gangguan koneksi ke suplier');
87 return; 87 return;
88 } 88 }
89 89
90 logger.info('Got response from gateway ', {response_body: httpResponseBody}); 90 logger.info('Got response from gateway ', {response_body: httpResponseBody});
91 91
92 if (httpResponseBody.indexOf('502 Proxy Error') >= 0) { 92 if (httpResponseBody.indexOf('502 Proxy Error') >= 0) {
93 callbackReport(task['requestId'], '91', '502 Proxy error'); 93 callbackReport(task['requestId'], '91', '502 Proxy error');
94 return; 94 return;
95 } 95 }
96 96
97 xml(httpResponseBody, function(err, result) { 97 xml(httpResponseBody, function(err, result) {
98 if (err) { 98 if (err) {
99 logger.warn('Gagal parsing XML respon server'); 99 logger.warn('Gagal parsing XML respon server');
100 //topupRequest(task, retry - 1); 100 //topupRequest(task, retry - 1);
101 callbackReport(task['requestId'], '40', 'Gagal parsing XML pada respon server'); 101 callbackReport(task['requestId'], '40', 'Gagal parsing XML pada respon server');
102 return; 102 return;
103 } 103 }
104 104
105 logger.info('Response Data:', {result: result}); 105 logger.info('Response Data:', {result: result});
106 106
107 var response_code = result.respon.rc[0].replace(/^00/, ''); 107 var response_code = result.respon.rc[0].replace(/^00/, '');
108 if (response_code == '54' || response_code == '68') { 108 if (response_code == '54' || response_code == '68') {
109 if (retry) { 109 if (retry) {
110 setTimeout(function() { 110 setTimeout(function() {
111 111
112 logger.info('Sending advice', {task: task}); 112 logger.info('Sending advice', {task: task});
113 113
114 task['remoteProduct'] = 'ADVPLN'; 114 task['remoteProduct'] = 'ADVPLN';
115 topupRequest(task, retry - 1); 115 topupRequest(task, retry - 1);
116 116
117 }, sleep_before_retry); 117 }, sleep_before_retry);
118 118
119 } else { 119 } else {
120 logger.warn('Max retries exceeded', {task: task}); 120 logger.warn('Max retries exceeded', {task: task});
121 callbackReport(task['requestId'], '68', message + '. Max retries exceeded'); 121 callbackReport(task['requestId'], '68', message + '. Max retries exceeded');
122 } 122 }
123 return; 123 return;
124 } 124 }
125 125
126 var token = ''; 126 var token = '';
127 if (result.respon.token) { 127 if (result.respon.token) {
128 token = result.respon.token[0]; 128 token = result.respon.token[0];
129 } 129 }
130 130
131 var data_pelanggan = 'NO-DATA'; 131 var data_pelanggan = 'NO-DATA';
132 if (result.respon.data) { 132 if (result.respon.data) {
133 data_pelanggan = result.respon.data[0].replace(/ /g, '-'); 133
134 try {
135 var _data_pelanggan = result.respon.data[0].replace(/ /g, '-');
136 var fields = _data_pelanggan.split('/');
137
138 data_pelanggan = [
139 fields[0], fields[1], fields[2], fields[3]
140 ].join('/');
141 }
142 catch(err) {
143 logger.warn('Error parsing data pelanggan', {data_pelanggan: _data_pelanggan});
144 }
145
146
134 } 147 }
135 148
136 var message = result.respon.pesan[0].replace(/\n/g, ' '); 149 var message = result.respon.pesan[0].replace(/\n/g, ' ');
137 150
138 151
139 if (response_code == '00') { 152 if (response_code == '00') {
140 153
141 var sn = ""; 154 var sn = "";
142 155
143 if (config.h2h_out.parse_sn == 'YES') { 156 if (config.h2h_out.parse_sn == 'YES') {
144 sn = parseSN(message); 157 sn = parseSN(message);
145 } else if (token && data_pelanggan) { 158 } else if (token && data_pelanggan) {
146 sn = token + '/' + data_pelanggan; 159 sn = token + '/' + data_pelanggan;
147 } 160 }
148 161
149 message = 'SN=' + sn + '; ' + message; 162 message = 'SN=' + sn + '; ' + message;
150 } 163 }
151 164
152 callbackReport(task['requestId'], response_code, message); 165 callbackReport(task['requestId'], response_code, message);
153 166
154 }); 167 });
155 }); 168 });
156 } 169 }
157 170
158 function start(_config, _callbackReport, options) { 171 function start(_config, _callbackReport, options) {
159 config = _config; 172 config = _config;
160 callbackReport = _callbackReport 173 callbackReport = _callbackReport
161 174
162 if (options && options.logger) { 175 if (options && options.logger) {
163 logger = options.logger; 176 logger = options.logger;
164 } else { 177 } else {
165 logger = new winston.Logger({ 178 logger = new winston.Logger({
166 transports: [ 179 transports: [
167 new (winston.transports.Console)() 180 new (winston.transports.Console)()
168 ] 181 ]
169 }); 182 });
170 } 183 }
171 } 184 }
172 185
173 function parseResult(message) { 186 function parseResult(message) {
174 var data; 187 var data;
175 xml(message, function(err, result) { 188 xml(message, function(err, result) {
176 data = result; 189 data = result;
177 }); 190 });
178 return data; 191 return data;
179 } 192 }
180 193
181 exports.start = start; 194 exports.start = start;
182 exports.topupRequest = topupRequest; 195 exports.topupRequest = topupRequest;
183 exports.parseResult = parseResult; 196 exports.parseResult = parseResult;
184 exports.parseSN = parseSN; 197 exports.parseSN = parseSN;
185 198