簡體   English   中英

將 req.body 價格值傳遞給另一個 Express 路由以重定向到 Stripe 並收費

[英]Passing a req.body price value to another Express route to redirect to Stripe and charge

首先感謝您的幫助。 我正在嘗試將從客戶端發布的值傳遞給 Stripe create-checkout-session 對象,以根據客戶端確定的蛋糕收取自定義金額。

如果您想完整查看我的代碼,請參閱https://github.com/calumbradley/cakeitorleaveit

價格數據是通過 req.body[0].price 中名為 /data 的路由接收的

我似乎無法找到一種方法將其傳遞到 create-checkout-session 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-session模塊。 使用此模塊將允許您將數據與特定用戶會話相關聯並在不同路由之間共享。 但是如果您使用的是 Stripe API,它可能有自己的處理會話的方式。 在這種情況下,您應該查看Stripe 文檔以了解它們的會話是如何工作的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM