Commit a2bc143e8e90e1aac5f38a73c68f5befd1f0ce1e
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 |