SpringBoot集成Stripe支付时,如何将配送费设置为单独费用而非订单项
SpringBoot集成Stripe支付时,如何将配送费设置为单独费用而非订单项
你好呀!在Stripe里确实有更合适的方式来单独设置配送费,而不是把它当成一个普通的订单项——这样不仅逻辑更合理,在支付界面上也会显示成独立的配送费用模块,更符合用户的认知。下面我来给你讲讲具体怎么修改你的SpringBoot代码:
推荐方案:使用Stripe Checkout的Shipping Options配置配送费
Stripe Checkout专门提供了shipping_options参数来配置配送服务及费用,这是官方推荐的方式,能让配送费在支付页面单独展示,和商品项明确区分开。
你只需要把原来添加配送费LineItem的代码替换成以下配置即可:
- 先删除你代码中这部分创建配送费LineItem的代码:
BigDecimal shippingFee = BigDecimal.valueOf(123); SessionCreateParams.LineItem.PriceData.ProductData shippingProductData = SessionCreateParams.LineItem.PriceData.ProductData.builder() .setName("Delivery Charges") .build(); SessionCreateParams.LineItem.PriceData shippingPriceData = SessionCreateParams.LineItem.PriceData.builder() .setCurrency("LKR") .setUnitAmount(shippingFee.multiply(BigDecimal.valueOf(100)).longValue()) // Convert LKR to cents .setProductData(shippingProductData) .build(); SessionCreateParams.LineItem shippingLineItem = SessionCreateParams.LineItem.builder() .setQuantity(1L) .setPriceData(shippingPriceData) .build(); // Add shipping fee to line items lineItems.add(shippingLineItem);
- 换成Stripe官方的配送费配置:
BigDecimal shippingFee = BigDecimal.valueOf(123); // 配置配送选项(可以添加多个,比如标准配送、加急配送) SessionCreateParams.ShippingOption shippingOption = SessionCreateParams.ShippingOption.builder() .setShippingRateData(SessionCreateParams.ShippingOption.ShippingRateData.builder() .setDisplayName("Standard Delivery") // 配送方式名称 .setType(SessionCreateParams.ShippingOption.ShippingRateData.Type.FIXED_AMOUNT) .setFixedAmount(SessionCreateParams.ShippingOption.ShippingRateData.FixedAmount.builder() .setCurrency("LKR") .setAmount(shippingFee.multiply(BigDecimal.valueOf(100)).longValue()) // 转换为最小货币单位(分) .build()) .build()) .build();
- 在创建Session参数的时候,添加这个配送选项:
SessionCreateParams params = SessionCreateParams.builder() .setMode(SessionCreateParams.Mode.PAYMENT) .setCustomerEmail(order.getSeller().getEmail()) .setSuccessUrl("http://localhost:3000/seller/orders/success") .setCancelUrl("http://localhost:3000/seller/orders/cancel") .addAllLineItem(lineItems) .addShippingOption(shippingOption) // 这里添加配送费选项 .build();
为什么推荐这种方式?
原来的做法是把配送费伪装成一个商品项,用户在支付界面会看到一个叫“Delivery Charges”的“商品”,体验不够直观。而用shipping_options配置后,Stripe会在支付页面单独展示配送模块,用户能清晰看到这是配送服务的费用,逻辑更清晰,也更符合电商场景的常规展示方式。
额外提示
- 如果你的业务有多种配送方式(比如标准配送、次日达),可以创建多个
ShippingOption对象,用addShippingOption多次添加即可,用户在支付时可以选择对应的配送方式。 - 注意金额必须转换为最小货币单位(比如LKR的分),这和你原来的处理方式一致,保持即可。
备注:内容来源于stack exchange,提问作者salinda yasas
相关产品推荐
相关产品推荐

