StripeService.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package com.fdkankan.ucenter.service.impl;
  2. import cn.hutool.core.collection.CollectionUtil;
  3. import com.fdkankan.ucenter.entity.StripeConfig;
  4. import com.fdkankan.ucenter.entity.StripeUserEmail;
  5. import com.fdkankan.ucenter.service.IStripeConfigService;
  6. import com.fdkankan.ucenter.service.IStripeUserEmailService;
  7. import com.fdkankan.ucenter.util.DateUserUtil;
  8. import com.stripe.Stripe;
  9. import com.stripe.exception.StripeException;
  10. import com.stripe.model.Customer;
  11. import com.stripe.model.CustomerSearchResult;
  12. import com.stripe.model.PaymentIntent;
  13. import com.stripe.model.PaymentIntentSearchResult;
  14. import com.stripe.param.CustomerSearchParams;
  15. import com.stripe.param.PaymentIntentSearchParams;
  16. import lombok.extern.slf4j.Slf4j;
  17. import org.apache.commons.lang3.StringUtils;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.stereotype.Service;
  20. import javax.annotation.PostConstruct;
  21. import java.util.ArrayList;
  22. import java.util.Date;
  23. import java.util.List;
  24. import java.util.stream.Collectors;
  25. @Service
  26. @Slf4j
  27. public class StripeService {
  28. @Autowired
  29. IStripeConfigService stripeConfigService;
  30. @Autowired
  31. IStripeUserEmailService stripeUserEmailService;
  32. @PostConstruct
  33. public void setStripeConfig(){
  34. List<StripeConfig> list = stripeConfigService.list();
  35. if(CollectionUtil.isEmpty(list)){
  36. log.info("setStripeConfig-error:数据库未初始化stripe配置");
  37. }
  38. StripeConfig stripeConfig = list.get(0);
  39. Stripe.apiKey = stripeConfig.getStripePrivate();
  40. }
  41. public boolean checkUserStripePay(Long userId,String userName){
  42. List<String> emailList = new ArrayList<>();
  43. emailList.add(userName);
  44. List<StripeUserEmail> list = stripeUserEmailService.getByUserId(userId);
  45. if(CollectionUtil.isNotEmpty(list)){
  46. for (StripeUserEmail stripeUserEmail : list) {
  47. emailList.add(stripeUserEmail.getStripePayEmail());
  48. }
  49. }
  50. for (String email : emailList) {
  51. if(checkEmailStripePay(email)){
  52. return true;
  53. }
  54. }
  55. return false;
  56. }
  57. public boolean checkEmailStripePay(String email){
  58. List<String> customer = this.getCustomerByEmail(email);
  59. if(CollectionUtil.isNotEmpty(customer)){
  60. for (String customerId : customer) {
  61. List<PaymentIntent> paymentIntents = this.searchPaySuccess(customerId);
  62. if(CollectionUtil.isNotEmpty(paymentIntents)){
  63. for (PaymentIntent paymentIntent : paymentIntents) {
  64. Long created = paymentIntent.getCreated();
  65. Date date = new Date(created);
  66. Date addOneYear = DateUserUtil.dateAddOneYear(date, 1);
  67. if(addOneYear.getTime() > new Date().getTime()){
  68. return true;
  69. }
  70. }
  71. }
  72. }
  73. }
  74. return false;
  75. }
  76. private List<String> getCustomerByEmail(String email) {
  77. try {
  78. CustomerSearchParams params =
  79. CustomerSearchParams
  80. .builder()
  81. .setQuery("email:'"+email+"'")
  82. .setLimit(100L)
  83. .build();
  84. CustomerSearchResult result = Customer.search(params);
  85. List<Customer> data = result.getData();
  86. List<String> resultList = new ArrayList<>(data.stream().map(Customer::getId).collect(Collectors.toList()));
  87. while (StringUtils.isNotBlank(result.getNextPage())){
  88. params = CustomerSearchParams
  89. .builder()
  90. .setQuery("email:'"+email+"'")
  91. .setPage(result.getNextPage())
  92. .setLimit(100L)
  93. .build();
  94. result = Customer.search(params);
  95. data = result.getData();
  96. resultList.addAll(data.stream().map(Customer::getId).collect(Collectors.toList()));
  97. }
  98. return resultList;
  99. }catch (Exception e){
  100. log.info("stripe-getCustomerByEmail-error:",e);
  101. }
  102. return null;
  103. }
  104. private List<PaymentIntent> searchPaySuccess(String customerId) {
  105. try {
  106. PaymentIntentSearchParams params = PaymentIntentSearchParams
  107. .builder()
  108. .setQuery("status:'succeeded' AND customer:'" + customerId+"'")
  109. //.setQuery("status:'succeeded'")
  110. .setLimit(100L)
  111. .build();
  112. PaymentIntentSearchResult result = PaymentIntent.search(params);
  113. List<PaymentIntent> resultList = new ArrayList<>(result.getData());
  114. while (StringUtils.isNotBlank(result.getNextPage())){
  115. params = PaymentIntentSearchParams
  116. .builder()
  117. .setQuery("status:'succeeded' AND customer:'" + customerId+"'")
  118. .setPage(result.getNextPage())
  119. .setLimit(100L)
  120. .build();
  121. result = PaymentIntent.search(params);
  122. resultList.addAll(result.getData());
  123. }
  124. return resultList;
  125. }catch (Exception e){
  126. log.info("stripe-searchPaySuccess-error:",e);
  127. }
  128. return null;
  129. }
  130. }