lyhzzz il y a 4 mois
Parent
commit
f472d68938

+ 11 - 2
src/main/java/com/fdkankan/pay/controller/StripeController.java

@@ -48,8 +48,17 @@ public class StripeController {
 
     @PostMapping("/webhook")
     public synchronized ResultData webhook(@RequestBody JSONObject webhookObj){
-        StripeWebhookLog stripeWebhookLog = new StripeWebhookLog();
+
         String type = webhookObj.getString("type");
+        String msgId = webhookObj.getString("id");
+        StripeWebhookLog stripeWebhookLog = stripeWebhookLogService.getByMsgId(msgId);
+        if(stripeWebhookLog == null){
+             stripeWebhookLog = new StripeWebhookLog();
+        }else {
+            log.info("stripe-webhook-重复:{}",webhookObj);
+            return ResultData.ok();
+        }
+        stripeWebhookLog.setMsgId(msgId);
         stripeWebhookLog.setEventType(type);
         stripeWebhookLog.setMsg(webhookObj.toJSONString());
         stripeWebhookLogService.save(stripeWebhookLog);
@@ -85,7 +94,7 @@ public class StripeController {
                 log.info("订单号为:id:{},trade_no:{},orderId:{},subscriptionId:{}",id,trade_no,orderId,subscriptionId);
                 if(orderId != null){
                     order = orderService.getByOrderSn(orderId);
-                    if( order != null){
+                    if( order != null ){
                         orderService.payResult(order,true,trade_no,customer);
                     }
                 }

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

@@ -28,6 +28,11 @@ public class StripeWebhookLog implements Serializable {
     private Integer id;
 
     /**
+     * 事件id
+     */
+    @TableField("msg_id")
+    private String msgId;
+    /**
      * 事件名称
      */
     @TableField("event_type")

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

@@ -13,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IStripeWebhookLogService extends IService<StripeWebhookLog> {
 
+    StripeWebhookLog getByMsgId(String id);
 }

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

@@ -43,7 +43,7 @@ public class AutopayOrderSonServiceImpl extends ServiceImpl<IAutopayOrderSonMapp
             state =resource.getString("status");
             tradeNo = resource.getString("payment_intent");
             amount = String.valueOf(resource.getInteger("total")/100);
-            currency = amountObj.getString("currency");
+            currency = resource.getString("currency");
         }
 
         AutopayOrderSon autopayOrderSon = new AutopayOrderSon();

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

@@ -1,11 +1,14 @@
 package com.fdkankan.pay.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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;
 
+import java.util.List;
+
 /**
  * <p>
  *  服务实现类
@@ -17,4 +20,14 @@ import org.springframework.stereotype.Service;
 @Service
 public class StripeWebhookLogServiceImpl extends ServiceImpl<IStripeWebhookLogMapper, StripeWebhookLog> implements IStripeWebhookLogService {
 
+    @Override
+    public StripeWebhookLog getByMsgId(String id) {
+        LambdaQueryWrapper<StripeWebhookLog> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(StripeWebhookLog::getMsgId,id);
+        List<StripeWebhookLog> list = this.list(wrapper);
+        if(!list.isEmpty()){
+            return list.get(0);
+        }
+        return null;
+    }
 }