一、引入stripe-java包
pom.xml文件中引入stripe-java包27.0.0

二、订阅支付
java
// 初始化创建session所需参数 product为产品参数
List<SessionCreateParams.LineItem> prices = initPrice({{product}});
SessionCreateParams.Builder builder = SessionCreateParams.builder()
//支付方式
.setMode(SessionCreateParams.Mode.SUBSCRIPTION)
//支付成功
.setSuccessUrl({{stripeSuccessUrl}})
//支付完成
.setCancelUrl({{stripeCancelUrl}})
//推销码
.setAllowPromotionCodes(true)
//购物集合
.addAllLineItem({{prices}});
// 设置订阅免费试用期
SessionCreateParams.SubscriptionData.Builder subscriptionBuilder = SessionCreateParams.SubscriptionData.builder();
subscriptionBuilder.setTrialPeriodDays({{product.getTrialPeriodDays()}});
// 赋值订阅metadata
builder.setSubscriptionData(subscriptionBuilder.putMetadata("order_id", orderId).build());
// 添加折扣
builder.addDiscount(SessionCreateParams.Discount.builder().setCoupon({{couponId}}).build());
params = builder.build();
// 初始化checkout session
Session session = Session.create(params);
// 创建订单URL连接
return Result.SUCCESS(session.getUrl());
三、一次性支付
java
// 初始化创建session所需参数 product为产品参数 quantity 份数参数
List<SessionCreateParams.LineItem> prices = initPrice({{product}},{{quantity}});
params = SessionCreateParams.builder()
//一次性支付类型
.setMode(SessionCreateParams.Mode.PAYMENT)
.setPaymentIntentData(SessionCreateParams.PaymentIntentData.builder().putMetadata("order_id", orderId).build())
//支付成功
.setSuccessUrl({{stripeSuccessUrl}})
//支付完成
.setCancelUrl({{stripeCancelUrl}})
//推销码
.setAllowPromotionCodes(true)
//购物集合
.addAllLineItem({{prices}});
.build();
// 初始化checkout session
Session session = Session.create(params);
// 创建订单URL连接
return Result.SUCCESS(session.getUrl());
四、webhook
java
public String handleWebhook(String payload, HttpServletRequest request, HttpServletResponse response) throws Exception {
Event event = null;
String sigHeader = request.getHeader("Stripe-Signature");
if ({{stripeEndpointSecret}} != null && sigHeader != null) {
try {
event = Webhook.constructEvent(
payload, sigHeader, {{stripeEndpointSecret}}
);
} catch (SignatureVerificationException e) {
response.setStatus(400);
return "";
}
}
EventDataObjectDeserializer dataObjectDeserializer = event.getDataObjectDeserializer();
StripeObject stripeObject = null;
if (dataObjectDeserializer.getObject().isPresent()) {
stripeObject = dataObjectDeserializer.getObject().get();
} else {
response.setStatus(200);
return "";
}
// Handle the event
switch (event.getType()) {
case "payment_intent.canceled": {
PaymentIntent paymentIntent = (PaymentIntent) stripeObject;
String orderId = paymentIntent.getMetadata().get("order_id");
log.info("============orderId:{}",orderId);
break;
}
case "payment_intent.succeeded": {
PaymentIntent paymentIntent = (PaymentIntent) stripeObject;
String orderId = paymentIntent.getMetadata().get("order_id");
log.info("============orderId:{}",orderId);
break;
}
case "customer.subscription.created": {
Subscription subscription = (Subscription) stripeObject;
break;
}
case "invoice.payment_succeeded": {
Invoice invoice = (Invoice) stripeObject;
String orderId = invoice.getSubscriptionDetails().getMetadata().get("order_id");
log.info("============orderId:{}",orderId);
break;
}
case "checkout.session.completed": {
Session session = (Session) stripeObject;
break;
}
case "checkout.session.async_payment_succeeded": {
Session session = (Session) stripeObject;
break;
}
case "checkout.session.async_payment_failed": {
Session session = (Session) stripeObject;
break;
}
case "customer.subscription.updated": {
Subscription subscription = (Subscription) stripeObject;
String orderId = subscription.getMetadata().get("order_id");
log.info("============orderId:{}",orderId);
break;
}
case "customer.subscription.deleted": {
Subscription subscription = (Subscription) stripeObject;
String orderId = subscription.getMetadata().get("order_id");
log.info("============orderId:{}",orderId);
break;
}
default:
break;
}
response.setStatus(200);
return "";
}
以上内容仅够参考,期待与大家一起学习讨论。