javascript - Next JS : 向 Stripe 发出 Post 请求,以便将多个商品添加到购物车
问题描述
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,
});
}
发布请求:
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 });
};
解决方案
您可以使用您喜欢的任何结构在客户端和后端之间进行通信,但是您对 Stripe 的 API 请求以创建会话必须符合line_items
API 参数预期形状(文档)。
您可以在每个项目上即时定义定价: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',
});
推荐阅读
- python - 如何在Excel中返回未知列长度的非空顶行列值?
- jquery - 如何实现基于规则选择一年中一周的日期选择器?
- javascript - Bokeh CustomJS 问题与解构实例
- python - sklearn.manifold 导入 MDS 没有名为“numpy.random.bit_generator”的模块
- c# - 具有多个视图相同 ViewModel 的棱镜导航
- ruby-on-rails - Had to re-write a DB Query for Rails 6 due to Squeel gem: Error: undefined method `call' for #
- authentication - 未注册类型“Microsoft.AspNetCore.Identity.UserManager`1[ABC_App.Repository.Models.ApplicationUser]”的服务
- web - 为请求输入创建网站(包括保存文件)
- reactjs - 来自一个客户端的多个 Socket.IO 实例
- linux - 读取大型 gb 文件并收到错误“client_loop:发送断开连接:管道损坏”