Commit 94ef6ed1af2be60fb04916d2b8a683f2c1a58dbe
1 parent
fd96ee02b5
Exists in
master
91 link provider down
Showing 1 changed file with 4 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 | |||
97 | } else if (message == "Link Provider down") { | ||
98 | |||
99 | response_code = '91'; | ||
96 | 100 | ||
97 | } else if (message == "TRANSAKSI SUKSES !!!") { | 101 | } else if (message == "TRANSAKSI SUKSES !!!") { |
98 | var destination = result.trx_response.msisdn.join(' ').trim(); | 102 | var destination = result.trx_response.msisdn.join(' ').trim(); |
99 | var product = result.trx_response.product.join(' ').trim(); | 103 | var product = result.trx_response.product.join(' ').trim(); |
100 | var ref_num = result.trx_response.ref_num.join(' ').trim(); | 104 | var ref_num = result.trx_response.ref_num.join(' ').trim(); |
101 | var harga = result.trx_response.harga.join(' ').trim(); | 105 | var harga = result.trx_response.harga.join(' ').trim(); |
102 | var kode_voucher = result.trx_response.kode_voucher.join(' ').trim(); | 106 | var kode_voucher = result.trx_response.kode_voucher.join(' ').trim(); |
103 | var stocks = result.trx_response.stock.join(' ').trim(); | 107 | var stocks = result.trx_response.stock.join(' ').trim(); |
104 | var stock = parseStock(stocks, product); | 108 | var stock = parseStock(stocks, product); |
105 | 109 | ||
106 | if (stock == 0) { | 110 | if (stock == 0) { |
107 | console.log('OUT OF STOCK: ' + task['product']); | 111 | console.log('OUT OF STOCK: ' + task['product']); |
108 | config.globals.products = productsWithout(task['product']); | 112 | config.globals.products = productsWithout(task['product']); |
109 | } | 113 | } |
110 | 114 | ||
111 | response_code = '00'; | 115 | response_code = '00'; |
112 | 116 | ||
113 | message = 'SN=' + kode_voucher + '; ' + product + ' ' + destination + ' ' + harga + ' ref_num: ' + ref_num + ' kode_voucher: ' + kode_voucher + ' sisa stock: ' + stock + ' unit'; | 117 | message = 'SN=' + kode_voucher + '; ' + product + ' ' + destination + ' ' + harga + ' ref_num: ' + ref_num + ' kode_voucher: ' + kode_voucher + ' sisa stock: ' + stock + ' unit'; |
114 | } | 118 | } |
115 | 119 | ||
116 | console.log('Message to AAA: ' + message); | 120 | console.log('Message to AAA: ' + message); |
117 | callbackReport(task['requestId'], response_code, message); | 121 | callbackReport(task['requestId'], response_code, message); |
118 | }); | 122 | }); |
119 | }); | 123 | }); |
120 | } | 124 | } |
121 | 125 | ||
122 | function start(_config, _callbackReport) { | 126 | function start(_config, _callbackReport) { |
123 | config = _config; | 127 | config = _config; |
124 | callbackReport = _callbackReport | 128 | callbackReport = _callbackReport |
125 | } | 129 | } |
126 | 130 | ||
127 | function stockKeyword(product_desc) { | 131 | function stockKeyword(product_desc) { |
128 | var keywords = product_desc.match(/\s\d+K$/); | 132 | var keywords = product_desc.match(/\s\d+K$/); |
129 | if (!keywords) { | 133 | if (!keywords) { |
130 | return; | 134 | return; |
131 | } | 135 | } |
132 | 136 | ||
133 | if (keywords.length < 1) { | 137 | if (keywords.length < 1) { |
134 | return; | 138 | return; |
135 | } | 139 | } |
136 | 140 | ||
137 | return keywords[0].trim(); | 141 | return keywords[0].trim(); |
138 | } | 142 | } |
139 | 143 | ||
140 | function parseStock(stocks, product_desc) { | 144 | function parseStock(stocks, product_desc) { |
141 | product_keyword = stockKeyword(product_desc); | 145 | product_keyword = stockKeyword(product_desc); |
142 | 146 | ||
143 | var _stocks = stocks.split('; '); | 147 | var _stocks = stocks.split('; '); |
144 | count = _stocks.length; | 148 | count = _stocks.length; |
145 | for (var i = 0; i < count; i++) { | 149 | for (var i = 0; i < count; i++) { |
146 | var stock = _stocks[i].split(' = '); | 150 | var stock = _stocks[i].split(' = '); |
147 | if (stock.length < 2) { | 151 | if (stock.length < 2) { |
148 | continue; | 152 | continue; |
149 | } | 153 | } |
150 | 154 | ||
151 | if (stock[0] == product_keyword) { | 155 | if (stock[0] == product_keyword) { |
152 | return parseInt(stock[1]); | 156 | return parseInt(stock[1]); |
153 | } | 157 | } |
154 | } | 158 | } |
155 | 159 | ||
156 | return 0; | 160 | return 0; |
157 | } | 161 | } |
158 | 162 | ||
159 | function productsWithout(to_be_removed, products) { | 163 | function productsWithout(to_be_removed, products) { |
160 | if (products === undefined) { | 164 | if (products === undefined) { |
161 | products = config.globals.products; | 165 | products = config.globals.products; |
162 | } | 166 | } |
163 | 167 | ||
164 | if (products.search(/^,/) == -1) { | 168 | if (products.search(/^,/) == -1) { |
165 | products = ',' + products; | 169 | products = ',' + products; |
166 | } | 170 | } |
167 | 171 | ||
168 | 172 | ||
169 | if (products.search(/,$/) == -1) { | 173 | if (products.search(/,$/) == -1) { |
170 | products = products + ','; | 174 | products = products + ','; |
171 | } | 175 | } |
172 | 176 | ||
173 | products = products.replace(/\s+/, ''); | 177 | products = products.replace(/\s+/, ''); |
174 | products = products.replace(/,+/, ','); | 178 | products = products.replace(/,+/, ','); |
175 | products = products.replace(',' + to_be_removed + ',' , ','); | 179 | products = products.replace(',' + to_be_removed + ',' , ','); |
176 | products = products.replace(/^,/, ''); | 180 | products = products.replace(/^,/, ''); |
177 | products = products.replace(/,$/, ''); | 181 | products = products.replace(/,$/, ''); |
178 | 182 | ||
179 | return products; | 183 | return products; |
180 | } | 184 | } |
181 | 185 | ||
182 | exports.start = start; | 186 | exports.start = start; |
183 | exports.topupRequest = topupRequest; | 187 | exports.topupRequest = topupRequest; |
184 | exports.stockKeyword = stockKeyword; | 188 | exports.stockKeyword = stockKeyword; |
185 | exports.parseStock = parseStock; | 189 | exports.parseStock = parseStock; |
186 | exports.productsWithout = productsWithout; | 190 | exports.productsWithout = productsWithout; |
187 | 191 |