4 Commits

5 changed files with 12 additions and 10 deletions

View File

@@ -3383,14 +3383,15 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
Account account = accountMapper.selectById(accountId); Account account = accountMapper.selectById(accountId);
if (!Objects.isNull(account.getValidEndTime()) if (!Objects.isNull(account.getValidEndTime())
&& account.getValidEndTime().equals(currentPeriodEnd * 1000)) { && account.getValidEndTime().equals(currentPeriodEnd * 1000)) {
log.info("accountId:{}未更新账号有效期。current validEnd:{}, new validEnd:{}", accountId, account.getValidEndTime(), currentPeriodEnd);
return false; return false;
} else { } else {
account.setValidEndTime(currentPeriodEnd * 1000); account.setValidEndTime(currentPeriodEnd * 1000);
accountMapper.updateById(account); accountMapper.updateById(account);
log.info("accountId:{} 将账号有效期更新到 {}", accountId, currentPeriodEnd); log.info("accountId:{} 将账号有效期更新到 {}", accountId, currentPeriodEnd);
}
return true; return true;
} }
}
@Override @Override
public void updateUserRoleAndCredits(Long accountId, String orderNo) { public void updateUserRoleAndCredits(Long accountId, String orderNo) {

View File

@@ -486,7 +486,8 @@ public class StripeServiceImpl implements StripeService {
emailParamsDTO.setEmail(account.getUserEmail()); emailParamsDTO.setEmail(account.getUserEmail());
emailParamsDTO.setCountry(paymentInfo.getCountry()); emailParamsDTO.setCountry(paymentInfo.getCountry());
emailParamsDTO.setOrderId(paymentInfo.getId().toString()); emailParamsDTO.setOrderId(paymentInfo.getId().toString());
emailParamsDTO.setOrderRef("\"" + orderListLink + paymentInfo.getId().toString() + "\""); // emailParamsDTO.setOrderRef("\"" + orderListLink + paymentInfo.getId().toString() + "\"");
emailParamsDTO.setOrderRef("\"" + paymentInfo.getHostedInvoiceUrl() + "\"");
emailParamsDTO.setCreateDate(String.valueOf(paymentInfo.getCreateTime()).replace("T", " ")); emailParamsDTO.setCreateDate(String.valueOf(paymentInfo.getCreateTime()).replace("T", " "));
emailParamsDTO.setQuantity(String.valueOf(1)); emailParamsDTO.setQuantity(String.valueOf(1));
emailParamsDTO.setTotalFee(paymentInfo.getPayerTotal().toString()); emailParamsDTO.setTotalFee(paymentInfo.getPayerTotal().toString());

View File

@@ -135,13 +135,17 @@ public class StripeSubscriptionServiceImpl implements StripeSubscriptionService
// renewal 场景:从 InvoicePaidHandler 直接传入已更新的 SubscriptionInfo避免事务未提交导致查询不到 // renewal 场景:从 InvoicePaidHandler 直接传入已更新的 SubscriptionInfo避免事务未提交导致查询不到
if (passedInfo != null) { if (passedInfo != null) {
long now = Instant.now().getEpochSecond(); long now = Instant.now().getEpochSecond();
// 限制当前时间在订阅区间内,避免处理上个周期内的回调而重复发送邮件 boolean inPeriod = now > passedInfo.getCurrentPeriodStart() && now < passedInfo.getCurrentPeriodEnd();
if (now > passedInfo.getCurrentPeriodStart() && now < passedInfo.getCurrentPeriodEnd() // 续订失败的场景可能订单状态已被更新为past_due
&& "active".equals(passedInfo.getStatus())) { boolean validStatus = "fail_renewal".equals(type)
? ("past_due".equals(passedInfo.getStatus()) || "active".equals(passedInfo.getStatus()))
: "active".equals(passedInfo.getStatus());
if (inPeriod && validStatus) {
return passedInfo; return passedInfo;
} }
return null; return null;
} }
if (!StringUtil.isNullOrEmpty(orderNo)) { if (!StringUtil.isNullOrEmpty(orderNo)) {
long now = Instant.now().getEpochSecond(); long now = Instant.now().getEpochSecond();
List<SubscriptionInfo> infos = subscriptionInfoMapper.selectList( List<SubscriptionInfo> infos = subscriptionInfoMapper.selectList(

View File

@@ -96,10 +96,6 @@ public class CheckoutSessionExpiredHandler implements StripeEventHandler {
// 首次订阅失败 // 首次订阅失败
stripeSubscriptionService.sendFailedNewOrderEmail(orderNo); stripeSubscriptionService.sendFailedNewOrderEmail(orderNo);
log.info("[checkout.session.expired] 首次订阅失败邮件已发送orderNo={}", orderNo); log.info("[checkout.session.expired] 首次订阅失败邮件已发送orderNo={}", orderNo);
} else {
// 续费失败 todo 续费不走这里吧?
stripeSubscriptionService.sendSubscriptionEmail(null, "fail_renewal", subInfoList.getFirst().getOrderNo(), null);
log.info("[checkout.session.expired] 续费失败邮件已发送orderNo={}", orderNo);
} }
} }

View File

@@ -90,7 +90,7 @@ public class InvoicePaidHandler implements StripeEventHandler {
updateSubscriptionPeriod(invoice, subscriptionInfo); updateSubscriptionPeriod(invoice, subscriptionInfo);
// 更新用户积分、账号到期时间,添加积分详细记录 // 更新用户积分、账号到期时间,添加积分详细记录
accountService.updateAccountValidity(subscriptionInfo.getAccountId(), invoice.getPeriodEnd()); accountService.updateAccountValidity(subscriptionInfo.getAccountId(), subscriptionInfo.getCurrentPeriodEnd());
accountService.updateUserRoleAndCredits(subscriptionInfo.getAccountId(), subscriptionInfo.getOrderNo()); accountService.updateUserRoleAndCredits(subscriptionInfo.getAccountId(), subscriptionInfo.getOrderNo());
// 发送通知邮件 // 发送通知邮件