#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); });