Commit a2bc143e8e90e1aac5f38a73c68f5befd1f0ce1e

Authored by Adhidarma Hadiwinoto
1 parent 228e898971
Exists in master

typo

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

partner-scrappingkisel.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 10
11 var config; 11 var config;
12 var logger; 12 var logger;
13 13
14 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; 14 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
15 15
16 var logTag = __filename.split('/').reverse()[0]; 16 var logTag = __filename.split('/').reverse()[0];
17 17
18 function topupRequest(task) { 18 function topupRequest(task) {
19 if (config.globals.requests_count == undefined) { 19 if (config.globals.requests_count == undefined) {
20 config.globals.requests_count = 1; 20 config.globals.requests_count = 1;
21 } else { 21 } else {
22 config.globals.requests_count++; 22 config.globals.requests_count++;
23 } 23 }
24 24
25 if (config.globals.active_requests_count == undefined) { 25 if (config.globals.active_requests_count == undefined) {
26 config.globals.active_requests_count = 1; 26 config.globals.active_requests_count = 1;
27 } else { 27 } else {
28 config.globals.active_requests_count++; 28 config.globals.active_requests_count++;
29 } 29 }
30 30
31 if (config.globals.max_active_requests_count == undefined) { 31 if (config.globals.max_active_requests_count == undefined) {
32 config.globals.max_active_requests_count = config.globals.active_requests_count; 32 config.globals.max_active_requests_count = config.globals.active_requests_count;
33 } else { 33 } else {
34 config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count); 34 config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count);
35 } 35 }
36 36
37 var options = { 37 var options = {
38 url: config.h2h_out.partner, 38 url: config.h2h_out.partner,
39 qs: { 39 qs: {
40 reqid: task['requestId'], 40 reqid: task['requestId'],
41 msisdn: task['destination'], 41 msisdn: task['destination'],
42 product: task['remoteProduct'] 42 product: task['remoteProduct']
43 } 43 }
44 }; 44 };
45 logger.info('HTTP request to partner', {request_options: options}); 45 logger.info('HTTP request to partner', {request_options: options});
46 46
47 request(options, function (error, response, body) { 47 request(options, function (error, response, body) {
48 if (config.globals.active_requests_count == undefined) { 48 if (config.globals.active_requests_count == undefined) {
49 config.globals.active_requests_count = 0; 49 config.globals.active_requests_count = 0;
50 } else { 50 } else {
51 config.globals.active_requests_count--; 51 config.globals.active_requests_count--;
52 } 52 }
53 53
54 if (error || response.statusCode != 200) { 54 if (error || response.statusCode != 200) {
55 logger.warn(logTag + ': Gateway Error'); 55 logger.warn(logTag + ': Gateway Error');
56 callbackReport(task['requestId'], '40', 'Gateway Error'); 56 callbackReport(task['requestId'], '40', 'Gateway Error');
57 return; 57 return;
58 } 58 }
59 59
60 logger.info('Got supplier response', {response_body: body}); 60 logger.info('Got supplier response', {response_body: body});
61 61
62 xml2js(body, function (err, result) { 62 xml2js(body, function (err, result) {
63 if (err) { 63 if (err) {
64 callbackReport(task['requestId'], '40', body); 64 callbackReport(task['requestId'], '40', body);
65 return; 65 return;
66 } 66 }
67 67
68 logger.info('Got result from partner', {result: result}); 68 logger.info('Got result from partner', {result: result});
69 69
70 var response_code = '68'; 70 var response_code = '68';
71 var message = result.trx_response.info[0].trim(); 71 var message = result.trx_response.info[0].trim();
72 72
73 if (message == 'Error Parsing') { 73 if (message == 'Error Parsing') {
74 74
75 response_code = '40'; 75 response_code = '40';
76 76
77 } else if (message == 'Stock is not available') { 77 } else if (message == 'Stock is not available') {
78 78
79 response_code = '40'; 79 response_code = '40';
80 80
81 } else if (message == 'Undefined error') { 81 } else if (message == 'Undefined error') {
82 82
83 response_code = '40'; 83 response_code = '40';
84 84
85 } else if (message == "Phone number's not found") { 85 } else if (message == "Phone number's not found") {
86 86
87 response_code = '14'; 87 response_code = '14';
88 88
89 } else if (message == "Phone number is expired") { 89 } else if (message == "Phone number is expired") {
90 90
91 response_code = '14'; 91 response_code = '14';
92 92
93 } else if (message == "Duplicate transaction") { 93 } else if (message == "Duplicate transaction") {
94 94
95 response_code = '55'; 95 response_code = '55';
96 96
97 } else if (message == "Link Provider down") { 97 } else if (message == "Link Provider down") {
98 98
99 response_code = '91'; 99 response_code = '91';
100 100
101 } else if (message == "Unable to route transaction") { 101 } else if (message == "Unable to route transaction") {
102 102
103 response_code = '91'; 103 response_code = '91';
104 104
105 } else if (message == "TRANSAKSI SUKSES !!!") { 105 } else if (message == "TRANSAKSI SUKSES !!!") {
106 var destination = result.trx_response.msisdn.join(' ').trim(); 106 var destination = result.trx_response.msisdn.join(' ').trim();
107 destination = destination.replace(' - ', ''); 107 destination = destination.replace(' - ', '');
108 var product = result.trx_response.product.join(' ').trim(); 108 var product = result.trx_response.product.join(' ').trim();
109 var ref_num = result.trx_response.ref_num.join(' ').trim(); 109 var ref_num = result.trx_response.ref_num.join(' ').trim();
110 var harga = result.trx_response.harga.join(' ').trim(); 110 var harga = result.trx_response.harga.join(' ').trim();
111 var kode_voucher = result.trx_response.kode_voucher.join(' ').trim(); 111 var kode_voucher = result.trx_response.kode_voucher.join(' ').trim();
112 var stocks = result.trx_response.stock.join(' ').trim(); 112 var stocks = result.trx_response.stock.join(' ').trim();
113 var stock = parseStock(stocks, product); 113 var stock = parseStock(stocks, product);
114 114
115 if (stock == 0) { 115 if (stock == 0) {
116 logger.info('OUT OF STOCK: ' + task['product']); 116 logger.info('OUT OF STOCK: ' + task['product']);
117 config.globals.products = productsWithout(task['product']); 117 config.globals.products = productsWithout(task['product']);
118 } 118 }
119 119
120 response_code = '00'; 120 response_code = '00';
121 121
122 message = 'SN=' + kode_voucher + '; ' + product + ' ' + destination + ' ' + harga + ' ref_num: ' + ref_num + ' kode_voucher: ' + kode_voucher + ' sisa stock: ' + stock + ' unit'; 122 message = 'SN=' + kode_voucher + '; ' + product + ' ' + destination + ' ' + harga + ' ref_num: ' + ref_num + ' kode_voucher: ' + kode_voucher + ' sisa stock: ' + stock + ' unit';
123 } 123 }
124 124
125 logger.info('Message to AAA: ' + message); 125 logger.info('Message to AAA: ' + message);
126 callbackReport(task['requestId'], response_code, message); 126 callbackReport(task['requestId'], response_code, message);
127 }); 127 });
128 }); 128 });
129 } 129 }
130 130
131 function start(_config, _callbackReport) { 131 function start(_config, _callbackReport, options) {
132 config = _config; 132 config = _config;
133 callbackReport = _callbackReport; 133 callbackReport = _callbackReport;
134 134
135 if (options && options.aaa) { 135 if (options && options.aaa) {
136 aaa = options.aaa; 136 aaa = options.aaa;
137 } 137 }
138 138
139 if (options && options.logger) { 139 if (options && options.logger) {
140 logger = options.logger; 140 logger = options.logger;
141 } else { 141 } else {
142 logger = new winston.Logger({ 142 logger = new winston.Logger({
143 transports: [ 143 transports: [
144 new (winston.transports.Console)() 144 new (winston.transports.Console)()
145 ] 145 ]
146 }); 146 });
147 } 147 }
148 } 148 }
149 149
150 function stockKeyword(product_desc) { 150 function stockKeyword(product_desc) {
151 var keywords = product_desc.match(/\s\d+K$/); 151 var keywords = product_desc.match(/\s\d+K$/);
152 if (!keywords) { 152 if (!keywords) {
153 return; 153 return;
154 } 154 }
155 155
156 if (keywords.length < 1) { 156 if (keywords.length < 1) {
157 return; 157 return;
158 } 158 }
159 159
160 return keywords[0].trim(); 160 return keywords[0].trim();
161 } 161 }
162 162
163 function parseStock(stocks, product_desc) { 163 function parseStock(stocks, product_desc) {
164 product_keyword = stockKeyword(product_desc); 164 product_keyword = stockKeyword(product_desc);
165 165
166 var _stocks = stocks.split('; '); 166 var _stocks = stocks.split('; ');
167 count = _stocks.length; 167 count = _stocks.length;
168 for (var i = 0; i < count; i++) { 168 for (var i = 0; i < count; i++) {
169 var stock = _stocks[i].split(' = '); 169 var stock = _stocks[i].split(' = ');
170 if (stock.length < 2) { 170 if (stock.length < 2) {
171 continue; 171 continue;
172 } 172 }
173 173
174 if (stock[0] == product_keyword) { 174 if (stock[0] == product_keyword) {
175 return parseInt(stock[1]); 175 return parseInt(stock[1]);
176 } 176 }
177 } 177 }
178 178
179 return 0; 179 return 0;
180 } 180 }
181 181
182 function productsWithout(to_be_removed, products) { 182 function productsWithout(to_be_removed, products) {
183 if (products === undefined) { 183 if (products === undefined) {
184 products = config.globals.products; 184 products = config.globals.products;
185 } 185 }
186 186
187 if (products.search(/^,/) == -1) { 187 if (products.search(/^,/) == -1) {
188 products = ',' + products; 188 products = ',' + products;
189 } 189 }
190 190
191 191
192 if (products.search(/,$/) == -1) { 192 if (products.search(/,$/) == -1) {
193 products = products + ','; 193 products = products + ',';
194 } 194 }
195 195
196 products = products.replace(/\s+/, ''); 196 products = products.replace(/\s+/, '');
197 products = products.replace(/,+/, ','); 197 products = products.replace(/,+/, ',');
198 products = products.replace(',' + to_be_removed + ',' , ','); 198 products = products.replace(',' + to_be_removed + ',' , ',');
199 products = products.replace(/^,/, ''); 199 products = products.replace(/^,/, '');
200 products = products.replace(/,$/, ''); 200 products = products.replace(/,$/, '');
201 201
202 return products; 202 return products;
203 } 203 }
204 204
205 exports.start = start; 205 exports.start = start;
206 exports.topupRequest = topupRequest; 206 exports.topupRequest = topupRequest;
207 exports.stockKeyword = stockKeyword; 207 exports.stockKeyword = stockKeyword;
208 exports.parseStock = parseStock; 208 exports.parseStock = parseStock;
209 exports.productsWithout = productsWithout; 209 exports.productsWithout = productsWithout;
210 210