У меня есть эта функция, которая отправляет запрос к API (app.post), и он отправляет токен и URL-адрес, который перенаправляет на веб-оплату. Мне нужен этот токен в другой функции (app.get), чтобы я мог получить статус оплаты. Как я могу сохранить этот токен в глобальной переменной? Я перепробовал все, глобальные переменные (var и global.) функции, которые возвращают значение токена, и ничего не работает. Я новичок в nodejs и express.
//Function that returns a token and redirects to webpay
app.post('/realizarPago', async function (request, response) {
var options = {
'method': 'POST',
'hostname': 'sandbox.flow.cl',
'path': '/api/payment/create',
'headers': {
'Content-Type': 'application/x-www-form-urlencoded',
'Cookie': //xxx
},
'maxRedirects': 20
};
var req = https.request(options, (res) => {
var chunks = [];
res.on("data", (chunk) => {
chunks.push(chunk);
});
res.on("end", (chunk) => {
var body = Buffer.concat(chunks);
var datos = body.toString();
datos = JSON.parse(datos);
// console.log(datos);
// console.log(datos.token);
var token = datos.token; //i need this var token to be used in another function (get)
urlRedirect = urlRedirect + token
response.redirect(urlRedirect);
});
res.on("error", function (error) {
console.error("Error en función /realizarPago");
res.render('pages/pagoFail');
});
});
var postData = qs.stringify({
'flowOrder': flowOrder,
'amount': amount,
'email': userEmail,
'urlConfirmation': urlConfirmation,
'urlReturn': urlReturn,
'commerceOrder': commerceOrder,
'paymentMethod': paymentMethod,
'apiKey': apiKey,
// 'optional':{ },
'timeout': 300, //5 minutos para hacer la transacción, o se cierra.
'subject': subject,
's': hash
});
req.write(postData);
req.end();
});
//i need the token in this function so i can get the payment status, and a new hash
app.get('/pagoSuccess', function (req, res) {
var strConcat = "apiKey" + apiKey + "token" + token; //need the token to make another hash
var newHash = CryptoJS.createHmac("sha256", SecretKey).update(strConcat).digest('hex');
var options = {
'method': 'GET',
'hostname': 'sandbox.flow.cl',
'path': '/api/payment/getStatus?apiKey=' + apiKey + '&token=' + token + '&s=' + newHash,//the token //recieved in the code above has to be here
'headers': {
'Cookie': //xxx
},
'maxRedirects': 20
};
var reqs = https.request(options, function (resp) {
var chunks = [];
resp.on("data", function (chunk) {
chunks.push(chunk);
});
resp.on("end", function (chunk) {
body = Buffer.concat(chunks);
body = JSON.parse(body);
//var dat = body
console.log('json***************', body);
res.render('pages/pagoSuccess', { body: body })
});
resp.on("error", function (error) {
console.error(error);
});
});
reqs.end();
});