无需在Stripe Dashboard创建商品的多商品Stripe Checkout技术问询
Stripe集成相关问题解答
问题1:无需在Stripe Dashboard逐个创建商品,自行管理并聚合至Checkout是否可行?
可行。Stripe Checkout支持临时生成商品/价格的模式,你完全可以在自有数据库中管理商品的名称、定价、库存等信息,用户确认购买时,通过后端调用Stripe API创建Checkout会话,将购物车中的商品信息动态传入即可,不需要提前在Dashboard手动创建商品。
问题2:客户端JS动态生成价格,是否需要调整方案?
必须调整。前端代码可被恶意用户篡改,直接在前端生成价格存在被恶意修改的风险,会导致订单金额异常。正确流程是:前端仅负责展示商品、收集用户的购物车选择(比如商品ID、数量),所有价格计算、商品信息校验都放在后端,后端从自有数据库拉取商品的真实定价,再生成Stripe Checkout会话。
问题3:如何在server.js的会话中为line_items设置对应购物车总额的unit_amount?
核心是从后端可信来源获取商品真实价格,计算后传入line_items,注意unit_amount的单位是所选货币的最小单位(比如美元为分,人民币为分,需用整数表示)。以下是server.js中的示例代码:
// 引入Stripe SDK const stripe = require('stripe')('你的Stripe秘钥'); // 假设后端接收前端传递的购物车数据(仅包含商品ID和数量) const cartItems = [ { productId: 'prod_001', quantity: 2 }, { productId: 'prod_002', quantity: 1 } ]; // 从自有数据库查询商品的真实定价(示例数据,实际需从数据库读取) const productPriceMap = { prod_001: 2999, // 对应29.99美元 prod_002: 1499 // 对应14.99美元 }; // 构建line_items数组 const lineItems = cartItems.map(item => ({ price_data: { currency: 'usd', // 根据你的业务设置对应货币 product_data: { name: `商品${item.productId}` // 从数据库获取真实商品名称 }, unit_amount: productPriceMap[item.productId] }, quantity: item.quantity })); // 创建Checkout会话 const createCheckoutSession = async () => { const session = await stripe.checkout.sessions.create({ payment_method_types: ['card'], line_items: lineItems, mode: 'payment', success_url: 'https://你的域名.com/success', cancel_url: 'https://你的域名.com/cancel', }); return session; };
注意事项:
- 绝对不能使用前端传递的价格值,必须从后端数据库或其他可信数据源获取
unit_amount必须是整数,不能传入小数(比如29.99美元要转成2999)- 同一商品多件购买时,通过
quantity字段设置数量,无需重复创建line item条目
内容的提问来源于stack exchange,提问作者LukeFer
相关产品推荐
相关产品推荐

