StripeService.java 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package com.fdkankan.pay.util.stripe;
  2. import com.fdkankan.pay.common.ResultCode;
  3. import com.fdkankan.pay.config.PayConfig;
  4. import com.fdkankan.pay.entity.*;
  5. import com.fdkankan.pay.exception.BusinessException;
  6. import com.fdkankan.pay.response.OpenPayResponse;
  7. import com.fdkankan.pay.service.*;
  8. import com.fdkankan.pay.util.CacheUtil;
  9. import com.paypal.api.payments.Payment;
  10. import com.stripe.model.Price;
  11. import com.stripe.model.Product;
  12. import com.stripe.model.Subscription;
  13. import com.stripe.model.checkout.Session;
  14. import com.stripe.param.SubscriptionCancelParams;
  15. import com.stripe.param.checkout.SessionCreateParams;
  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.print.attribute.standard.NumberOfInterveningJobs;
  21. import javax.servlet.http.HttpServletRequest;
  22. import javax.servlet.http.HttpServletResponse;
  23. import java.math.BigDecimal;
  24. import java.util.HashMap;
  25. import java.util.Map;
  26. import java.util.UUID;
  27. @Service
  28. @Slf4j
  29. public class StripeService {
  30. @Autowired
  31. IStripeProductService stripeProductService;
  32. @Autowired
  33. IStripePriceService stripePriceService;
  34. @Autowired
  35. IStripeCustomerService stripeCustomerService;
  36. @Autowired
  37. IAutopayOrderService autopayOrderService;
  38. @Autowired
  39. IStripeConfigService stripeConfigService;
  40. public Object openPay(Order param, String ipAddr,String lang) {
  41. StripeConfig stripeConfig = stripeConfigService.getByServeId(param.getServeId());
  42. if(stripeConfig == null){
  43. throw new BusinessException(ResultCode.PAYPAL_CONFIG_ERROR);
  44. }
  45. stripeConfig.setSuccessUrl( CacheUtil.mainUrl + stripeConfig.getCallBackUrl() +"/"+param.getOrderSn()+"/"+param.getPayType()+"/success");
  46. stripeConfig.setCancelUrl( CacheUtil.mainUrl + stripeConfig.getCallBackUrl() +"/"+param.getOrderSn()+"/"+param.getPayType()+"/cancel");
  47. //stripe支付
  48. if(param.getPayType() == 6 ){
  49. return this.createPay(param,stripeConfig,lang);
  50. }
  51. throw new BusinessException(ResultCode.WX_ORDER_PAY_TYPE_ERROR);
  52. }
  53. public Object createPay(Order param,StripeConfig stripeConfig,String lang){
  54. try {
  55. OpenPayResponse openPayResponse = new OpenPayResponse();
  56. openPayResponse.setOrderSn(param.getOrderSn());
  57. openPayResponse.setPayType(6);
  58. if(param.getAutoPay() == 1){
  59. AutopayOrder autopayOrder = autopayOrderService.getByOrderSn(param.getOrderSn(),param.getPayType());
  60. openPayResponse.setAutoPay(1);
  61. if(autopayOrder !=null){
  62. openPayResponse.setH5Url(autopayOrder.getSubscriptionHref());
  63. openPayResponse.setQrCodeUrl(autopayOrder.getSubscriptionHref());
  64. return openPayResponse;
  65. }
  66. }
  67. String productName = StringUtils.isBlank(param.getProductName()) ? "product" :param.getProductName();
  68. String productId = stripeProductService.getByName(productName);
  69. if(StringUtils.isBlank(productId)){
  70. log.info("创建stripe支付失败--productId{}",productId);
  71. throw new BusinessException(ResultCode.STRIPE_ERROR);
  72. }
  73. String priceId = stripePriceService.getByParam(param.getOrderMoney(),stripeConfig.getCurrency(),productId,param.getAutoPay(),param.getAutoPayTime());
  74. if(StringUtils.isBlank(priceId)){
  75. log.info("创建stripe支付失败--priceId{}",productId);
  76. throw new BusinessException(ResultCode.STRIPE_ERROR);
  77. }
  78. StripeCustomer stripeCustomer = stripeCustomerService.getByUserName(param.getUserName());
  79. SessionCreateParams.Mode mode = SessionCreateParams.Mode.PAYMENT;
  80. if(param.getAutoPay() == 1){
  81. mode = SessionCreateParams.Mode.SUBSCRIPTION;
  82. }
  83. SessionCreateParams.Locale locale = SessionCreateParams.Locale.AUTO;
  84. if(StringUtils.isNotBlank(lang) ){
  85. if("kr".equalsIgnoreCase(lang)){
  86. locale = SessionCreateParams.Locale.KO;
  87. }else {
  88. try {
  89. locale = SessionCreateParams.Locale.valueOf(lang.toUpperCase());
  90. }catch (Exception e){
  91. log.info("stripe中不包含该语言:{}",lang);
  92. locale = SessionCreateParams.Locale.EN;
  93. }
  94. }
  95. }
  96. SessionCreateParams params4 = SessionCreateParams.builder()
  97. .setMode(mode)
  98. .setSuccessUrl(stripeConfig.getSuccessUrl())
  99. .setCancelUrl(stripeConfig.getCancelUrl())
  100. .setLocale(locale)
  101. .setCustomerEmail(stripeCustomer!=null ?null :param.getUserName())
  102. .setCustomer(stripeCustomer!=null ?stripeCustomer.getCustomer():null)
  103. .addLineItem(
  104. SessionCreateParams.LineItem.builder()
  105. .setQuantity(1L)
  106. .setPrice(priceId)
  107. .build()).putMetadata("orderId", param.getOrderSn())
  108. .build();
  109. Session session = Session.create(params4);
  110. openPayResponse.setH5Url(session.getUrl());
  111. openPayResponse.setQrCodeUrl(session.getUrl());
  112. if(param.getAutoPay() == 1){
  113. autopayOrderService.saveAutoOrder(param.getOrderSn(),productId,priceId,null,session.getUrl(),param.getPayType());
  114. }
  115. return openPayResponse;
  116. }catch (Exception e){
  117. log.info("创建stripe支付失败--{}",e);
  118. throw new BusinessException(ResultCode.STRIPE_ERROR);
  119. }
  120. }
  121. public Boolean callBack(HttpServletRequest request, HttpServletResponse response, Order order, String result) {
  122. log.info("stripe-callback:{},{}",order,request);
  123. Boolean payFlag = false;
  124. String trade_no = null;
  125. String openId = null;
  126. if("cancel".equals(result)){
  127. return false;
  128. }
  129. try {
  130. Map<String, String[]> parameterMap = request.getParameterMap();
  131. for (String key : parameterMap.keySet()) {
  132. log.info("stripe-callBack--request:{},{}",key,request.getParameter(key));
  133. }
  134. }catch (Exception e) {
  135. log.error("stripe支付回调异常,errorMsg:{}", e.getMessage());
  136. return false;
  137. }finally {
  138. //orderService.payResult(order,payFlag,trade_no,openId);
  139. }
  140. return true;
  141. }
  142. public void cancelSubscriptions(String subscriptionId) {
  143. try {
  144. Subscription resource = Subscription.retrieve(subscriptionId);
  145. SubscriptionCancelParams params = SubscriptionCancelParams.builder().build();
  146. Subscription subscription = resource.cancel(params);
  147. }catch (Exception e){
  148. log.info("取消订阅失败:{}",e);
  149. throw new BusinessException(ResultCode.CANCEL_SUBSCRIPTIONS_ERROR);
  150. }
  151. }
  152. }