lyhzzz 2 лет назад
Родитель
Сommit
fb5edd7a76

Разница между файлами не показана из-за своего большого размера
+ 28 - 12
src/main/java/com/fdkankan/pay/controller/AutopayOrderController.java


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

@@ -74,4 +74,7 @@ public class PaypalConfig implements Serializable {
     @TableField(exist = false)
     @TableField(exist = false)
     private String successUrl;
     private String successUrl;
 
 
+    @TableField("webhook_id")
+    private String webhookId;
+
 }
 }

+ 1 - 0
src/main/java/com/fdkankan/pay/util/CacheUtil.java

@@ -4,5 +4,6 @@ public class CacheUtil {
 
 
     public static String orderDownQueue;
     public static String orderDownQueue;
     public static String orderPayResultQueue;
     public static String orderPayResultQueue;
+    public static String autoPaypalQueue ="pay-auto-paypal";
     public static String mainUrl;
     public static String mainUrl;
 }
 }

+ 62 - 57
src/main/java/com/fdkankan/pay/util/paypal/restApi/RestApiPaypalService.java

@@ -5,11 +5,15 @@ import cn.hutool.http.Header;
 import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpResponse;
 import cn.hutool.http.HttpResponse;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fdkankan.pay.entity.PaypalConfig;
 import com.fdkankan.pay.entity.PaypalConfig;
 import com.fdkankan.pay.service.IPaypalConfigService;
 import com.fdkankan.pay.service.IPaypalConfigService;
+import com.fdkankan.pay.util.CacheUtil;
+import com.fdkankan.pay.util.paypal.restApi.vo.EventTypeVo;
 import com.fdkankan.pay.util.paypal.restApi.vo.Product;
 import com.fdkankan.pay.util.paypal.restApi.vo.Product;
+import com.fdkankan.pay.util.paypal.restApi.vo.WebhookVo;
 import com.fdkankan.pay.util.paypal.restApi.vo.plan.*;
 import com.fdkankan.pay.util.paypal.restApi.vo.plan.*;
 import com.fdkankan.pay.util.paypal.restApi.vo.subscription.*;
 import com.fdkankan.pay.util.paypal.restApi.vo.subscription.*;
 import com.paypal.api.payments.EventType;
 import com.paypal.api.payments.EventType;
@@ -18,9 +22,11 @@ import com.paypal.api.payments.Webhook;
 import com.paypal.api.payments.WebhookList;
 import com.paypal.api.payments.WebhookList;
 import com.paypal.base.rest.APIContext;
 import com.paypal.base.rest.APIContext;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import javax.annotation.PostConstruct;
 import java.io.IOException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStream;
 import java.io.OutputStreamWriter;
 import java.io.OutputStreamWriter;
@@ -37,9 +43,56 @@ public class RestApiPaypalService {
     IPaypalConfigService paypalConfigService;
     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(CacheUtil.mainUrl +"/service/pay/paypal/webhook");
+                    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.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("PAYMENT.SALE.COMPLETED"));
+
+                    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);
+                }
+            }
+        }
+
+    }
+
+    /**
      * 获取token
      * 获取token
      */
      */
