最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

java - How to add delivery fee in Stripe payment? - Stack Overflow

programmeradmin0浏览0评论

I need to add delivery fee in stripe payment. currently I have add the delivery fee as order item with 1 qunatity. Is there possibilty to add it as seperate fee? below you can see the current implementation stripe payment ui

I am using springboot for the stripe implementation

below you can see the current implementation code

package com.gmart.gmart_api.service.impl;

import com.gmart.gmart_api.dto.paymentDto.PaymentResponseDto;
import com.gmart.gmart_api.exceptions.paymentExceptions.StripeSessionException;
import com.gmart.gmart_api.model.Order;
import com.gmart.gmart_api.model.OrderItem;
import com.gmart.gmart_api.repository.OrderRepository;
import com.gmart.gmart_api.service.ProductService;
import com.gmart.gmart_api.service.StripeService;
import com.stripe.Stripe;
import com.stripe.exception.StripeException;
import com.stripe.model.Customer;
import com.stripe.model.checkout.Session;
import com.stripe.param.CustomerCreateParams;
import com.stripe.param.checkout.SessionCreateParams;
import .springframework.beans.factory.annotation.Autowired;
import .springframework.beans.factory.annotation.Value;
import .springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.*;

@Service
public class StripeServiceImpl implements StripeService {
    private final ProductService productService;
    private final OrderRepository orderRepository;

    @Autowired
    public StripeServiceImpl(ProductService productService, OrderRepository orderRepository) {
        this.productService = productService;
        this.orderRepository =orderRepository;
    }

    @Value("${stripe.secretKey}")
    private String secretKey;

    public PaymentResponseDto checkoutProducts(BigDecimal amount, Order order) {
        Stripe.apiKey = secretKey;

        List<SessionCreateParams.LineItem> lineItems = new ArrayList<>();

        List<OrderItem> orderItems = order.getOrderItems();

        for (OrderItem item : orderItems) {

            SessionCreateParams.LineItem.PriceData.ProductData productData =
                    SessionCreateParams.LineItem.PriceData.ProductData.builder()
                            .setName(item.getProduct().getProductName())
                            .build();


            SessionCreateParams.LineItem.PriceData priceData =
                    SessionCreateParams.LineItem.PriceData.builder()
                            .setCurrency("LKR")
                            .setUnitAmount(item.getUnitPrice().multiply(BigDecimal.valueOf(100)).longValue())
                            .setProductData(productData)
                            .build();

            SessionCreateParams.LineItem lineItem =
                    SessionCreateParams.LineItem.builder()
                            .setQuantity((long) item.getQuantity())
                            .setPriceData(priceData)
                            .build();

            lineItems.add(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);

        Map<String, String> metadata = new HashMap<>();
        //metadata.put("orderId", order.getOrderId());
        //metadata.put("userId", order.getSeller().getId());
        //metadata.put("amount", amount.toString());


        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)
                                        //.putMetadata("orderId", "order_test")
                                        //.putMetadata("userId", order.getSeller().getId())
                                        //.putAllMetadata(metadata)
                                        .build();

        CustomerCreateParams params1 =
                CustomerCreateParams.builder().putMetadata("order_id", "6735").build();

        try {
            Session session = Session.create(params);

            Customer customer = Customer.create(params1);

            return PaymentResponseDto.builder()
                    .status("success")
                    .message("Session created successfully")
                    .sessionId(session.getId())
                    .sessionUrl(session.getUrl())
                    .build();

        } catch (StripeException e) {
            throw new StripeSessionException(e.getMessage());
        }
    }
}

I need to add delivery fee in stripe payment. currently I have add the delivery fee as order item with 1 qunatity. Is there possibilty to add it as seperate fee? below you can see the current implementation stripe payment ui

I am using springboot for the stripe implementation

below you can see the current implementation code

package com.gmart.gmart_api.service.impl;

import com.gmart.gmart_api.dto.paymentDto.PaymentResponseDto;
import com.gmart.gmart_api.exceptions.paymentExceptions.StripeSessionException;
import com.gmart.gmart_api.model.Order;
import com.gmart.gmart_api.model.OrderItem;
import com.gmart.gmart_api.repository.OrderRepository;
import com.gmart.gmart_api.service.ProductService;
import com.gmart.gmart_api.service.StripeService;
import com.stripe.Stripe;
import com.stripe.exception.StripeException;
import com.stripe.model.Customer;
import com.stripe.model.checkout.Session;
import com.stripe.param.CustomerCreateParams;
import com.stripe.param.checkout.SessionCreateParams;
import .springframework.beans.factory.annotation.Autowired;
import .springframework.beans.factory.annotation.Value;
import .springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.*;

@Service
public class StripeServiceImpl implements StripeService {
    private final ProductService productService;
    private final OrderRepository orderRepository;

    @Autowired
    public StripeServiceImpl(ProductService productService, OrderRepository orderRepository) {
        this.productService = productService;
        this.orderRepository =orderRepository;
    }

    @Value("${stripe.secretKey}")
    private String secretKey;

    public PaymentResponseDto checkoutProducts(BigDecimal amount, Order order) {
        Stripe.apiKey = secretKey;

        List<SessionCreateParams.LineItem> lineItems = new ArrayList<>();

        List<OrderItem> orderItems = order.getOrderItems();

        for (OrderItem item : orderItems) {

            SessionCreateParams.LineItem.PriceData.ProductData productData =
                    SessionCreateParams.LineItem.PriceData.ProductData.builder()
                            .setName(item.getProduct().getProductName())
                            .build();


            SessionCreateParams.LineItem.PriceData priceData =
                    SessionCreateParams.LineItem.PriceData.builder()
                            .setCurrency("LKR")
                            .setUnitAmount(item.getUnitPrice().multiply(BigDecimal.valueOf(100)).longValue())
                            .setProductData(productData)
                            .build();

            SessionCreateParams.LineItem lineItem =
                    SessionCreateParams.LineItem.builder()
                            .setQuantity((long) item.getQuantity())
                            .setPriceData(priceData)
                            .build();

            lineItems.add(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);

        Map<String, String> metadata = new HashMap<>();
        //metadata.put("orderId", order.getOrderId());
        //metadata.put("userId", order.getSeller().getId());
        //metadata.put("amount", amount.toString());


        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)
                                        //.putMetadata("orderId", "order_test")
                                        //.putMetadata("userId", order.getSeller().getId())
                                        //.putAllMetadata(metadata)
                                        .build();

        CustomerCreateParams params1 =
                CustomerCreateParams.builder().putMetadata("order_id", "6735").build();

        try {
            Session session = Session.create(params);

            Customer customer = Customer.create(params1);

            return PaymentResponseDto.builder()
                    .status("success")
                    .message("Session created successfully")
                    .sessionId(session.getId())
                    .sessionUrl(session.getUrl())
                    .build();

        } catch (StripeException e) {
            throw new StripeSessionException(e.getMessage());
        }
    }
}
Share Improve this question edited Apr 1 at 6:23 VLAZ 29.1k9 gold badges63 silver badges84 bronze badges asked Mar 29 at 18:33 salinda yasassalinda yasas 255 bronze badges 1
  • 2 please refer the "Charge for shipping", docs.stripe/payments/during-payment/… – Lakshan Commented Mar 30 at 15:46
Add a comment  | 

1 Answer 1

Reset to default 0

As another comment, you would want to look at the Charge for shipping section, where you can create a Shipping Rate and display it as separated line.

发布评论

评论列表(0)

  1. 暂无评论