如何在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
相关产品推荐
相关产品推荐