-    public String getToken(PaypalConfig paypalConfig) {
+    public static String getToken(PaypalConfig paypalConfig) {
         String body = HttpRequest.post(paypalConfig.getBaseUrl() + "/v1/oauth2/token")
         String body = HttpRequest.post(paypalConfig.getBaseUrl() + "/v1/oauth2/token")
                 .basicAuth(paypalConfig.getClientId(), paypalConfig.getSecret())
                 .basicAuth(paypalConfig.getClientId(), paypalConfig.getSecret())
                 .form("grant_type", "client_credentials")
                 .form("grant_type", "client_credentials")
@@ -215,7 +268,7 @@ public class RestApiPaypalService {
     /**
     /**
      * 取消订阅
      * 取消订阅
      */
      */
-    public void cancelSubscriptions(PaypalConfig paypalConfig,String subscriptionsId) throws Exception {
+    public static void cancelSubscriptions(PaypalConfig paypalConfig, String subscriptionsId) throws Exception {
         Map<String,String> map = new HashMap<>(4);
         Map<String,String> map = new HashMap<>(4);
         map.put("Content-Type","application/json");
         map.put("Content-Type","application/json");
         map.put("Authorization",getToken(paypalConfig));
         map.put("Authorization",getToken(paypalConfig));
@@ -224,67 +277,19 @@ public class RestApiPaypalService {
                 .basicAuth(paypalConfig.getClientId(),paypalConfig.getSecret())
                 .basicAuth(paypalConfig.getClientId(),paypalConfig.getSecret())
                 .execute();
                 .execute();
         // 订阅正常创建
         // 订阅正常创建
+        log.info("resp:{}",response);
         if (response.getStatus() == 201) {
         if (response.getStatus() == 201) {
             JSONObject respObj = JSONObject.parseObject(response.body());
             JSONObject respObj = JSONObject.parseObject(response.body());
             System.out.println(respObj);
             System.out.println(respObj);
         }
         }
 
 
     }
     }
-    //https://testeur.4dkankan.com/service/pay/paypal/webhook
-    public String createWebhooks(PaypalConfig paypalConfig) {
-        try {
-            Map<String,String> map = new HashMap<>(4);
-            map.put("Content-Type","application/json");
-            String string = "{ \"url\": \"https://testeur.4dkankan.com/service/pay/paypal/webhook\", " +
-                    "\"event_types\": " +
-                    "[ { \"name\": \"CATALOG.PRODUCT.CREATED\" }," +
-                    " { \"name\": \"BILLING.PLAN.CREATED\" } ," +
-                    " { \"name\": \"BILLING.PLAN.ACTIVATED\" }, " +
-                    " { \"name\": \"BILLING.SUBSCRIPTION.CREATED\" } ," +
-                    " { \"name\": \"BILLING.SUBSCRIPTION.CANCELLED\" } ," +
-                    " { \"name\": \"BILLING.SUBSCRIPTION.EXPIRED\" }, " +
-                    " { \"name\": \"BILLING.SUBSCRIPTION.SUSPENDED\" } ," +
-                    " { \"name\": \"PAYMENT.SALE.COMPLETED\" } " +
-                    "] }";
-            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);
-            return resp.getString("id");
-        }catch (Exception e){
-            log.info("paypal-createWebhooks:error:",e);
-        }
-        return null;
-    }
 
 
-    public static void main(String[] args) throws IOException {
-        try {
-            Map<String,String> map = new HashMap<>(4);
-            map.put("Content-Type","application/json");
-            String string = "{ \"url\": \"https://testeur.4dkankan.com/service/pay/paypal/webhook\", " +
-                    "\"event_types\": " +
-                    "[ { \"name\": \"CATALOG.PRODUCT.CREATED\" }," +
-                    " { \"name\": \"BILLING.PLAN.CREATED\" } ," +
-                    " { \"name\": \"BILLING.PLAN.ACTIVATED\" }, " +
-                    " { \"name\": \"BILLING.SUBSCRIPTION.CREATED\" } ," +
-                    " { \"name\": \"BILLING.SUBSCRIPTION.CANCELLED\" } ," +
-                    " { \"name\": \"BILLING.SUBSCRIPTION.EXPIRED\" }, " +
-                    " { \"name\": \"BILLING.SUBSCRIPTION.SUSPENDED\" } ," +
-                    " { \"name\": \"PAYMENT.SALE.COMPLETED\" } " +
-                    "] }";
-            String body = HttpRequest.post("https://api.paypal.com" + "/v1/notifications/webhooks")
-                    .addHeaders(map)
-                    .basicAuth("AZJEGWlvvI2q52bR4k_mC1ftW8tEnlaJj30huGQTBsdAjwmKlMDiEiMixVKbfrdw6fB55NSj_BAE8FPP",
-                            "EL-RGNmsbFpcKT7QuIlxMxX7MQplp8rCyaGDZ5KOCMQ9BkOhY5OYZyVInAeHT8_4tXoPth8tOEZY_3s_")
-                    .body(string)
-                    .execute().body();
-            log.info("paypal-createProduct:{}",body);
-            //3DV94823N4765920R
-        }catch (Exception e){
-            log.info("paypal-createProduct:error:",e);
-        }
+
+    public static void main(String[] args) throws Exception {
+        PaypalConfig paypalConfig = new PaypalConfig();
+        paypalConfig.setBaseUrl("https://api.paypal.com");
+        paypalConfig.setClientId("AZJEGWlvvI2q52bR4k_mC1ftW8tEnlaJj30huGQTBsdAjwmKlMDiEiMixVKbfrdw6fB55NSj_BAE8FPP");
+        paypalConfig.setSecret("EL-RGNmsbFpcKT7QuIlxMxX7MQplp8rCyaGDZ5KOCMQ9BkOhY5OYZyVInAeHT8_4tXoPth8tOEZY_3s_");
     }
     }
 }
 }

+ 10 - 0
src/main/java/com/fdkankan/pay/util/paypal/restApi/vo/EventTypeVo.java

@@ -0,0 +1,10 @@
+package com.fdkankan.pay.util.paypal.restApi.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class EventTypeVo {
+    private String name;
+}

+ 12 - 0
src/main/java/com/fdkankan/pay/util/paypal/restApi/vo/WebhookVo.java

@@ -0,0 +1,12 @@
+package com.fdkankan.pay.util.paypal.restApi.vo;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class WebhookVo {
+    private String url;
+    private List<EventTypeVo> event_types = new ArrayList<>();
+}