Commit b79e0678c22963bbc464b82c242b76953a117f7a

Authored by Adhidarma Hadiwinoto
1 parent 1178a141bc
Exists in master

matikan increment

Showing 1 changed file with 4 additions and 0 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 = 3000; 12 var sleep_before_retry = 3000;
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 42
43 function topupRequest(task, retry) { 43 function topupRequest(task, retry) {
44 /*
44 if (config.globals.requests_count == undefined) { 45 if (config.globals.requests_count == undefined) {
45 config.globals.requests_count = 1; 46 config.globals.requests_count = 1;
46 } else { 47 } else {
47 config.globals.requests_count++; 48 config.globals.requests_count++;
48 } 49 }
49 50
50 if (config.globals.active_requests_count == undefined) { 51 if (config.globals.active_requests_count == undefined) {
51 config.globals.active_requests_count = 1; 52 config.globals.active_requests_count = 1;
52 } else { 53 } else {
53 config.globals.active_requests_count++; 54 config.globals.active_requests_count++;
54 } 55 }
55 56
56 if (config.globals.max_active_requests_count == undefined) { 57 if (config.globals.max_active_requests_count == undefined) {
57 config.globals.max_active_requests_count = config.globals.active_requests_count; 58 config.globals.max_active_requests_count = config.globals.active_requests_count;
58 } else { 59 } else {
59 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);
60 } 61 }
62 */
61 63
62 64
63 if (retry === undefined) { 65 if (retry === undefined) {
64 retry = max_retry; 66 retry = max_retry;
65 } 67 }
66 68
67 var params = { 69 var params = {
68 userid: config.h2h_out.userid, 70 userid: config.h2h_out.userid,
69 pwd: config.h2h_out.password, 71 pwd: config.h2h_out.password,
70 memberreff: task['requestId'], 72 memberreff: task['requestId'],
71 produk: task['remoteProduct'], 73 produk: task['remoteProduct'],
72 tujuan: task['destination'] 74 tujuan: task['destination']
73 }; 75 };
74 logger.info('Creating http request to gateway', {params: params}); 76 logger.info('Creating http request to gateway', {params: params});
75 77
76 request.post({url: config.h2h_out.partner, form: params}, function(err, httpResponse, httpResponseBody) { 78 request.post({url: config.h2h_out.partner, form: params}, function(err, httpResponse, httpResponseBody) {
77 79
80 /*
78 config.globals.active_requests_count--; 81 config.globals.active_requests_count--;
82 */
79 83
80 if (err) { 84 if (err) {
81 logger.warn('HTTP Request Error (' + task['requestId'] + '): ' + err); 85 logger.warn('HTTP Request Error (' + task['requestId'] + '): ' + err);
82 86
83 callbackReport(task['requestId'], '40', 'Gangguan koneksi ke suplier'); 87 callbackReport(task['requestId'], '40', 'Gangguan koneksi ke suplier');
84 return; 88 return;
85 } 89 }
86 90
87 logger.info('Got response from gateway ', {response_body: httpResponseBody}); 91 logger.info('Got response from gateway ', {response_body: httpResponseBody});
88 92
89 if (httpResponseBody.indexOf('502 Proxy Error') >= 0) { 93 if (httpResponseBody.indexOf('502 Proxy Error') >= 0) {
90 callbackReport(task['requestId'], '40', '502 Proxy error'); 94 callbackReport(task['requestId'], '40', '502 Proxy error');
91 return; 95 return;
92 } 96 }
93 97
94 xml(httpResponseBody, function(err, result) { 98 xml(httpResponseBody, function(err, result) {
95 if (err) { 99 if (err) {
96 logger.warn('Gagal parsing XML respon server'); 100 logger.warn('Gagal parsing XML respon server');
97 //topupRequest(task, retry - 1); 101 //topupRequest(task, retry - 1);
98 callbackReport(task['requestId'], '40', 'Gagal parsing XML pada respon server'); 102 callbackReport(task['requestId'], '40', 'Gagal parsing XML pada respon server');
99 return; 103 return;
100 } 104 }
101 105
102 logger.info('Response Data:', {result: result}); 106 logger.info('Response Data:', {result: result});
103 107
104 var response_code = result.respon.rc[0].replace(/^00/, ''); 108 var response_code = result.respon.rc[0].replace(/^00/, '');
105 if (response_code == '54' || response_code == '68') { 109 if (response_code == '54' || response_code == '68') {
106 if (retry) { 110 if (retry) {
107 setTimeout(function() { 111 setTimeout(function() {
108 topupRequest(task, retry - 1); 112 topupRequest(task, retry - 1);
109 }, 60000); 113 }, 60000);
110 114
111 } else { 115 } else {
112 callbackReport(task['requestId'], '68', message); 116 callbackReport(task['requestId'], '68', message);
113 } 117 }
114 return; 118 return;
115 } 119 }
116 120
117 var token = ''; 121 var token = '';
118 if (result.respon.token) { 122 if (result.respon.token) {
119 token = result.respon.token[0]; 123 token = result.respon.token[0];
120 } 124 }
121 125
122 var data_pelanggan = 'NO-DATA'; 126 var data_pelanggan = 'NO-DATA';
123 if (result.respon.data) { 127 if (result.respon.data) {
124 data_pelanggan = result.respon.data[0].replace(/ /g, '-'); 128 data_pelanggan = result.respon.data[0].replace(/ /g, '-');
125 } 129 }
126 130
127 var message = result.respon.pesan[0].replace(/\n/g, ' '); 131 var message = result.respon.pesan[0].replace(/\n/g, ' ');
128 132
129 133
130 if (response_code == '00') { 134 if (response_code == '00') {
131 135
132 var sn = ""; 136 var sn = "";
133 137
134 if (config.h2h_out.parse_sn == 'YES') { 138 if (config.h2h_out.parse_sn == 'YES') {
135 sn = parseSN(message); 139 sn = parseSN(message);
136 } else if (token && data_pelanggan) { 140 } else if (token && data_pelanggan) {
137 sn = token + '/' + data_pelanggan; 141 sn = token + '/' + data_pelanggan;
138 } 142 }
139 143
140 message = 'SN=' + sn + '; ' + message; 144 message = 'SN=' + sn + '; ' + message;
141 } 145 }
142 146
143 callbackReport(task['requestId'], response_code, message); 147 callbackReport(task['requestId'], response_code, message);
144 148
145 }); 149 });
146 }); 150 });
147 } 151 }
148 152
149 function start(_config, _callbackReport, options) { 153 function start(_config, _callbackReport, options) {
150 config = _config; 154 config = _config;
151 callbackReport = _callbackReport 155 callbackReport = _callbackReport
152 156
153 if (options && options.logger) { 157 if (options && options.logger) {
154 logger = options.logger; 158 logger = options.logger;
155 } else { 159 } else {
156 logger = new winston.Logger({ 160 logger = new winston.Logger({
157 transports: [ 161 transports: [
158 new (winston.transports.Console)() 162 new (winston.transports.Console)()
159 ] 163 ]
160 }); 164 });
161 } 165 }
162 } 166 }
163 167
164 function parseResult(message) { 168 function parseResult(message) {
165 var data; 169 var data;
166 xml(message, function(err, result) { 170 xml(message, function(err, result) {
167 data = result; 171 data = result;
168 }); 172 });
169 return data; 173 return data;
170 } 174 }
171 175
172 exports.start = start; 176 exports.start = start;
173 exports.topupRequest = topupRequest; 177 exports.topupRequest = topupRequest;
174 exports.parseResult = parseResult; 178 exports.parseResult = parseResult;
175 exports.parseSN = parseSN; 179 exports.parseSN = parseSN;
176 180