将req.body价格值传递到另一条Express路线以重定向到Stripe并收费



首先感谢您的帮助。我正试图将从客户端发布的值传递给Stripe创建结账会话对象,以根据客户端的确定对蛋糕收取自定义金额。

如果你想完整地查看我的代码,请参阅https://github.com/calumbradley/cakeitorleaveit

价格数据是通过请求主体[0]中被称为/data的路由接收的。价格

我似乎无法找到一种方法将其传递到创建结账会话price_data,然后传递到unit_amount值。

请参阅下面的我的快递服务器代码,在unit_amount 右侧的评论中提到了错误

请注意,我以前曾以这样或那样的形式问过这个问题,不幸的是,我仍然坚持下去!

app.post('/data', (req, res, next) => {
console.log(req.body[0].price); //logs an int of 7 to the console
res.send({message : "Successful request"})
next()
})
app.post("/create-checkout-session", async (req, res) => {

const session = await stripe.checkout.sessions.create({
payment_method_types: ["card"],
line_items: [
{
price_data: {
currency: "gbp",
unit_amount: req.body[0].price, //errors with "TypeError: 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);
});
app.listen(4242, () => console.log(`Node server listening on port ${port}!`));

看起来您希望收到两个单独的HTTP请求:

  • POST /data
  • POST /create-checkout-session

请记住,express完全独立地处理这两个请求。每个中间件函数将接收一个req对象,该对象包含来自当前请求的数据。因此,对POST /data路由的请求包括price(正如您通过将其打印到控制台所看到的(,但对POST /create-checkout-session的请求将只包括该请求中直接提供的数据。如果price不在该请求中,则它在req对象上不可用。

如果你需要在请求之间共享数据,你必须做一些事情来实现这一点。您可以将其保存在本地,但这不是一个好主意,因为对于可能向服务器发送请求的所有用户,您只有一个值。您需要一种方法来区分一个用户和另一个用户的数据。

一种常见的处理方法是使用express会话模块。使用此模块可以将数据与特定的用户会话关联起来,并在不同的路由之间共享。但如果您正在使用Stripe API,它可能有自己的处理会话的方式。在这种情况下,您应该查看Stripe文档,了解它们的会话是如何工作的。

最新更新