浏览代码

自动订阅

lyhzzz 1 年之前
父节点
当前提交
6c9c64256d

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

@@ -14,11 +14,13 @@ import com.fdkankan.pay.service.IOrderService;
 import com.fdkankan.pay.service.IPaypalConfigService;
 import com.fdkankan.pay.service.IPaypalWebhookLogService;
 import com.fdkankan.pay.util.CacheUtil;
+import com.fdkankan.pay.util.OrderSnUtil;
 import com.fdkankan.pay.util.paypal.restApi.RestApiPaypalService;
 import com.fdkankan.rabbitmq.util.RabbitMqProducer;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.OrderUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.HashMap;
@@ -48,6 +50,8 @@ public class AutopayOrderController {
     IPaypalConfigService paypalConfigService;
     @Autowired
     IOrderService orderService;
+    @Autowired
+    OrderSnUtil orderSnUtil;
 
     @PostMapping("/webhook")
     public ResultData webhook(@RequestBody JSONObject webhookObj){
@@ -57,6 +61,8 @@ public class AutopayOrderController {
         JSONObject resource = webhookObj.getJSONObject("resource");
         AutopayOrder autopayOrder = null;
         String subscriptionId = null;
+
+        String tradeNo = resource.getString("id");
         String state =resource.getString("state");
         switch (event_type){
             case "PAYMENT.SALE.COMPLETED" :     //每日扣款
@@ -68,6 +74,8 @@ public class AutopayOrderController {
                 break;
             case "BILLING.PLAN.ACTIVATED" :     //计划激活
                 break;
+            case "BILLING.PLAN.DEACTIVATED" :     //计划停止
+                break;
             case "BILLING.SUBSCRIPTION.CREATED" :     //创建订阅
                 break;
             case "BILLING.SUBSCRIPTION.CANCELLED" :     //取消订阅
@@ -77,6 +85,10 @@ public class AutopayOrderController {
                 break;
             case "BILLING.SUBSCRIPTION.SUSPENDED" :     //订阅暂停
                 break;
+            case "BILLING.SUBSCRIPTION.UPDATED" :     //订阅暂停
+                break;
+            case "BILLING.SUBSCRIPTION.PAYMENT.FAILED" :     //订阅暂停
+                break;
 
             default:
                 AutopayOrderController.log.info("webhook-default-event:{}",event_type);
@@ -94,8 +106,11 @@ public class AutopayOrderController {
         paypalWebhookLogService.updateById(log);
 
         HashMap<String,String >map = new HashMap<>();
-        map.put("orderSn",orderSn);
+        map.put("subscriptionOrderSn",orderSn);
+        map.put("subscriptionId",subscriptionId);
+        map.put("orderSn", orderSnUtil.getOrderSn());
         map.put("eventType",event_type);
+        map.put("tradeNo",tradeNo);
         map.put("state",state);
 
         rabbitMqProducer.sendByWorkQueue(CacheUtil.autoPaypalQueue,map);

+ 48 - 2
src/main/java/com/fdkankan/pay/util/paypal/restApi/RestApiPaypalService.java

@@ -64,13 +64,16 @@ public class RestApiPaypalService {
                     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("PAYMENT.SALE.COMPLETED"));
+                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.SUBSCRIPTION.UPDATED"));
+                    webhookVo.getEvent_types().add(new EventTypeVo("BILLING.SUBSCRIPTION.PAYMENT.FAILED"));
 
                     String string =  JSONObject.toJSONString(webhookVo);
                     String body = HttpRequest.post(paypalConfig.getBaseUrl() + "/v1/notifications/webhooks")
@@ -96,6 +99,7 @@ public class RestApiPaypalService {
 
     }
 
+
     /**
      * 获取token
      */
@@ -304,18 +308,27 @@ public class RestApiPaypalService {
         paypalConfig.setClientId("ATzzbHdy4kgJxUJegzDbBO1kRUE5kcur5VXaNtja4JDpLsfPokdlKAtunTVa_mWPcTQTMy06JAW6Ae5j");
         paypalConfig.setSecret("EPBsjKmNHHrmu0joNkWcrVpdqXTs3pow5jRdD1daOMyomteOxHMUDXhsM6Z-bjMi8MfSMB4iIyuhIihV");
 
+        deleteWebhook(paypalConfig,"34G17460TH6654649");
+        getWebhook(paypalConfig);
+        createWebhook(paypalConfig);
+    }
+
+    public static void createWebhook(PaypalConfig paypalConfig){
         try {
             Map<String,String> map = new HashMap<>(4);
             map.put("Content-Type","application/json");
             WebhookVo webhookVo = new WebhookVo();
             webhookVo.setUrl("https://testeur.4dkankan.com/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("PAYMENT.SALE.COMPLETED"));
+            webhookVo.getEvent_types().add(new EventTypeVo("BILLING.SUBSCRIPTION.UPDATED"));
+            webhookVo.getEvent_types().add(new EventTypeVo("BILLING.SUBSCRIPTION.PAYMENT.FAILED"));
 
             String string =  JSONObject.toJSONString(webhookVo);
             String body = HttpRequest.post(paypalConfig.getBaseUrl() + "/v1/notifications/webhooks")
@@ -328,9 +341,42 @@ public class RestApiPaypalService {
             String webhookId = resp.getString("id");
             paypalConfig.setWebhookId(webhookId);
 
+        }catch (Exception e){
+            log.info("paypal-createWebhooks:error:",e);
+        }
+    }
+
+    public static void getWebhook(PaypalConfig paypalConfig){
+        try {
+            Map<String,String> map = new HashMap<>(4);
+            map.put("Content-Type","application/json");
+
+            String body = HttpRequest.get(paypalConfig.getBaseUrl() + "/v1/notifications/webhooks")
+                    .addHeaders(map)
+                    .basicAuth(paypalConfig.getClientId(), paypalConfig.getSecret())
+                    .execute().body();
+            log.info("paypal-createWebhooks:{}",body);
+            JSONObject resp = JSONObject.parseObject(body);
+
+        }catch (Exception e){
+            log.info("paypal-createWebhooks:error:",e);
+        }
+    }
+    public static void deleteWebhook(PaypalConfig paypalConfig,String webhookId){
+        try {
+            Map<String,String> map = new HashMap<>(4);
+            map.put("Content-Type","application/json");
+
+            String body = HttpRequest.delete(paypalConfig.getBaseUrl() + "/v1/notifications/webhooks/"+webhookId)
+                    .addHeaders(map)
+                    .basicAuth(paypalConfig.getClientId(), paypalConfig.getSecret())
+                    .execute().body();
+            log.info("paypal-createWebhooks:{}",body);
+            JSONObject resp = JSONObject.parseObject(body);
 
         }catch (Exception e){
             log.info("paypal-createWebhooks:error:",e);
         }
     }
+
 }

+ 0 - 1
src/main/java/com/fdkankan/pay/util/paypal/sdk/PaypalService.java

@@ -135,7 +135,6 @@ public class PaypalService {
                 String txnId = payment.getTransactions().get(0).getRelatedResources().get(0).getSale().getId();
                 String payerEmail  = payment.getTransactions().get(0).getPayee().getEmail();
                 log.info("paypal-callBack:custom:{},txnid:{},payerEmail:{}",custom,txnId,payerEmail);
-
                 String orderSn = custom.split("_")[0];
                 if(custom.split("_").length > 2 && custom.split("_")[2].matches("^-?[0-9]+")){
                     orderSn += "_" + custom.split("_")[2];