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

SpringBoot集成Stripe支付时,如何将配送费设置为单独费用而非订单项

SpringBoot集成Stripe支付时,如何将配送费设置为单独费用而非订单项

你好呀!在Stripe里确实有更合适的方式来单独设置配送费,而不是把它当成一个普通的订单项——这样不仅逻辑更合理,在支付界面上也会显示成独立的配送费用模块,更符合用户的认知。下面我来给你讲讲具体怎么修改你的SpringBoot代码:


推荐方案:使用Stripe Checkout的Shipping Options配置配送费

Stripe Checkout专门提供了shipping_options参数来配置配送服务及费用,这是官方推荐的方式,能让配送费在支付页面单独展示,和商品项明确区分开。

你只需要把原来添加配送费LineItem的代码替换成以下配置即可:

  1. 先删除你代码中这部分创建配送费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);
  1. 换成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();
  1. 在创建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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 20:14:33