You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 05:24:21