Browse Source

stripe支付

lyhzzz 4 months ago
parent
commit
9c672c594a
35 changed files with 902 additions and 66 deletions
  1. 1 1
      src/main/java/com/fdkankan/pay/common/ResultCode.java
  2. 165 0
      src/main/java/com/fdkankan/pay/config/PayConfig.java
  3. 2 1
      src/main/java/com/fdkankan/pay/controller/AutopayOrderController.java
  4. 4 2
      src/main/java/com/fdkankan/pay/controller/BaseController.java
  5. 2 1
      src/main/java/com/fdkankan/pay/controller/OrderController.java
  6. 3 2
      src/main/java/com/fdkankan/pay/controller/PayController.java
  7. 42 0
      src/main/java/com/fdkankan/pay/controller/StripeController.java
  8. 3 0
      src/main/java/com/fdkankan/pay/entity/Order.java
  9. 75 0
      src/main/java/com/fdkankan/pay/entity/StripeConfig.java
  10. 58 0
      src/main/java/com/fdkankan/pay/entity/StripePrice.java
  11. 48 0
      src/main/java/com/fdkankan/pay/entity/StripeProduct.java
  12. 55 0
      src/main/java/com/fdkankan/pay/entity/StripeWebhookLog.java
  13. 5 3
      src/main/java/com/fdkankan/pay/generate/AutoGenerate.java
  14. 18 0
      src/main/java/com/fdkankan/pay/mapper/IStripeConfigMapper.java
  15. 18 0
      src/main/java/com/fdkankan/pay/mapper/IStripePriceMapper.java
  16. 18 0
      src/main/java/com/fdkankan/pay/mapper/IStripeProductMapper.java
  17. 18 0
      src/main/java/com/fdkankan/pay/mapper/IStripeWebhookLogMapper.java
  18. 16 0
      src/main/java/com/fdkankan/pay/service/IStripeConfigService.java
  19. 19 0
      src/main/java/com/fdkankan/pay/service/IStripePriceService.java
  20. 18 0
      src/main/java/com/fdkankan/pay/service/IStripeProductService.java
  21. 16 0
      src/main/java/com/fdkankan/pay/service/IStripeWebhookLogService.java
  22. 12 1
      src/main/java/com/fdkankan/pay/service/impl/PayOrderService.java
  23. 20 0
      src/main/java/com/fdkankan/pay/service/impl/StripeConfigServiceImpl.java
  24. 69 0
      src/main/java/com/fdkankan/pay/service/impl/StripePriceServiceImpl.java
  25. 55 0
      src/main/java/com/fdkankan/pay/service/impl/StripeProductServiceImpl.java
  26. 20 0
      src/main/java/com/fdkankan/pay/service/impl/StripeWebhookLogServiceImpl.java
  27. 3 2
      src/main/java/com/fdkankan/pay/util/alipay/sdk/AlipayService.java
  28. 0 49
      src/main/java/com/fdkankan/pay/util/paypal/restApi/RestApiPaypalService.java
  29. 3 2
      src/main/java/com/fdkankan/pay/util/paypal/sdk/PaypalService.java
  30. 93 0
      src/main/java/com/fdkankan/pay/util/stripe/StripeService.java
  31. 3 2
      src/main/java/com/fdkankan/pay/util/wx/WechatPayService.java
  32. 5 0
      src/main/resources/mapper/pay/StripeConfigMapper.xml
  33. 5 0
      src/main/resources/mapper/pay/StripePriceMapper.xml
  34. 5 0
      src/main/resources/mapper/pay/StripeProductMapper.xml
  35. 5 0
      src/main/resources/mapper/pay/StripeWebhookLogMapper.xml

+ 1 - 1
src/main/java/com/fdkankan/pay/common/ResultCode.java

