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

如何在Stripe支付中添加配送费?技术实现问询

解决Stripe集成中添加配送费的问题

你之前在商品单价里叠加配送费的方式不对,因为unit_amount是单个商品的计价单位,这样会导致每个商品都额外收取费用,且无法在订单中单独展示配送费项。下面是两种正确的实现方式:

方法一:添加独立的配送费条目到line_items

直接在商品条目循环结束后,向line_items数组中添加一个单独的配送费项,这种方式简单直观,用户能在结账页面看到明确的配送费明细:

let line_items = [];
for (let productId of uniqIds) {
  const quantity = productsIds.filter(id => id === productId).length;
  const product = products.find(p => p._id.toString() === productId);
  line_items.push({
    quantity,
    price_data: {
      currency: 'EUR',
      product_data: {name: product.name},
      unit_amount: product.price * 100,
    },
  });
}

// 添加配送费条目(示例为5欧元,注意转换为最小货币单位:5*100=500)
line_items.push({
  quantity: 1,
  price_data: {
    currency: 'EUR',
    product_data: { name: '配送费' },
    unit_amount: 500,
  },
});

const session = await stripe.checkout.sessions.create({
  line_items: line_items,
  mode: 'payment',
  customer_email: email,
  success_url: `${req.headers.origin}/?success=true`,
  cancel_url: `${req.headers.origin}/?canceled=true`,
  metadata: {orderId: order._id.toString()},
});

方法二:使用Stripe Shipping Rates(适合需根据地址计算运费的场景)

如果你需要根据用户的收货地址动态计算运费,或者想在Stripe后台统一管理配送规则,可以先创建Shipping Rate(可通过Stripe Dashboard或API创建),然后在创建Checkout Session时指定该费率:

const session = await stripe.checkout.sessions.create({
  line_items: line_items,
  mode: 'payment',
  customer_email: email,
  success_url: `${req.headers.origin}/?success=true`,
  cancel_url: `${req.headers.origin}/?canceled=true`,
  metadata: {orderId: order._id.toString()},
  // 启用地址收集(根据需求调整允许的国家/地区)
  shipping_address_collection: {
    allowed_countries: ['DE', 'FR', 'ES'], // 示例允许的欧盟国家
  },
  // 指定已创建的Shipping Rate ID
  shipping_rates: ['shr_xxxxxx'], // 替换为你的Shipping Rate ID
});

注意:使用Shipping Rates时,需要先在Stripe后台或通过API创建对应的配送费率,配置好运费金额、适用地区等规则。

内容的提问来源于stack exchange,提问作者Rip Rip

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:01:12