передать данные ответа в глобальную переменную или передать в другую функцию nodejs express js - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть эта функция, которая отправляет запрос к 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();

});

1 Ответ

0 голосов
/ 11 апреля 2020

Чтобы сохранить токен как глобальную переменную, вы можете поместить строку var token в самый верх, вне всех функций. Затем замените var token = datos.token; на token = datos.token;. Это должно это исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...