lyhzzz před 2 roky
rodič
revize
103e6fbc26

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

@@ -1,6 +1,11 @@
 package com.fdkankan.pay.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.pay.common.ResultData;
+import lombok.extern.slf4j.Slf4j;
+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;
@@ -14,8 +19,15 @@ import org.springframework.web.bind.annotation.RestController;
  * @since 2023-09-26
  */
 @RestController
-@RequestMapping("/pay/autopayOrder")
+@RequestMapping("/service/pay/paypal")
+@Slf4j
 public class AutopayOrderController {
 
+
+    @PostMapping("/webhook")
+    public ResultData webhook(@RequestBody JSONObject webhookObj){
+        log.info(webhookObj.toJSONString());
+        return ResultData.ok();
+    }
 }
 

+ 5 - 1
src/main/java/com/fdkankan/pay/service/impl/OrderServiceImpl.java

@@ -1,5 +1,7 @@
 package com.fdkankan.pay.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.map.MapUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -18,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
+import java.util.Map;
 
 /**
  * <p>
@@ -79,6 +82,7 @@ public class OrderServiceImpl extends ServiceImpl<IOrderMapper, Order> implement
         order.setPayTime(new Date());
         order.setUpdateTime(new Date());
         this.updateById(order);
-        rabbitMqProducer.sendByWorkQueue(CacheUtil.orderPayResultQueue,JSONObject.toJSONString(order));
+        Map<String, Object> map = BeanUtil.beanToMap(order);
+        rabbitMqProducer.sendByWorkQueue(CacheUtil.orderPayResultQueue,map);
     }
 }

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

@@ -12,13 +12,20 @@ import com.fdkankan.pay.service.IPaypalConfigService;
 import com.fdkankan.pay.util.paypal.restApi.vo.Product;
 import com.fdkankan.pay.util.paypal.restApi.vo.plan.*;
 import com.fdkankan.pay.util.paypal.restApi.vo.subscription.*;
+import com.paypal.api.payments.EventType;
 import com.paypal.api.payments.Links;
+import com.paypal.api.payments.Webhook;
+import com.paypal.api.payments.WebhookList;
 import com.paypal.base.rest.APIContext;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStreamWriter;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.time.*;
 import java.util.*;
 
@@ -223,4 +230,61 @@ public class RestApiPaypalService {
         }
 
     }
+    //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);
+        }
+    }
 }