diff --git a/src/main/java/com/ai/da/service/CreditsService.java b/src/main/java/com/ai/da/service/CreditsService.java index 62d9e5e4..a3030057 100644 --- a/src/main/java/com/ai/da/service/CreditsService.java +++ b/src/main/java/com/ai/da/service/CreditsService.java @@ -36,4 +36,6 @@ public interface CreditsService extends IService { void preInsert(Long accountId, String changeEventName, String taskId, Boolean isPreInsert, String changedCredits); void updateChangedCredits(String accountId, String taskId); + + CreditsDetail queryDetailByTaskId(String taskId); } diff --git a/src/main/java/com/ai/da/service/impl/CreditsServiceImpl.java b/src/main/java/com/ai/da/service/impl/CreditsServiceImpl.java index 5c24211c..959461c6 100644 --- a/src/main/java/com/ai/da/service/impl/CreditsServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/CreditsServiceImpl.java @@ -318,4 +318,10 @@ public class CreditsServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("task_id", taskId); + return baseMapper.selectOne(queryWrapper); + } + } diff --git a/src/main/java/com/ai/da/service/impl/StripeServiceImpl.java b/src/main/java/com/ai/da/service/impl/StripeServiceImpl.java index f4699890..e81277a3 100644 --- a/src/main/java/com/ai/da/service/impl/StripeServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/StripeServiceImpl.java @@ -9,10 +9,7 @@ import com.ai.da.common.utils.SendEmailUtil; import com.ai.da.mapper.primary.AccountMapper; import com.ai.da.mapper.primary.PaymentInfoMapper; import com.ai.da.mapper.primary.SubscriptionInfoMapper; -import com.ai.da.mapper.primary.entity.OrderInfo; -import com.ai.da.mapper.primary.entity.PaymentInfo; -import com.ai.da.mapper.primary.entity.RefundInfo; -import com.ai.da.mapper.primary.entity.SubscriptionInfo; +import com.ai.da.mapper.primary.entity.*; import com.ai.da.model.dto.ProductPurchaseDTO; import com.ai.da.model.dto.SubscriptionEmailParamsDTO; import com.ai.da.service.*; @@ -24,6 +21,7 @@ import com.stripe.Stripe; import com.stripe.exception.SignatureVerificationException; import com.stripe.exception.StripeException; import com.stripe.model.*; +import com.stripe.model.Product; import com.stripe.model.checkout.Session; import com.stripe.net.Webhook; import com.stripe.param.*; @@ -140,6 +138,9 @@ public class StripeServiceImpl implements StripeService { // one-time 手动创建发票;订阅会自动创建invoice sessionBuilder.setInvoiceCreation(SessionCreateParams.InvoiceCreation.builder().setEnabled(Boolean.TRUE).build()); } +// sessionBuilder.setPaymentMethodConfiguration("pmc_1QIKyq02n1TEydyNKVEYvhW7"); +// sessionBuilder.addPaymentMethodType(SessionCreateParams.PaymentMethodType.ALIPAY); +// sessionBuilder.addPaymentMethodType(SessionCreateParams.PaymentMethodType.CARD); sessionBuilder.setCustomer(customerId); sessionBuilder.setSuccessUrl(productPurchaseDTO.getReturnUrl());//可自定义成功页面 sessionBuilder.setLocale(account.getLanguage().equals("CHINESE_SIMPLIFIED") ? SessionCreateParams.Locale.ZH : SessionCreateParams.Locale.EN); @@ -151,7 +152,12 @@ public class StripeServiceImpl implements StripeService { sessionBuilder.putMetadata("orderId", orderId); //通过订单号关联用于检索支付信息(可选) Session session = Session.create(sessionBuilder.build()); - log.info("sessionId:" + session.getId()); //退款方式1:拿到sessionId入库,退款的时候根据这个id找到PaymentIntent的id然后发起退款 + List paymentMethodTypes = session.getPaymentMethodTypes(); + log.info("paymentMethodTypes: {}", paymentMethodTypes); + + Session.PaymentMethodConfigurationDetails paymentMethodConfigurationDetails = session.getPaymentMethodConfigurationDetails(); + log.info("paymentMethodConfigurationDetails ID: {}", paymentMethodConfigurationDetails.getId()); + log.info("sessionId:{}", session.getId()); //退款方式1:拿到sessionId入库,退款的时候根据这个id找到PaymentIntent的id然后发起退款 // 更新order信息 orderInfoService.updateOrderNoById(orderInfo.getId(), orderId); @@ -387,22 +393,26 @@ public class StripeServiceImpl implements StripeService { // 当订单状态处于未支付或超时已关闭时,更新订单状态,其他状态均不更新订单状态 if (!OrderStatusEnum.NOT_PAY.getType().equals(orderStatus) && !OrderStatusEnum.TIMEOUT_CLOSED.getType().equals(orderStatus)) { log.info("订单状态 : {}", orderStatus); - return; + }else { + //更新订单状态 + orderInfoService.updateStatusByOrderNo(orderId, OrderStatusEnum.SUCCESS); + log.info("Stripe 订单:{} 状态更新成功", orderId); } - //更新订单状态 - orderInfoService.updateStatusByOrderNo(orderId, OrderStatusEnum.SUCCESS); - log.info("Stripe 订单:{} 状态更新成功", orderId); if (orderByOrderNo.getTitle().startsWith("积分购买")){ - float quantity = totalAmount / ProductEnum.CreditsProduct.getPrice(); - // 更新积分 - creditsService.buyCredits(orderByOrderNo.getAccountId(), quantity); - // 添加积分变更记录 - creditsService.insertToCreditsDetail(orderByOrderNo.getAccountId(), - CreditsEventsEnum.BUY_CREDITS.getName() + "--Stripe", - String.valueOf((Long.parseLong(CreditsEventsEnum.BUY_CREDITS.getValue()) * quantity)), - "positive", orderId); - log.info("用户:{} 积分信息更新成功", orderByOrderNo.getAccountId()); + // 查询当前订单的积分是否已添加 + CreditsDetail creditsDetail = creditsService.queryDetailByTaskId(orderId); + if (Objects.isNull(creditsDetail)){ + float quantity = totalAmount / ProductEnum.CreditsProduct.getPrice(); + // 更新积分 + creditsService.buyCredits(orderByOrderNo.getAccountId(), quantity); + // 添加积分变更记录 + creditsService.insertToCreditsDetail(orderByOrderNo.getAccountId(), + CreditsEventsEnum.BUY_CREDITS.getName() + "--Stripe", + String.valueOf((Long.parseLong(CreditsEventsEnum.BUY_CREDITS.getValue()) * quantity)), + "positive", orderId); + log.info("用户:{} 积分信息更新成功", orderByOrderNo.getAccountId()); + } } } catch (Exception e) { log.info(e.getMessage());