@@ -16,7 +16,7 @@ public enum ResultCode {
     PAYPAL_CONFIG_ERROR(10009, "paypal-config缺失!"),
     ORDER_NO_PAY(10010, "订单未支付"),
     CANCEL_SUBSCRIPTIONS_ERROR(10011, "取消订阅失败!"),
-
+    STRIPE_ERROR(10012, "stripe支付失败!"),
     ;
 
     private Integer code;

+ 165 - 0
src/main/java/com/fdkankan/pay/config/PayConfig.java

@@ -0,0 +1,165 @@
+package com.fdkankan.pay.config;
+
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.pay.entity.AliConfig;
+import com.fdkankan.pay.entity.PaypalConfig;
+import com.fdkankan.pay.entity.StripeConfig;
+import com.fdkankan.pay.entity.WxConfig;
+import com.fdkankan.pay.service.IAliConfigService;
+import com.fdkankan.pay.service.IPaypalConfigService;
+import com.fdkankan.pay.service.IStripeConfigService;
+import com.fdkankan.pay.service.IWxConfigService;
+import com.fdkankan.pay.util.paypal.restApi.vo.EventTypeVo;
+import com.fdkankan.pay.util.paypal.restApi.vo.WebhookVo;
+import com.stripe.Stripe;
+import com.stripe.model.WebhookEndpoint;
+import com.stripe.param.WebhookEndpointCreateParams;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+
+import javax.annotation.PostConstruct;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+
+@Configuration
+@Slf4j
+public class PayConfig {
+    public static HashMap<Integer,AliConfig> aliConfigMap = new HashMap<>();
+    public static HashMap<Integer,WxConfig> wxConfigMap = new HashMap<>();
+    public static HashMap<Integer,PaypalConfig> paypalConfigMap = new HashMap<>();
+    public static HashMap<Integer,StripeConfig> stripeConfigMap = new HashMap<>();
+
+    @Autowired
+    IAliConfigService aliConfigService;
+    @Autowired
+    IWxConfigService wxConfigService;
+    @Autowired
+    IPaypalConfigService paypalConfigService;
+    @Autowired
+    IStripeConfigService stripeConfigService;
+
+    @PostConstruct
+    public void init(){
+        setConfig();
+        createPayPalWebhooks();
+        createStripeWebhooks();
+    }
+
+    public void setConfig() {
+        log.info("启动初始化支付配置");
+        List<AliConfig> aliConfigList = aliConfigService.list();
+        if (!aliConfigList.isEmpty()) {
+            log.info("初始化AliConfig配置");
+            aliConfigList.forEach(e -> aliConfigMap.put(e.getServeId(),e));
+        }
+
+        List<WxConfig> wxConfigList = wxConfigService.list();
+        if (!wxConfigList.isEmpty()) {
+            log.info("初始化wxConfig配置");
+            wxConfigList.forEach(e -> wxConfigMap.put(e.getServeId(),e));
+        }
+
+        List<PaypalConfig> paypalConfigList = paypalConfigService.list();
+        if (!paypalConfigList.isEmpty()) {
+            log.info("初始化PaypalConfig配置");
+            paypalConfigList.forEach(e -> paypalConfigMap.put(e.getServeId(),e));
+        }
+
+        List<StripeConfig> list = stripeConfigService.list();
+        if (!list.isEmpty()) {
+            log.info("初始化StripeConfig配置");
+            list.forEach(e -> stripeConfigMap.put(e.getServeId(),e));
+            list.forEach(e -> Stripe.apiKey = e.getApiKey());
+
+        }
+    }
+
+
+
+    /**
+     * 启动创建webhooks
+     * https://testeur.4dkankan.com/service/pay/paypal/webhook
+     */
+    public  void createPayPalWebhooks() {
+        Set<Integer> list = paypalConfigMap.keySet();
+        for (Integer key : list) {
+            PaypalConfig paypalConfig = paypalConfigMap.get(key);
+            if(StringUtils.isBlank(paypalConfig.getWebhookId())){
+                log.info("--------------项目启动初始化paypal-webhook-------------");
+                try {
+                    Map<String,String> map = new HashMap<>(4);
+                    map.put("Content-Type","application/json");
+                    WebhookVo webhookVo = new WebhookVo();
+                    webhookVo.setUrl(paypalConfig.getWebhookHost() +"/service/pay/paypal/webhook");
+                    webhookVo.getEvent_types().add(new EventTypeVo("PAYMENT.SALE.COMPLETED"));
+                    webhookVo.getEvent_types().add(new EventTypeVo("CATALOG.PRODUCT.CREATED"));
+                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.PLAN.CREATED"));
+                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.PLAN.ACTIVATED"));
+                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.PLAN.DEACTIVATED"));
+                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.SUBSCRIPTION.CREATED"));
+                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.SUBSCRIPTION.EXPIRED"));
+                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.SUBSCRIPTION.SUSPENDED"));
+                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.SUBSCRIPTION.UPDATED"));
+                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.SUBSCRIPTION.PAYMENT.FAILED"));
+                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.SUBSCRIPTION.CANCELLED"));
+
+                    String string =  JSONObject.toJSONString(webhookVo);
+                    String body = HttpRequest.post(paypalConfig.getBaseUrl() + "/v1/notifications/webhooks")
+                            .addHeaders(map)
+                            .basicAuth(paypalConfig.getClientId(), paypalConfig.getSecret())
+                            .body(string)
+                            .execute().body();
+                    log.info("paypal-createWebhooks:{}",body);
+                    JSONObject resp = JSONObject.parseObject(body);
+                    String webhookId = resp.getString("id");
+                    paypalConfig.setWebhookId(webhookId);
+
+                    LambdaUpdateWrapper<PaypalConfig> wrapper = new LambdaUpdateWrapper<>();
+                    wrapper.eq(PaypalConfig::getId,paypalConfig.getId());
+                    wrapper.set(PaypalConfig::getWebhookId,webhookId);
+                    paypalConfigService.update(wrapper);
+
+                }catch (Exception e){
+                    log.info("paypal-createWebhooks:error:",e);
+                }
+            }
+        }
+
+    }
+
+    public void createStripeWebhooks(){
+        try {
+            Set<Integer> keySet = stripeConfigMap.keySet();
+            for (Integer key : keySet) {
+                StripeConfig stripeConfig = stripeConfigMap.get(key);
+                if(StringUtils.isBlank(stripeConfig.getWebhookId())){
+
+                    Stripe.apiKey = stripeConfig.getApiKey();
+                    WebhookEndpointCreateParams params =
+                            WebhookEndpointCreateParams.builder()
+                                    .addEnabledEvent(WebhookEndpointCreateParams.EnabledEvent.ALL)
+                                    .setUrl(stripeConfig.getWebhookHost()+"/service/pay/stripe/webhook")
+                                    .build();
+
+                    WebhookEndpoint webhookEndpoint = WebhookEndpoint.create(params);
+                    String id = webhookEndpoint.getId();
+
+                    LambdaUpdateWrapper<StripeConfig> wrapper = new LambdaUpdateWrapper<>();
+                    wrapper.eq(StripeConfig::getId,stripeConfig.getId());
+                    wrapper.set(StripeConfig::getWebhookId,id);
+                    stripeConfigService.update(wrapper);
+                }
+            }
+        }catch (Exception e){
+
+        }
+
+    }
+}

+ 2 - 1
src/main/java/com/fdkankan/pay/controller/AutopayOrderController.java

@@ -4,6 +4,7 @@ package com.fdkankan.pay.controller;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.pay.common.ResultCode;
 import com.fdkankan.pay.common.ResultData;
+import com.fdkankan.pay.config.PayConfig;
 import com.fdkankan.pay.entity.*;
 import com.fdkankan.pay.exception.BusinessException;
 import com.fdkankan.pay.service.*;
@@ -134,7 +135,7 @@ public class AutopayOrderController {
         if(order == null){
             throw new BusinessException(ResultCode.ORDER_NOT_EXIST);
         }
-        PaypalConfig paypalConfig = paypalConfigService.getByServeId(order.getServeId());
+        PaypalConfig paypalConfig = PayConfig.paypalConfigMap.get(order.getServeId());
         if(paypalConfig == null){
             throw new BusinessException(ResultCode.PAYPAL_CONFIG_ERROR);
         }

+ 4 - 2
src/main/java/com/fdkankan/pay/controller/BaseController.java

@@ -1,5 +1,6 @@
 package com.fdkankan.pay.controller;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -14,8 +15,9 @@ public class BaseController {
     @Autowired
     protected HttpServletResponse response;
 
-    protected String getToken(){
-        return request.getHeader("token");
+    protected String getLang(){
+
+        return StringUtils.isBlank(request.getHeader("lang")) ? "zh" :  request.getHeader("lang");
     }
 
 

+ 2 - 1
src/main/java/com/fdkankan/pay/controller/OrderController.java

@@ -2,6 +2,7 @@ package com.fdkankan.pay.controller;
 
 import com.fdkankan.pay.common.ResultCode;
 import com.fdkankan.pay.common.ResultData;
+import com.fdkankan.pay.config.PayConfig;
 import com.fdkankan.pay.entity.Order;
 import com.fdkankan.pay.entity.WxConfig;
 import com.fdkankan.pay.exception.BusinessException;
@@ -23,7 +24,7 @@ public class OrderController {
     public ResultData getByOrderSn(@PathVariable String orderSn){
         Order order = orderService.getByOrderSn(orderSn);
         if(order != null){
-            WxConfig wxConfig = wxConfigService.getByServeId(order.getServeId());
+            WxConfig wxConfig = PayConfig.wxConfigMap.get(order.getServeId());
             if(wxConfig != null){
                 order.setWxAppId(wxConfig.getAppid());
             }

+ 3 - 2
src/main/java/com/fdkankan/pay/controller/PayController.java

@@ -3,6 +3,7 @@ package com.fdkankan.pay.controller;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.pay.common.ResultCode;
 import com.fdkankan.pay.common.ResultData;
+import com.fdkankan.pay.config.PayConfig;
 import com.fdkankan.pay.entity.Order;
 import com.fdkankan.pay.entity.WxConfig;
 import com.fdkankan.pay.exception.BusinessException;
@@ -39,7 +40,7 @@ public class PayController extends BaseController {
         if(order == null ){
             throw new BusinessException(ResultCode.ORDER_NOT_EXIST);
         }
-        WxConfig wxConfig = wxConfigService.getByServeId(order.getServeId());
+        WxConfig wxConfig = PayConfig.wxConfigMap.get(order.getServeId());
         if(wxConfig == null){
             throw new BusinessException(ResultCode.WX_CONFIG_NOT);
         }
@@ -52,7 +53,7 @@ public class PayController extends BaseController {
     @PostMapping(value = "/openPay")
     @ResponseBody
     public ResultData openPay(@RequestBody Order param) throws Exception {
-        return ResultData.ok(payOrderService.openPay(param, UrlUtils.getIpAddr(request)));
+        return ResultData.ok(payOrderService.openPay(param, UrlUtils.getIpAddr(request),getLang()));
     }
 
 

+ 42 - 0
src/main/java/com/fdkankan/pay/controller/StripeController.java

@@ -0,0 +1,42 @@
+package com.fdkankan.pay.controller;
+
+
+import cn.hutool.log.Log;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.pay.common.ResultData;
+import com.fdkankan.pay.entity.StripeWebhookLog;
+import com.fdkankan.pay.service.IStripeWebhookLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-15
+ */
+@RestController
+@RequestMapping("/service/pay/stripe")
+public class StripeController {
+
+    @Autowired
+    IStripeWebhookLogService stripeWebhookLogService;
+
+    @PostMapping("/webhook")
+    public ResultData webhook(@RequestBody JSONObject webhookObj){
+
+        StripeWebhookLog stripeWebhookLog = new StripeWebhookLog();
+        stripeWebhookLog.setMsg(webhookObj.toJSONString());
+
+
+        stripeWebhookLogService.save(stripeWebhookLog);
+        return ResultData.ok();
+    }
+}
+

+ 3 - 0
src/main/java/com/fdkankan/pay/entity/Order.java

@@ -121,4 +121,7 @@ public class Order implements Serializable {
 
     @TableField(exist = false)
     private String startTime;
+
+    @TableField(exist = false)
+    private String productName;
 }

+ 75 - 0
src/main/java/com/fdkankan/pay/entity/StripeConfig.java

@@ -0,0 +1,75 @@
+package com.fdkankan.pay.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-15
+ */
+@Getter
+@Setter
+@TableName("t_stripe_config")
+public class StripeConfig implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * stripe支付
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("public_key")
+    private String publicKey;
+
+    @TableField("api_key")
+    private String apiKey;
+
+    @TableField("mode")
+    private String mode;
+
+    @TableField("base_url")
+    private String baseUrl;
+
+    @TableField("call_back_url")
+    private String callBackUrl;
+
+    @TableField("currency")
+    private String currency;
+
+    @TableField("serve_id")
+    private Integer serveId;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+    @TableField("webhook_id")
+    private String webhookId;
+
+    @TableField("webhook_host")
+    private String webhookHost;
+
+    @TableField(exist = false)
+    private String cancelUrl;
+    @TableField(exist = false)
+    private String successUrl;
+}

+ 58 - 0
src/main/java/com/fdkankan/pay/entity/StripePrice.java

@@ -0,0 +1,58 @@
+package com.fdkankan.pay.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-17
+ */
+@Getter
+@Setter
+@TableName("t_stripe_price")
+public class StripePrice implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("price_id")
+    private String priceId;
+
+    @TableField("unit_amount")
+    private BigDecimal unitAmount;
+
+    @TableField("currency")
+    private String currency;
+
+    @TableField("product_id")
+    private String productId;
+
+    @TableField("recurring")
+    private Integer recurring;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 48 - 0
src/main/java/com/fdkankan/pay/entity/StripeProduct.java

@@ -0,0 +1,48 @@
+package com.fdkankan.pay.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-17
+ */
+@Getter
+@Setter
+@TableName("t_stripe_product")
+public class StripeProduct implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("name")
+    private String name;
+
+    @TableField("product_id")
+    private String productId;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 55 - 0
src/main/java/com/fdkankan/pay/entity/StripeWebhookLog.java

@@ -0,0 +1,55 @@
+package com.fdkankan.pay.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-17
+ */
+@Getter
+@Setter
+@TableName("t_stripe_webhook_log")
+public class StripeWebhookLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 事件名称
+     */
+    @TableField("event_type")
+    private String eventType;
+
+    /**
+     * 内容
+     */
+    @TableField("msg")
+    private String msg;
+
+    /**
+     * 0未处理,1已处理
+     */
+    @TableField("status")
+    private Integer status;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 5 - 3
src/main/java/com/fdkankan/pay/generate/AutoGenerate.java

@@ -18,7 +18,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir");
 
         generate(path,"pay", getTables(new String[]{
-                "t_autopay_order_son"
+                "t_stripe_price",      "t_stripe_product",      "t_stripe_webhook_log"
         }));
 
 //        generate(path,"goods", getTables(new String[]{
@@ -46,8 +46,10 @@ public class AutoGenerate {
 
 
     public static void  generate(String path,String moduleName,  List<String> tables){
-        FastAutoGenerator.create("jdbc:mysql://120.24.144.164:3306/4dkankan_v4_pay",
-                "root","4Dage@4Dage#@168")
+//        FastAutoGenerator.create("jdbc:mysql://120.24.144.164:3306/4dkankan_v4_pay",
+//                "root","4Dage@4Dage#@168")
+        FastAutoGenerator.create("jdbc:mysql://3.75.137.132:3306/4dkankan_v4_pay",
+                "root","JK20220120%JIK")
                 .globalConfig(builder -> {
                     builder.author("")               //作者
                             .outputDir(path+"\\src\\main\\java")    //输出路径(写到java目录)

+ 18 - 0
src/main/java/com/fdkankan/pay/mapper/IStripeConfigMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.pay.mapper;
+
+import com.fdkankan.pay.entity.StripeConfig;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-15
+ */
+@Mapper
+public interface IStripeConfigMapper extends BaseMapper<StripeConfig> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/pay/mapper/IStripePriceMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.pay.mapper;
+
+import com.fdkankan.pay.entity.StripePrice;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-17
+ */
+@Mapper
+public interface IStripePriceMapper extends BaseMapper<StripePrice> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/pay/mapper/IStripeProductMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.pay.mapper;
+
+import com.fdkankan.pay.entity.StripeProduct;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-17
+ */
+@Mapper
+public interface IStripeProductMapper extends BaseMapper<StripeProduct> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/pay/mapper/IStripeWebhookLogMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.pay.mapper;
+
+import com.fdkankan.pay.entity.StripeWebhookLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-17
+ */
+@Mapper
+public interface IStripeWebhookLogMapper extends BaseMapper<StripeWebhookLog> {
+
+}

+ 16 - 0
src/main/java/com/fdkankan/pay/service/IStripeConfigService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.pay.service;
+
+import com.fdkankan.pay.entity.StripeConfig;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-15
+ */
+public interface IStripeConfigService extends IService<StripeConfig> {
+
+}

+ 19 - 0
src/main/java/com/fdkankan/pay/service/IStripePriceService.java

@@ -0,0 +1,19 @@
+package com.fdkankan.pay.service;
+
+import com.fdkankan.pay.entity.StripePrice;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-17
+ */
+public interface IStripePriceService extends IService<StripePrice> {
+
+    String getByParam(BigDecimal orderMoney, String currency, String productId, Integer autoPay,String interval);
+}

+ 18 - 0
src/main/java/com/fdkankan/pay/service/IStripeProductService.java

@@ -0,0 +1,18 @@
+package com.fdkankan.pay.service;
+
+import com.fdkankan.pay.entity.StripeProduct;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.stripe.model.Product;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-17
+ */
+public interface IStripeProductService extends IService<StripeProduct> {
+
+    String  getByName(String productName);
+}

+ 16 - 0
src/main/java/com/fdkankan/pay/service/IStripeWebhookLogService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.pay.service;
+
+import com.fdkankan.pay.entity.StripeWebhookLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-17
+ */
+public interface IStripeWebhookLogService extends IService<StripeWebhookLog> {
+
+}

+ 12 - 1
src/main/java/com/fdkankan/pay/service/impl/PayOrderService.java

@@ -6,6 +6,7 @@ import com.fdkankan.pay.exception.BusinessException;
 import com.fdkankan.pay.service.IOrderService;
 import com.fdkankan.pay.util.alipay.sdk.AlipayService;
 import com.fdkankan.pay.util.paypal.sdk.PaypalService;
+import com.fdkankan.pay.util.stripe.StripeService;
 import com.fdkankan.pay.util.wx.WechatPayService;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,9 +26,11 @@ public class PayOrderService {
     AlipayService alipayService;
     @Autowired
     PaypalService paypalService;
+    @Autowired
+    StripeService stripeService;
 
 
-    public Object openPay(Order param, String ipAddr) throws Exception {
+    public Object openPay(Order param, String ipAddr,String lang) throws Exception {
         if(StringUtils.isBlank(param.getOrderSn()) || param.getPayType() == null){
             throw new BusinessException(ResultCode.PARAM_ERROR);
         }
@@ -54,6 +57,10 @@ public class PayOrderService {
         if(order.getPayType() == 5 ){
             return paypalService.openPay(order,ipAddr);
         }
+        //stripe支付
+        if(order.getPayType() == 6 ){
+            return stripeService.openPay(order,ipAddr,lang);
+        }
         return null;
     }
 
@@ -78,6 +85,10 @@ public class PayOrderService {
         if(order.getPayType() == 5 ){
             return paypalService.callBack(request,response,order,result);
         }
+        //stripe回调
+        if(order.getPayType() == 6 ){
+
+        }
         return true;
     }
 }

+ 20 - 0
src/main/java/com/fdkankan/pay/service/impl/StripeConfigServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fdkankan.pay.service.impl;
+
+import com.fdkankan.pay.entity.StripeConfig;
+import com.fdkankan.pay.mapper.IStripeConfigMapper;
+import com.fdkankan.pay.service.IStripeConfigService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-15
+ */
+@Service
+public class StripeConfigServiceImpl extends ServiceImpl<IStripeConfigMapper, StripeConfig> implements IStripeConfigService {
+
+}

+ 69 - 0
src/main/java/com/fdkankan/pay/service/impl/StripePriceServiceImpl.java

@@ -0,0 +1,69 @@
+package com.fdkankan.pay.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.pay.entity.StripePrice;
+import com.fdkankan.pay.mapper.IStripePriceMapper;
+import com.fdkankan.pay.service.IStripePriceService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.stripe.model.Price;
+import com.stripe.param.checkout.SessionCreateParams;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-17
+ */
+@Service
+public class StripePriceServiceImpl extends ServiceImpl<IStripePriceMapper, StripePrice> implements IStripePriceService {
+
+    @Override
+    public String getByParam(BigDecimal orderMoney, String currency, String productId, Integer autoPay,String interval) {
+        try {
+            LambdaQueryWrapper<StripePrice> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(StripePrice::getUnitAmount,orderMoney);
+            wrapper.eq(StripePrice::getCurrency,currency);
+            wrapper.eq(StripePrice::getProductId,productId);
+            wrapper.eq(StripePrice::getRecurring,autoPay);
+            StripePrice one = this.getOne(wrapper);
+            if(one == null){
+                //创建价格 https://stripe.com/docs/api/prices/create
+                Map<String, Object> priceMap = new HashMap<>();
+                priceMap.put("unit_amount", orderMoney.multiply(new BigDecimal(100)));
+                priceMap.put("currency", currency);
+                if(autoPay == 1){
+                    Map<String, Object> recurring = new HashMap<>();
+                    recurring.put("interval", interval);
+                    priceMap.put("recurring", recurring);
+                }
+                priceMap.put("product", productId);
+                Price price = Price.create(priceMap);
+                this.saveByParam(price.getId(),orderMoney,currency,productId,autoPay);
+                return price.getId();
+            }
+            return one.getPriceId();
+        }catch (Exception e){
+
+        }
+
+        return null;
+    }
+
+    private void saveByParam(String priceId,BigDecimal orderMoney, String currency, String productId, Integer autoPay) {
+        StripePrice stripePrice = new StripePrice();
+        stripePrice.setPriceId(priceId);
+        stripePrice.setUnitAmount(orderMoney);
+        stripePrice.setCurrency(currency);
+        stripePrice.setProductId(productId);
+        stripePrice.setRecurring(autoPay);
+        this.save(stripePrice);
+
+    }
+}

+ 55 - 0
src/main/java/com/fdkankan/pay/service/impl/StripeProductServiceImpl.java

@@ -0,0 +1,55 @@
+package com.fdkankan.pay.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.pay.entity.StripeProduct;
+import com.fdkankan.pay.mapper.IStripeProductMapper;
+import com.fdkankan.pay.service.IStripeProductService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.stripe.model.Product;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.awt.*;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-17
+ */
+@Service
+@Slf4j
+public class StripeProductServiceImpl extends ServiceImpl<IStripeProductMapper, StripeProduct> implements IStripeProductService {
+
+    @Override
+    public  String  getByName(String productName) {
+        try {
+            LambdaQueryWrapper<StripeProduct> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(StripeProduct::getName,productName);
+            StripeProduct one = this.getOne(wrapper);
+            if(one == null){
+                //创建产品 https://stripe.com/docs/api/products/create
+                Map<String, Object> productMap = new HashMap<>();
+                productMap.put("name", productName);
+                Product product = Product.create(productMap);
+                this.saveByProduct(productName,product.getId());
+                return product.getId();
+            }
+            return one.getProductId();
+        }catch (Exception e){
+            log.info("创建stripe商品失败:{}",e);
+        }
+        return null;
+    }
+
+    private void saveByProduct(String productName,String productId) {
+        StripeProduct stripeProduct = new StripeProduct();
+        stripeProduct.setName(productName);
+        stripeProduct.setProductId(productId);
+        this.save(stripeProduct);
+    }
+}

+ 20 - 0
src/main/java/com/fdkankan/pay/service/impl/StripeWebhookLogServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fdkankan.pay.service.impl;
+
+import com.fdkankan.pay.entity.StripeWebhookLog;
+import com.fdkankan.pay.mapper.IStripeWebhookLogMapper;
+import com.fdkankan.pay.service.IStripeWebhookLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-04-17
+ */
+@Service
+public class StripeWebhookLogServiceImpl extends ServiceImpl<IStripeWebhookLogMapper, StripeWebhookLog> implements IStripeWebhookLogService {
+
+}

+ 3 - 2
src/main/java/com/fdkankan/pay/util/alipay/sdk/AlipayService.java

@@ -21,6 +21,7 @@ import com.alipay.demo.trade.service.AlipayTradeService;
 import com.alipay.demo.trade.service.impl.AlipayTradeServiceImpl;
 import com.alipay.demo.trade.utils.Utils;
 import com.fdkankan.pay.common.ResultCode;
+import com.fdkankan.pay.config.PayConfig;
 import com.fdkankan.pay.entity.AliConfig;
 import com.fdkankan.pay.entity.Order;
 import com.fdkankan.pay.entity.WxConfig;
@@ -57,7 +58,7 @@ public class AlipayService {
         String orderSn = param.getOrderSn();
         BigDecimal amount = param.getOrderMoney();
         String subject = OrderSnUtil.getChinaName(param.getOrderType());
-        AliConfig aliConfig = aliConfigService.getByServeId(param.getServeId());
+        AliConfig aliConfig = PayConfig.aliConfigMap.get(param.getServeId());
         if(aliConfig == null){
             throw new BusinessException(ResultCode.ALIPAY_CONFIG_ERROR);
         }
@@ -308,7 +309,7 @@ public class AlipayService {
         String trade_no = null;
         String openId = null;
         try {
-            AliConfig aliConfig = aliConfigService.getByServeId(order.getServeId());
+            AliConfig aliConfig = PayConfig.aliConfigMap.get(order.getServeId());
             if(aliConfig == null){
                 log.error("ali-callBack--wxConfig-notexist");
                 return false;

+ 0 - 49
src/main/java/com/fdkankan/pay/util/paypal/restApi/RestApiPaypalService.java

@@ -49,56 +49,7 @@ public class RestApiPaypalService {
     @Autowired
     IPaypalConfigService paypalConfigService;
 
-    /**
-     * 启动创建webhooks
-     * https://testeur.4dkankan.com/service/pay/paypal/webhook
-     */
-    @PostConstruct
-    public  void createWebhooks() {
-        log.info("--------------项目启动初始化webhook-------------");
-        List<PaypalConfig> list = paypalConfigService.list();
-        for (PaypalConfig paypalConfig : list) {
-            if(StringUtils.isBlank(paypalConfig.getWebhookId())){
-                try {
-                    Map<String,String> map = new HashMap<>(4);
-                    map.put("Content-Type","application/json");
-                    WebhookVo webhookVo = new WebhookVo();
-                    webhookVo.setUrl(paypalConfig.getWebhookHost() +"/service/pay/paypal/webhook");
-                    webhookVo.getEvent_types().add(new EventTypeVo("PAYMENT.SALE.COMPLETED"));
-                    webhookVo.getEvent_types().add(new EventTypeVo("CATALOG.PRODUCT.CREATED"));
-                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.PLAN.CREATED"));
-                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.PLAN.ACTIVATED"));
-                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.PLAN.DEACTIVATED"));
-                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.SUBSCRIPTION.CREATED"));
-                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.SUBSCRIPTION.EXPIRED"));
-                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.SUBSCRIPTION.SUSPENDED"));
-                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.SUBSCRIPTION.UPDATED"));
-                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.SUBSCRIPTION.PAYMENT.FAILED"));
-                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.SUBSCRIPTION.CANCELLED"));
-
-                    String string =  JSONObject.toJSONString(webhookVo);
-                    String body = HttpRequest.post(paypalConfig.getBaseUrl() + "/v1/notifications/webhooks")
-                            .addHeaders(map)
-                            .basicAuth(paypalConfig.getClientId(), paypalConfig.getSecret())
-                            .body(string)
-                            .execute().body();
-                    log.info("paypal-createWebhooks:{}",body);
-                    JSONObject resp = JSONObject.parseObject(body);
-                    String webhookId = resp.getString("id");
-                    paypalConfig.setWebhookId(webhookId);
-
-                    LambdaUpdateWrapper<PaypalConfig> wrapper = new LambdaUpdateWrapper<>();
-                    wrapper.eq(PaypalConfig::getId,paypalConfig.getId());
-                    wrapper.set(PaypalConfig::getWebhookId,webhookId);
-                    paypalConfigService.update(wrapper);
-
-                }catch (Exception e){
-                    log.info("paypal-createWebhooks:error:",e);
-                }
-            }
-        }
 
-    }
 
 
     /**

+ 3 - 2
src/main/java/com/fdkankan/pay/util/paypal/sdk/PaypalService.java

@@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.pay.common.ResultCode;
+import com.fdkankan.pay.config.PayConfig;
 import com.fdkankan.pay.entity.*;
 import com.fdkankan.pay.entity.Order;
 import com.fdkankan.pay.exception.BusinessException;
@@ -56,7 +57,7 @@ public class PaypalService {
         String orderSn = param.getOrderSn();
         BigDecimal amount = param.getOrderMoney();
         String subject = param.getOrderType();
-        PaypalConfig paypalConfig = paypalConfigService.getByServeId(param.getServeId());
+        PaypalConfig paypalConfig = PayConfig.paypalConfigMap.get(param.getServeId());
         if(paypalConfig == null){
             throw new BusinessException(ResultCode.PAYPAL_CONFIG_ERROR);
         }
@@ -122,7 +123,7 @@ public class PaypalService {
 
             String paymentId = request.getParameter("paymentId");//商品名
             String payerId = request.getParameter("PayerID");//购买数量
-            PaypalConfig paypalConfig = paypalConfigService.getByServeId(order.getServeId());
+            PaypalConfig paypalConfig = PayConfig.paypalConfigMap.get(order.getServeId());
             if(paypalConfig == null){
                 log.error("paypal-callBack--paypalConfig-notexist");
                 return false;

+ 93 - 0
src/main/java/com/fdkankan/pay/util/stripe/StripeService.java

@@ -0,0 +1,93 @@
+package com.fdkankan.pay.util.stripe;
+
+import com.fdkankan.pay.common.ResultCode;
+import com.fdkankan.pay.config.PayConfig;
+import com.fdkankan.pay.entity.Order;
+import com.fdkankan.pay.entity.PaypalConfig;
+import com.fdkankan.pay.entity.StripeConfig;
+import com.fdkankan.pay.exception.BusinessException;
+import com.fdkankan.pay.response.OpenPayResponse;
+import com.fdkankan.pay.service.IStripePriceService;
+import com.fdkankan.pay.service.IStripeProductService;
+import com.fdkankan.pay.util.CacheUtil;
+import com.stripe.model.Price;
+import com.stripe.model.Product;
+import com.stripe.model.checkout.Session;
+import com.stripe.param.checkout.SessionCreateParams;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.print.attribute.standard.NumberOfInterveningJobs;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+@Service
+@Slf4j
+public class StripeService {
+
+    @Autowired
+    IStripeProductService stripeProductService;
+    @Autowired
+    IStripePriceService stripePriceService;
+
+    public Object openPay(Order param, String ipAddr,String lang) {
+
+        StripeConfig stripeConfig = PayConfig.stripeConfigMap.get(param.getServeId());
+        if(stripeConfig == null){
+            throw new BusinessException(ResultCode.PAYPAL_CONFIG_ERROR);
+        }
+        stripeConfig.setSuccessUrl( CacheUtil.mainUrl + stripeConfig.getCallBackUrl() +"/"+param.getOrderSn()+"/"+param.getPayType()+"/success");
+        stripeConfig.setCancelUrl( CacheUtil.mainUrl + stripeConfig.getCallBackUrl() +"/"+param.getOrderSn()+"/"+param.getPayType()+"/cancel");
+        //stripe支付
+        if(param.getPayType() == 6 ){
+            return this.createPay(param,stripeConfig,lang);
+        }
+        throw new BusinessException(ResultCode.WX_ORDER_PAY_TYPE_ERROR);
+    }
+
+    public Object createPay(Order param,StripeConfig stripeConfig,String lang){
+        try {
+            String productId = stripeProductService.getByName(param.getProductName());
+            SessionCreateParams.Mode mode = SessionCreateParams.Mode.PAYMENT;
+            if(param.getAutoPay() == 1){
+                mode = SessionCreateParams.Mode.SUBSCRIPTION;
+            }
+            String priceId = stripePriceService.getByParam(param.getOrderMoney(),stripeConfig.getCurrency(),productId,param.getAutoPay(),param.getAutoPayTime());
+            SessionCreateParams.Locale locale = SessionCreateParams.Locale.AUTO;
+            if(StringUtils.isNotBlank(lang)){
+                locale = SessionCreateParams.Locale.valueOf(lang);
+            }
+
+            SessionCreateParams params4 = SessionCreateParams.builder()
+                    .setMode(mode)
+                    //.setSuccessUrl(stripeConfig.getSuccessUrl())
+                   // .setCancelUrl(stripeConfig.getCancelUrl())
+                    .setLocale(locale)
+                    .setCustomerEmail(param.getUserName())
+                    .addLineItem(
+                            SessionCreateParams.LineItem.builder()
+                                    .setQuantity(1L)
+                                    .setPrice(priceId)
+                                    .build()).putMetadata("orderId", param.getOrderSn())
+                    .build();
+
+            Session session = Session.create(params4);
+
+            OpenPayResponse openPayResponse = new OpenPayResponse();
+            openPayResponse.setH5Url(session.getUrl());
+            openPayResponse.setOrderSn(param.getOrderSn());
+            openPayResponse.setPayType(6);
+
+            return openPayResponse;
+
+
+        }catch (Exception e){
+            log.info("创建stripe支付失败--{}",e);
+            throw new BusinessException(ResultCode.STRIPE_ERROR);
+        }
+    }
+}

+ 3 - 2
src/main/java/com/fdkankan/pay/util/wx/WechatPayService.java

@@ -1,6 +1,7 @@
 package com.fdkankan.pay.util.wx;
 
 import com.fdkankan.pay.common.ResultCode;
+import com.fdkankan.pay.config.PayConfig;
 import com.fdkankan.pay.entity.Order;
 import com.fdkankan.pay.entity.WxConfig;
 import com.fdkankan.pay.exception.BusinessException;
@@ -38,7 +39,7 @@ public class WechatPayService {
         String orderSn = param.getOrderSn();
         BigDecimal amount = param.getOrderMoney();
         String subject = OrderSnUtil.getChinaName(param.getOrderType());
-        WxConfig wxConfig = wxConfigService.getByServeId(param.getServeId());
+        WxConfig wxConfig = PayConfig.wxConfigMap.get(param.getServeId());
         if(wxConfig == null){
             throw new BusinessException(ResultCode.WX_CONFIG_NOT);
         }
@@ -184,7 +185,7 @@ public class WechatPayService {
         String trade_no = null;
         String openId = null;
         try {
-            WxConfig wxConfig = wxConfigService.getByServeId(order.getServeId());
+            WxConfig wxConfig = PayConfig.wxConfigMap.get(order.getServeId());
             if(wxConfig == null){
                 log.error("wx-callBack--wxConfig-notexist");
                 return false;

+ 5 - 0
src/main/resources/mapper/pay/StripeConfigMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.pay.mapper.IStripeConfigMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/pay/StripePriceMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.pay.mapper.IStripePriceMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/pay/StripeProductMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.pay.mapper.IStripeProductMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/pay/StripeWebhookLogMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.pay.mapper.IStripeWebhookLogMapper">
+
+</mapper>