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
1 Answer
Reset to default 0As 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.