NEXT JS:我試圖將狀態變數“cart”的內容放入對 STRIPE api 的 POST 請求的正文中。購物車的格式為 [{id: 1, amount: 1}, {id: , amount: }......]
我嘗試將專案直接放入 api 處理程式 (list_items) 并且有效。但是我無法讓我的“購物車”變數顯示在那里,所以我想我必須在 POST 請求本身中包含這些專案。試過讓它運行(包括那里的一個物件和 JSON.stringify 作為“line_items”的屬性 - 變數,但無濟于事。也許有人可以幫助我?
API處理程式:
import Stripe from 'stripe';
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);
export default async function handler(req, res) {
if (req.method !== 'POST') {
return res.send({
error: 'Method need to be POST',
});
}
const domainURL = 'http://localhost:3000';
// const { quantity, mode, productKey } = req.body;
const pmTypes = ['card'];
const session = await stripe.checkout.sessions.create({
payment_method_types: pmTypes,
mode: 'payment',
locale: 'en',
line_items: the_variable????,
success_url: `${domainURL}/success?session_id={CHECKOUT_SESSION_ID}`,
cancel_url: `${domainURL}/cart`,
});
res.send({
sessionId: session.id,
});
}
POST 請求:
const stripeLoader = loadStripe(props.pk);
const redirectToCheckout = async () => {
const stripeClient = await stripeLoader;
const { sessionId } = await fetch('api/checkout_sessions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body : {????}
}).then((res) => res.json());
stripeClient.redirectToCheckout({ sessionId });
};
uj5u.com熱心網友回復:
我想出了如何發出 POST 請求。身體必須是這樣的:
body: JSON.stringify({
lineItems: props.cart.map((singleItem) => {
return {
price: <the_stripe_price_key_for_the_given_product>,
quantity: <the_amount>,
};
}),
})
在 API 處理程式中包含以下行:const { lineItems } = req.body;
并設定line_items: lineItems
所以,正如諾蘭指出的那樣, line_items 將接受一個物件陣列(在我的例子中是通過我的“購物車”狀態變數的映射生成的)。
uj5u.com熱心網友回復:
您可以使用您喜歡的任何結構在客戶端和后端之間進行通信,但是您對 Stripe 的 API 請求必須符合line_itemsAPI 引數預期形狀 ( docs )。
您可以定義定價上飛與price_data各專案:
const session = await stripe.checkout.sessions.create({
payment_method_types: ['card'],
line_items: [
{
price_data: {
currency: 'usd',
product_data: {
name: 'T-shirt',
},
unit_amount: 2000,
},
quantity: 1,
},
],
mode: 'payment',
success_url: 'https://example.com/success',
cancel_url: 'https://example.com/cancel',
});
或者您可以使用預定義的價格:
const session = await stripe.checkout.sessions.create({
payment_method_types: ['card'],
line_items: [{
price: 'price_123',
quantity: 1,
},{
price: 'price_456',
quantity: 3,
}],
mode: 'payment',
success_url: 'https://example.com/success?session_id={CHECKOUT_SESSION_ID}',
cancel_url: 'https://example.com/cancel',
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/321508.html
標籤:javascript 接口 邮政 下一个.js 条纹支付
