TASK:Stripe支付模块重构-逻辑优化与完善、Stripe版本升级

This commit is contained in:
2026-04-29 17:16:48 +08:00
parent f2a074b2f6
commit cf02b59722
34 changed files with 3032 additions and 859 deletions

View File

@@ -1,5 +1,6 @@
package com.ai.da.controller;
import com.ai.da.common.context.UserContext;
import com.ai.da.common.response.Response;
import com.ai.da.common.utils.DateUtil;
import com.ai.da.common.utils.RedisUtil;
@@ -10,6 +11,7 @@ import com.ai.da.model.dto.ProductPurchaseDTO;
import com.ai.da.model.dto.QueryCouponsPageDTO;
import com.ai.da.model.vo.CheckCouponsVO;
import com.ai.da.service.StripeService;
import com.ai.da.service.StripeSubscriptionService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.paypal.http.HttpResponse;
import com.paypal.payments.Refund;
@@ -40,6 +42,8 @@ public class StripeController {
private StripeService stripeService;
@Resource
private RedisUtil redisUtil;
@Resource
private StripeSubscriptionService stripeSubscriptionService;
@Operation(summary = "创建支付链接")
@PostMapping("/createOrder")
@@ -53,30 +57,29 @@ public class StripeController {
@Operation(summary = "支付通知")
@PostMapping("/trade/notify")
public void callback(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{
Boolean result = stripeService.notify(request);
if (result){
response.setStatus(HttpServletResponse.SC_OK);
}else {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}catch (Exception e){
log.error("Stripe Controller层异常捕捉, {}", e.getMessage());
e.printStackTrace();
boolean result;
try {
result = stripeService.notify(request);
} catch (Exception e) {
log.error("Stripe Controller层异常捕捉, {}", e.getMessage(), e);
String key_1 = RedisUtil.STRIPE_EXCEPTION_LOG + DateUtil.dateToStr(new Date(), DateUtil.YYYY_MM_DD_HH);
String key_2 = key_1 + ":" + DateUtil.dateToStr(new Date(), DateUtil.YYYY_MM_DD_hh_mm_ss);
String key_2 = key_1 + ":" + DateUtil.dateToStr(new Date(), DateUtil.YYYY_MM_DD_HH_MM_SS);
String stackTrace = stripeService.getStackTrace(e, 10);
redisUtil.addToString(key_2, stackTrace);
Long size = redisUtil.getSize(key_1);
// 给我发送邮件
if (webhookReminderFlag.equals("1") && size == 3){
if ("1".equals(webhookReminderFlag) && size == 3) {
SendEmailUtil.commonExceptionReminder("Stripe Webhook 回调处理出现异常", new String[]{"xupei3360@163.com"});
}
result = false;
}
if (result) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
@Operation(summary = "申请退款")
/* @Operation(summary = "申请退款")
@GetMapping("/trade/refund/{orderNo}/{reason}")
public Response<HttpResponse<Refund>> refund(@PathVariable String orderNo, @PathVariable String reason) throws IOException {
String response = stripeService.refund(null,orderNo,reason);
@@ -85,7 +88,7 @@ public class StripeController {
}else {
return Response.fail("Request for refund failed.");
}
}
}*/
@Operation(summary = "获取订阅")
@GetMapping("/getSubscription")
@@ -100,7 +103,8 @@ public class StripeController {
@Operation(summary = "取消订阅")
@GetMapping("/cancelSubscription")
public Response<String> cancelSubscription(@RequestParam String subscriptionId, @RequestParam(required = false) String reason) {
stripeService.cancelSubscription(subscriptionId, reason);
Long accountId = UserContext.getUserHolder().getId();
stripeSubscriptionService.cancelSubscription(subscriptionId, reason, accountId);
return Response.success("success");
}