Ошибка при попытке передать значение в функции asyn c (процесс зарядки полосы) - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь интегрировать Стипе в свой проект. Чтобы создать заряд, мне нужно создать некоторые значения и передать их следующей функции. В настоящее время у меня есть цепочка функций asyn c для этого, но по какой-то причине одно из значений (созданный токен) не передается (ошибка: неопределенная). Я попробовал это с передачей возвращенного значения функции, а также с сохранением необходимого значения в объекте и последующей передачей объекта. И клиент, и токен генерируются правильно, но только клиент передается в функцию addCardToCustomer. Кто-нибудь может заметить ошибку, сделанную здесь?

router.post("/checkout", async function (req, res, next) {
  if (!req.session.cart) {
    return res.redirect("/shopping-cart");
  }

  let cart = new Cart(req.session.cart);
  let customerId = {};

  let createCustomer = async function () {
    var param = {};
    param.email = req.body.email;
    param.name = req.body.name;
    param.description = "";
    return stripe.customers.create(param, function (err, customer) {
      if (err) {
        console.log("err:" + err);
      }
      if (customer) {
        console.log("success: " + JSON.stringify(customer, null, 2));
        customerId.id = customer.id;
      } else {
        console.log("something went wrong");
      }
    });
//CUSTOMER CREATED

  };

  let createToken = async function () {
    let param = {};

    param.card = {
      number: req.body.card,
      exp_month: req.body.exp_month,
      exp_year: req.body.exp_year,
      cvc: req.body.security
    }
    return stripe.tokens.create(param, function (err, token) {
      if (err) {
        console.log("err:" + err);

      }
      if (token) {
        console.log("success: " + JSON.stringify(token, null, 2));
        console.log(req.body);
        customerId.t_Id = token.id;
        console.log(customerId.t_Id)
      } else {
        console.log("something went wrong");
      }
    });
  };

//TOKEN CREATED


  let addCardToCustomer = async function (createdToken) {

    return stripe.customers.createSource(customerId.id, {
      source: createdToken
    }, function (err, card) {
      if (err) {
        console.log("err:" + err);
        console.log(customerId.id)
        //CUSTOMER IS DEFINED
        console.log(customerId.t_id);
        //TOKEN UNDEFINED
      }
      if (card) {
        console.log("success: " + JSON.stringify(card, null, 2));
      } else {
        console.log("something went wrong");
      }
    });
  };

  //CUSTOMER.ID WORKS; TOKEN ID NOT

  let chargeCustomerThroughCustomerID = async function () {
    let param = {
      amount: cart.totalPrice * 100,
      currency: 'eur',
      description: 'First payment',
      customer: customerId.id
    }

   return stripe.charges.create(param, function (err, charge) {
      if (err) {
        console.log("err: " + err);
      }
      if (charge) {
        console.log("success: " + JSON.stringify(charge, null, 2));
      } else {
        console.log("Something wrong")
      }
    })
  }


  try {
    const createdCustomer = await createCustomer(); 
    const createdToken = await createToken();
    const addedCardToCustomer = await addCardToCustomer(createdToken); 
    const chargedCustomerThroughCustomerID = await chargeCustomerThroughCustomerID(); 


    res.send("success");

  } catch (e) {
    console.log(`error ${e}`)
  };



});

1 Ответ

0 голосов
/ 15 марта 2020

Я уже ответил вам на этот вопрос: в вашей функции отсутствуют async и аргументы.

Смотрите ответ здесь: Stripe.create функции не в правильном порядке

...