Przeglądaj źródła

订阅首笔支付费用

lyhzzz 2 lat temu
rodzic
commit
75bdaf628a

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

@@ -112,4 +112,10 @@ public class Order implements Serializable {
 
     @TableField(exist = false)
     private String wxAppId;
+
+    @TableField(exist = false)
+    private String planId;
+
+    @TableField(exist = false)
+    private String startTime;
 }

+ 38 - 0
src/main/java/com/fdkankan/pay/util/DateUtils.java

@@ -0,0 +1,38 @@
+package com.fdkankan.pay.util;
+
+import cn.hutool.core.date.DateUtil;
+
+import java.util.Calendar;
+import java.util.Date;
+
+public class DateUtils {
+
+    public static void main(String[] args) {
+        System.out.println("今天是:" + DateUtil.format(new Date(), "yyyy-mm-dd HH:mm:ss"));
+        System.out.println("今天是:" + DateUtil.format(nextDay(), "yyyy-mm-dd HH:mm:ss"));
+        System.out.println("今天是:" + DateUtil.format(nextMouth(), "yyyy-mm-dd HH:mm:ss"));
+        System.out.println("今天是:" + DateUtil.format(nextYear(), "yyyy-mm-dd HH:mm:ss"));
+    }
+
+    public static Date nextDay(){
+        Calendar calendar = Calendar.getInstance();
+        Date date = new Date();
+        calendar.setTime(date);
+        calendar.add(Calendar.DATE, 1);
+        return calendar.getTime();
+    }
+    public static Date nextMouth(){
+        Calendar calendar = Calendar.getInstance();
+        Date date = new Date();
+        calendar.setTime(date);
+        calendar.add(Calendar.MONTH, 1);
+        return calendar.getTime();
+    }
+    public static Date nextYear(){
+        Calendar calendar = Calendar.getInstance();
+        Date date = new Date();
+        calendar.setTime(date);
+        calendar.add(Calendar.YEAR, 1);
+        return calendar.getTime();
+    }
+}

+ 12 - 8
src/main/java/com/fdkankan/pay/util/paypal/restApi/RestApiPaypalService.java

@@ -11,6 +11,8 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fdkankan.pay.common.ResultCode;
+import com.fdkankan.pay.entity.AutopayOrder;
+import com.fdkankan.pay.entity.Order;
 import com.fdkankan.pay.entity.PaypalConfig;
 import com.fdkankan.pay.exception.BusinessException;
 import com.fdkankan.pay.service.IPaypalConfigService;
@@ -205,16 +207,18 @@ public class RestApiPaypalService {
     /**
      * 处理订阅参数
      *
-     * @param planId
      * @return
      */
-    private String handlerSubsParam(String planId,ApplicationContext applicationContext) {
+    private String handlerSubsParam(Order order, ApplicationContext applicationContext) {
         CompanyVo companyVo = new CompanyVo();
         SubscriptionDTO subscriptionDTO = new SubscriptionDTO();
-        subscriptionDTO.setPlanId(planId);
-        DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss+08:00");
-        String format = dateTimeFormatter2.format(DateUtil.nextMonth().toLocalDateTime());
-        subscriptionDTO.setStartTime(format);
+        subscriptionDTO.setPlanId(order.getPlanId());
+        subscriptionDTO.setStartTime(order.getStartTime());
+        ShippingAmount amount = new ShippingAmount();
+        amount.setCurrencyCode("USD");
+        amount.setValue(order.getOrderMoney().toString());
+        subscriptionDTO.setShippingAmount(amount);
+
         Subscriber subscriber = new Subscriber();
         SubscriberName subscriberName = new SubscriberName();
         subscriberName.setGiven_name(companyVo.getName());
@@ -242,7 +246,7 @@ public class RestApiPaypalService {
     /**
      * 创建订阅
      */
-    public SubscriptionVo createSubscription(PaypalConfig paypalConfig,String planId) {
+    public SubscriptionVo createSubscription(PaypalConfig paypalConfig, Order order) {
         Map<String,String> map = new HashMap<>(4);
         map.put("Content-Type","application/json");
         map.put("Authorization",getToken(paypalConfig));
@@ -254,7 +258,7 @@ public class RestApiPaypalService {
         applicationContext.setReturnUrl(paypalConfig.getSuccessUrl());
         applicationContext.setPaymentMethod(new PaymentMethod());
 
-        String string = handlerSubsParam(planId,applicationContext);
+        String string = handlerSubsParam(order,applicationContext);
         String body = HttpRequest.post(paypalConfig.getBaseUrl() + "/v1/billing/subscriptions")
                 .addHeaders(map)
                 .basicAuth(paypalConfig.getClientId(),paypalConfig.getSecret())

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

@@ -1,5 +1,7 @@
 package com.fdkankan.pay.util.paypal.sdk;
 
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.pay.common.ResultCode;
@@ -12,6 +14,7 @@ import com.fdkankan.pay.service.IAutopayPlanService;
 import com.fdkankan.pay.service.IOrderService;
 import com.fdkankan.pay.service.IPaypalConfigService;
 import com.fdkankan.pay.util.CacheUtil;
+import com.fdkankan.pay.util.DateUtils;
 import com.fdkankan.pay.util.UrlUtils;
 import com.fdkankan.pay.util.paypal.restApi.RestApiPaypalService;
 import com.fdkankan.pay.util.paypal.restApi.vo.Product;
@@ -36,6 +39,7 @@ import java.math.BigDecimal;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URLEncoder;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 
 @Log4j2
@@ -491,7 +495,21 @@ public class PaypalService {
         autopayOrder.setPlanId(autopayPlan.getPlanId());
         autopayOrder.setOrderSn(order.getOrderSn());
 
-        SubscriptionVo subscription = restApiPaypalService.createSubscription(paypalConfig, autopayOrder.getPlanId());
+        DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss+08:00");  //ISO8601
+        String time = null;
+        if("DAY".equals(order.getAutoPayTime())){
+            time = dateTimeFormatter2.format(new DateTime(DateUtils.nextDay()).toLocalDateTime());
+        }
+        if("MONTH".equals(order.getAutoPayTime())){
+            time = dateTimeFormatter2.format(new DateTime(DateUtils.nextMouth()).toLocalDateTime());
+        }
+        if("YEAR".equals(order.getAutoPayTime())){
+             time = dateTimeFormatter2.format(new DateTime(DateUtils.nextYear()).toLocalDateTime());
+        }
+        order.setPlanId(autopayPlan.getPlanId());
+        order.setStartTime(time);
+
+        SubscriptionVo subscription = restApiPaypalService.createSubscription(paypalConfig, order);
         log.info("创建订阅支付链接:"+subscription);
         autopayOrder.setSubscriptionId(subscription.getSubscriptionId());
         autopayOrder.setSubscriptionHref(subscription.getSubscriptionHref());