Commit e59497a37611a5d494314e343597d21532e79756

Authored by Adhidarma Hadiwinoto
1 parent a9ce757fc8
Exists in master

gabungkan destination

Showing 1 changed file with 1 additions and 0 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 9
10 var config; 10 var config;
11 var httpServer; 11 var httpServer;
12 12
13 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; 13 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
14 14
15 var logTag = __filename.split('/').reverse()[0]; 15 var logTag = __filename.split('/').reverse()[0];
16 16
17 function topupRequest(task) { 17 function topupRequest(task) {
18 if (config.globals.requests_count == undefined) { 18 if (config.globals.requests_count == undefined) {
19 config.globals.requests_count = 1; 19 config.globals.requests_count = 1;
20 } else { 20 } else {
21 config.globals.requests_count++; 21 config.globals.requests_count++;
22 } 22 }
23 23
24 if (config.globals.active_requests_count == undefined) { 24 if (config.globals.active_requests_count == undefined) {
25 config.globals.active_requests_count = 1; 25 config.globals.active_requests_count = 1;
26 } else { 26 } else {
27 config.globals.active_requests_count++; 27 config.globals.active_requests_count++;
28 } 28 }
29 29
30 if (config.globals.max_active_requests_count == undefined) { 30 if (config.globals.max_active_requests_count == undefined) {
31 config.globals.max_active_requests_count = config.globals.active_requests_count; 31 config.globals.max_active_requests_count = config.globals.active_requests_count;
32 } else { 32 } else {
33 config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count); 33 config.globals.max_active_requests_count = math.max(config.globals.max_active_requests_count, config.globals.active_requests_count);
34 } 34 }
35 35
36 var options = { 36 var options = {
37 url: config.h2h_out.partner, 37 url: config.h2h_out.partner,
38 qs: { 38 qs: {
39 reqid: task['requestId'], 39 reqid: task['requestId'],
40 msisdn: task['destination'], 40 msisdn: task['destination'],
41 product: task['remoteProduct'] 41 product: task['remoteProduct']
42 } 42 }
43 }; 43 };
44 console.log(options); 44 console.log(options);
45 45
46 request(options, function (error, response, body) { 46 request(options, function (error, response, body) {
47 if (config.globals.active_requests_count == undefined) { 47 if (config.globals.active_requests_count == undefined) {
48 config.globals.active_requests_count = 0; 48 config.globals.active_requests_count = 0;
49 } else { 49 } else {
50 config.globals.active_requests_count--; 50 config.globals.active_requests_count--;
51 } 51 }
52 52
53 if (error || response.statusCode != 200) { 53 if (error || response.statusCode != 200) {
54 console.log(logTag + ': Gateway Error'); 54 console.log(logTag + ': Gateway Error');
55 callbackReport(task['requestId'], '40', 'Gateway Error'); 55 callbackReport(task['requestId'], '40', 'Gateway Error');
56 return; 56 return;
57 } 57 }
58 58
59 console.log(logTag + ': Supplier response:'); 59 console.log(logTag + ': Supplier response:');
60 console.log(body); 60 console.log(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 console.log(result); 68 console.log(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 == "TRANSAKSI SUKSES !!!") { 101 } else if (message == "TRANSAKSI SUKSES !!!") {
102 var destination = result.trx_response.msisdn.join(' ').trim(); 102 var destination = result.trx_response.msisdn.join(' ').trim();
103 destination = destination.replace(' - ', '');
103 var product = result.trx_response.product.join(' ').trim(); 104 var product = result.trx_response.product.join(' ').trim();
104 var ref_num = result.trx_response.ref_num.join(' ').trim(); 105 var ref_num = result.trx_response.ref_num.join(' ').trim();
105 var harga = result.trx_response.harga.join(' ').trim(); 106 var harga = result.trx_response.harga.join(' ').trim();
106 var kode_voucher = result.trx_response.kode_voucher.join(' ').trim(); 107 var kode_voucher = result.trx_response.kode_voucher.join(' ').trim();
107 var stocks = result.trx_response.stock.join(' ').trim(); 108 var stocks = result.trx_response.stock.join(' ').trim();
108 var stock = parseStock(stocks, product); 109 var stock = parseStock(stocks, product);
109 110
110 if (stock == 0) { 111 if (stock == 0) {
111 console.log('OUT OF STOCK: ' + task['product']); 112 console.log('OUT OF STOCK: ' + task['product']);
112 config.globals.products = productsWithout(task['product']); 113 config.globals.products = productsWithout(task['product']);
113 } 114 }
114 115
115 response_code = '00'; 116 response_code = '00';
116 117
117 message = 'SN=' + kode_voucher + '; ' + product + ' ' + destination + ' ' + harga + ' ref_num: ' + ref_num + ' kode_voucher: ' + kode_voucher + ' sisa stock: ' + stock + ' unit'; 118 message = 'SN=' + kode_voucher + '; ' + product + ' ' + destination + ' ' + harga + ' ref_num: ' + ref_num + ' kode_voucher: ' + kode_voucher + ' sisa stock: ' + stock + ' unit';
118 } 119 }
119 120
120 console.log('Message to AAA: ' + message); 121 console.log('Message to AAA: ' + message);
121 callbackReport(task['requestId'], response_code, message); 122 callbackReport(task['requestId'], response_code, message);
122 }); 123 });
123 }); 124 });
124 } 125 }
125 126
126 function start(_config, _callbackReport) { 127 function start(_config, _callbackReport) {
127 config = _config; 128 config = _config;
128 callbackReport = _callbackReport 129 callbackReport = _callbackReport
129 } 130 }
130 131
131 function stockKeyword(product_desc) { 132 function stockKeyword(product_desc) {
132 var keywords = product_desc.match(/\s\d+K$/); 133 var keywords = product_desc.match(/\s\d+K$/);
133 if (!keywords) { 134 if (!keywords) {
134 return; 135 return;
135 } 136 }
136 137
137 if (keywords.length < 1) { 138 if (keywords.length < 1) {
138 return; 139 return;
139 } 140 }
140 141
141 return keywords[0].trim(); 142 return keywords[0].trim();
142 } 143 }
143 144
144 function parseStock(stocks, product_desc) { 145 function parseStock(stocks, product_desc) {
145 product_keyword = stockKeyword(product_desc); 146 product_keyword = stockKeyword(product_desc);
146 147
147 var _stocks = stocks.split('; '); 148 var _stocks = stocks.split('; ');
148 count = _stocks.length; 149 count = _stocks.length;
149 for (var i = 0; i < count; i++) { 150 for (var i = 0; i < count; i++) {
150 var stock = _stocks[i].split(' = '); 151 var stock = _stocks[i].split(' = ');
151 if (stock.length < 2) { 152 if (stock.length < 2) {
152 continue; 153 continue;
153 } 154 }
154 155
155 if (stock[0] == product_keyword) { 156 if (stock[0] == product_keyword) {
156 return parseInt(stock[1]); 157 return parseInt(stock[1]);
157 } 158 }
158 } 159 }
159 160
160 return 0; 161 return 0;
161 } 162 }
162 163
163 function productsWithout(to_be_removed, products) { 164 function productsWithout(to_be_removed, products) {
164 if (products === undefined) { 165 if (products === undefined) {
165 products = config.globals.products; 166 products = config.globals.products;
166 } 167 }
167 168
168 if (products.search(/^,/) == -1) { 169 if (products.search(/^,/) == -1) {
169 products = ',' + products; 170 products = ',' + products;
170 } 171 }
171 172
172 173
173 if (products.search(/,$/) == -1) { 174 if (products.search(/,$/) == -1) {
174 products = products + ','; 175 products = products + ',';
175 } 176 }
176 177
177 products = products.replace(/\s+/, ''); 178 products = products.replace(/\s+/, '');
178 products = products.replace(/,+/, ','); 179 products = products.replace(/,+/, ',');
179 products = products.replace(',' + to_be_removed + ',' , ','); 180 products = products.replace(',' + to_be_removed + ',' , ',');
180 products = products.replace(/^,/, ''); 181 products = products.replace(/^,/, '');
181 products = products.replace(/,$/, ''); 182 products = products.replace(/,$/, '');
182 183
183 return products; 184 return products;
184 } 185 }
185 186
186 exports.start = start; 187 exports.start = start;
187 exports.topupRequest = topupRequest; 188 exports.topupRequest = topupRequest;
188 exports.stockKeyword = stockKeyword; 189 exports.stockKeyword = stockKeyword;
189 exports.parseStock = parseStock; 190 exports.parseStock = parseStock;
190 exports.productsWithout = productsWithout; 191 exports.productsWithout = productsWithout;
191 192