Blame view
lib/partner-listener/routers/topup.js
4.53 KB
9e61d939f
|
1 |
const MODULE_NAME = 'PARTNER-LISTENER.ROUTER.TOPUP'; |
f2c18879a
|
2 3 4 |
const express = require('express'); const config = require('komodo-sdk/config'); |
810fa18da
|
5 |
const logger = require('tektrans-logger'); |
f2c18879a
|
6 7 |
const coreapi = require('komodo-sdk/coreapi'); // const coreapi = require('../../coreapi'); |
cd4feda87
|
8 |
const matrix = require('../../matrix'); |
732c359a7
|
9 |
const dumper = require('../dumper'); |
f2c18879a
|
10 11 12 |
const router = express.Router(); module.exports = router; |
f2be872ef
|
13 14 15 16 17 |
const terminalsWithLocation = Array.isArray(config.terminals_with_location) ? config.terminals_with_location .filter((item) => typeof item === 'string') .map((item) => (item.trim().toLowerCase())) : []; |
f2c18879a
|
18 |
function onInvalidParameter(missingParameter, req, res) { |
9e61d939f
|
19 |
logger.verbose(`${MODULE_NAME} 1536D577: Undefined ${missingParameter} parameter`, { |
f2c18879a
|
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
xid: res.locals.xid, ip: req.ip, terminal_name: req.body.terminal_name || req.query.terminal_name, request_id: req.body.request_id || req.query.request_id, product_name: req.body.product_name || req.query.product_name, destination: req.body.destination || req.query.destination, }); res.end('INVALID REQUEST'); } function pagePrerequisite(req, res, next) { if (!req.body) req.body = {}; if (!req.body.terminal_name && !req.query.terminal_name) { onInvalidParameter('terminal_name', req, res); return; } if (!req.body.password && !req.query.password) { onInvalidParameter('password', req, res); return; } if (!req.body.request_id && !req.query.request_id) { onInvalidParameter('request_id', req, res); return; } if (!req.body.product_name && !req.query.product_name) { onInvalidParameter('product_name', req, res); return; } if (!req.body.destination && !req.query.destination) { onInvalidParameter('destination', req, res); return; } next(); } async function pageIndex(req, res) { |
9e61d939f
|
62 |
const { xid } = res.locals; |
f2c18879a
|
63 |
const terminalName = `${req.body.terminal_name || req.query.terminal_name}@${req.ip.replace(/^::ffff:/, '')}`; |
f2be872ef
|
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
const qs = { terminal_name: terminalName, password: req.body.password || req.query.password, request_id: req.body.request_id || req.query.request_id, product_name: req.body.product_name || req.query.product_name, destination: req.body.destination || req.query.destination, origin: config.name || 'HTTPGETX', report_ip: config.listener.core.ip || null, report_port: config.listener.core.port, reverse_url: req.body.reverse_url || req.query.reverse_url || null, }; if (terminalsWithLocation.indexOf(terminalName.toLowerCase()) >= 0) { const location = req.body.location || req.body.location_id || req.query.location || req.query.location_id; if (location) { qs.location = location; } } |
b403448ad
|
86 |
matrix.core.sent += 1; |
cd4feda87
|
87 |
|
f2c18879a
|
88 |
const [err, coreResponse] = await coreapi({ |
9e61d939f
|
89 |
xid, |
f2c18879a
|
90 |
path: '/prepaid/buy', |
f2be872ef
|
91 |
qs, |
f2c18879a
|
92 |
}); |
bdbbbf27d
|
93 |
if (err || !coreResponse) { |
b403448ad
|
94 95 96 97 98 99 100 101 |
matrix.core.sent_failed += 1; matrix.core.last_error = { xid, ts: new Date(), e: err, eCode: err.code, eMessage: err.message, }; |
9e61d939f
|
102 103 104 105 106 |
logger.warn(`${MODULE_NAME} 8DEBE15F: ERROR on /prepaid/buy response`, { xid, err, coreResponseTypeof: typeof coreResponse, coreResponse, |
f2c18879a
|
107 108 |
}); res.end('INVALID CORE RESPONSE'); |
732c359a7
|
109 110 |
dumper(xid, req, 'INVALID CORE RESPONSE'); |
f2c18879a
|
111 112 |
return; } |
9e61d939f
|
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
logger.verbose(`${MODULE_NAME} 2528A9B4: Got CORE response`, { xid, coreResponse, }); const responseToPartner = { httpgetx_xid: xid, request_id: coreResponse.request_id, transaction_id: coreResponse.transaction_id, transaction_date: coreResponse.transaction_date, store_name: coreResponse.store_name, terminal_name: coreResponse.terminal_name, product_name: coreResponse.product_name, destination: coreResponse.destination, rc: coreResponse.rc, |
050d92ffb
|
128 |
sn: coreResponse.sn || undefined, |
70df828c5
|
129 130 |
amount: Number(coreResponse.amount) || undefined, ending_balance: Number(coreResponse.ending_balance) || undefined, |
9e61d939f
|
131 132 133 134 |
message: coreResponse.message, }; res.json(responseToPartner); |
732c359a7
|
135 |
dumper(xid, req, responseToPartner); |
f2c18879a
|
136 |
} |
65f444c36
|
137 |
// router.all('/', (req, res) => { res.status(404).end('404: Not implemented yet'); }); |
f2c18879a
|
138 |
router.get('/', pagePrerequisite, pageIndex); |