Экспресс-передача данных о теле в маршрут Stripe для оплаты

#javascript #node.js #express #stripe-payments

Вопрос:

В моем экспресс-приложении у меня есть маршрут, который получает цену торта со стороны клиента в теле запроса

 app.post("/data", (req, res) =gt; {  let price = req.body[0].price * 1000;  console.log(`Cake price is: £${price}`);  }); 

Это работает нормально и регистрирует цену в консоли

У меня есть другой маршрут, по которому я хотел бы передать эту переменную цену из тела запроса в полосу и взимать плату с клиента.

 app.post("/create-checkout-session", async (req, res) =gt; {  const session = await stripe.checkout.sessions.create({  payment_method_types: ["card"],  line_items: [  {  price_data: {  currency: "gbp",  unit_amount: req.body[0].price,  product_data: {  name: "CakeItOrLeaveIt",  // description: "", cake it or leave it description  // images: [], cake it or leave it logo  },  },  quantity: 1,  },  ],  mode: "payment",  success_url: `http://localhost:4242/success.html`,  cancel_url: `http://localhost:4242/cancel.html`,  });  res.redirect(303, session.url); }); 

Когда я передаю req.body[0].цена в мой маршрут с полосой, я получаю ошибку ниже.

unit_amount: req.body[0].цена, ошибка типа: Не удается прочитать свойства неопределенного (чтение «цена»)

Заранее спасибо

Комментарии:

1. Вам необходимо отправить данные о цене в теле запроса, чтобы он мог использовать эти данные.

Ответ №1:

Отправляете ли вы цену на /create-checkout-session маршрут на стороне клиента? Что может произойти, так это то, что вы передаете цену /data маршруту на стороне клиента, но вы не передаете цену /create-checkout-session . Трудно сказать, не видя, как вы отправляете свои данные в свой API.

Если вы хотите использовать один маршрут — например /data , маршрут, который вы можете перенести /create-checkout-session в функцию, вызвать эту функцию в /data маршруте и передать цену в качестве параметра /create-checkout-session function .

Ответ №2:

Спасибо, что я смог изменить свой код, чтобы указать цену торта в маршруте /создать-оформить заказ-сеанс

 app.post("/create-checkout-session", async (req, res) =gt; {   console.log(req.body[0].price * 1000); //this works and gets the cake price   const session = await stripe.checkout.sessions.create({  payment_method_types: ["card"],  line_items: [  {  price_data: {  currency: "gbp",  unit_amount: req.body[0].price * 1000, //this errors with Cannot read properties of undefined (reading 'price')  product_data: {  name: "CakeItOrLeaveIt",  // description: "", cake it or leave it description  // images: [], cake it or leave it logo  },  },  quantity: 1,  },  ],  mode: "payment",  success_url: `http://localhost:4242/success.html`,  cancel_url: `http://localhost:4242/cancel.html`,  });    res.redirect(303, session.url); });