Quellcode durchsuchen

feat: 移除 suite和 callbackCode

wuwenyi vor 2 Wochen
Ursprung
Commit
61590567fb

+ 2 - 3
src/main/java/com/qqflow/engine/domain/ewechat/api/EnterpriseWechatApi.java

@@ -7,7 +7,6 @@ import com.qqflow.engine.common.exception.BusinessException;
 import com.qqflow.engine.common.util.Assert;
 import com.qqflow.engine.domain.ewechat.model.enterprise.req.*;
 import com.qqflow.engine.domain.ewechat.model.enterprise.rsp.*;
-import com.qqflow.engine.domain.ewechat.po.EnterpriseWechatSuite;
 import lombok.RequiredArgsConstructor;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.core.io.FileSystemResource;
@@ -49,8 +48,8 @@ public class EnterpriseWechatApi {
      * @param suiteTicket suite_ticket由企业微信后台定时推送给“指令回调URL”,每十分钟更新一次,见推送suite_ticket。
      * @return 第三方应用凭证(用于获取永久授权码)
      */
-    public EnterpriseWechatSuiteAccessTokenRsp getSuiteAccessToken(EnterpriseWechatSuite suite, String suiteTicket) {
-        EnterpriseWechatSuiteAccessTokenReq req = EnterpriseWechatSuiteAccessTokenReq.of(suite, suiteTicket);
+    public EnterpriseWechatSuiteAccessTokenRsp getSuiteAccessToken(String suiteId, String suiteSecret, String suiteTicket) {
+        EnterpriseWechatSuiteAccessTokenReq req = EnterpriseWechatSuiteAccessTokenReq.of(suiteId, suiteSecret, suiteTicket);
         return this.commonPost("/cgi-bin/service/get_suite_token", req, EnterpriseWechatSuiteAccessTokenRsp.class);
     }
 

+ 7 - 4
src/main/java/com/qqflow/engine/domain/ewechat/assemble/EnterpriseWechatAssembler.java

@@ -1,9 +1,10 @@
 package com.qqflow.engine.domain.ewechat.assemble;
 
 import com.qqflow.engine.common.assemble.CommonAssembler;
+import com.qqflow.engine.domain.ewechat.config.EnterpriseWechatProperties;
 import com.qqflow.engine.domain.ewechat.model.enterprise.rsp.EnterpriseWechatPermanentCodeRsp;
 import com.qqflow.engine.domain.ewechat.po.EnterpriseWechatCorp;
-import com.qqflow.engine.domain.ewechat.po.EnterpriseWechatSuite;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Component;
 
 import java.util.Objects;
@@ -13,16 +14,18 @@ import java.util.Objects;
  * @since 2025/3/18
  */
 @Component
+@RequiredArgsConstructor
 public class EnterpriseWechatAssembler extends CommonAssembler {
-    public EnterpriseWechatCorp assembleCorp(EnterpriseWechatPermanentCodeRsp rsp, EnterpriseWechatSuite suite){
+    private final EnterpriseWechatProperties enterpriseWechatProperties;
+
+    public EnterpriseWechatCorp assembleCorp(EnterpriseWechatPermanentCodeRsp rsp){
         EnterpriseWechatCorp corp = assembleCommon(EnterpriseWechatCorp.class);
         EnterpriseWechatPermanentCodeRsp.AuthCorpInfo authCorpInfo = rsp.getAuthCorpInfo();
         EnterpriseWechatPermanentCodeRsp.AuthUserInfo authUserInfo = rsp.getAuthUserInfo();
         EnterpriseWechatPermanentCodeRsp.RegisterCodeInfo registerCodeInfo = rsp.getRegisterCodeInfo();
         corp.setPermanentCode(rsp.getPermanentCode());
         corp.setCorpId(authCorpInfo.getCorpid());
-        corp.setSuiteId(suite.getSuiteId());
-        corp.setCallbackCode(suite.getCallbackCode());
+        corp.setSuiteId(enterpriseWechatProperties.getSuiteId());
         corp.setCorpName(authCorpInfo.getCorpName());
         corp.setAuthUserId(authUserInfo.getUserid());
         corp.setAuthOpenUserId(authUserInfo.getOpenUserid());

+ 5 - 6
src/main/java/com/qqflow/engine/domain/ewechat/component/EnterpriseWechatEventHandler.java

@@ -5,8 +5,8 @@ import com.qqflow.engine.common.util.Assert;
 import com.qqflow.engine.common.util.RedisCache;
 import com.qqflow.engine.domain.ewechat.api.EnterpriseWechatApi;
 import com.qqflow.engine.domain.ewechat.assemble.EnterpriseWechatAssembler;
+import com.qqflow.engine.domain.ewechat.config.EnterpriseWechatProperties;
 import com.qqflow.engine.domain.ewechat.mapper.EnterpriseWechatCorpMapper;
-import com.qqflow.engine.domain.ewechat.mapper.EnterpriseWechatSuiteMapper;
 import com.qqflow.engine.domain.ewechat.enums.EnterpriseWechatInfoType;
 import com.qqflow.engine.domain.ewechat.model.enterprise.EnterpriseWechatEvent;
 import com.qqflow.engine.domain.ewechat.model.enterprise.callback.EnterpriseWechatAuthNotice;
@@ -15,7 +15,6 @@ import com.qqflow.engine.domain.ewechat.model.enterprise.rsp.EnterpriseWechatPer
 import com.qqflow.engine.domain.ewechat.model.enterprise.rsp.EnterpriseWechatSuiteAccessTokenRsp;
 import com.qqflow.engine.common.util.XmlUtil;
 import com.qqflow.engine.domain.ewechat.po.EnterpriseWechatCorp;
-import com.qqflow.engine.domain.ewechat.po.EnterpriseWechatSuite;
 import lombok.RequiredArgsConstructor;
 import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Component;
@@ -36,7 +35,7 @@ public class EnterpriseWechatEventHandler {
 
     private final EnterpriseWechatCorpMapper corpMapper;
     private final EnterpriseWechatAssembler assembler;
-    private final EnterpriseWechatSuiteMapper suiteMapper;
+    private final EnterpriseWechatProperties wechatProperties;
 
     private final RedisCache redisCache;
     private final RedissonService redissonService;
@@ -54,8 +53,8 @@ public class EnterpriseWechatEventHandler {
             String key = SUITE_TICKET_KEY_PREFIX + authNotice.getSuiteId();
             String suiteTicket = redisCache.getCacheObject(key);
             Assert.notBlank(suiteTicket, "suite_ticket不存在");
-            EnterpriseWechatSuite suite = suiteMapper.selectBySuiteId(authNotice.getSuiteId());
-            EnterpriseWechatSuiteAccessTokenRsp tokenRsp = enterpriseWechatApi.getSuiteAccessToken(suite, suiteTicket);
+            EnterpriseWechatSuiteAccessTokenRsp tokenRsp = enterpriseWechatApi.getSuiteAccessToken(
+                    wechatProperties.getSuiteId(), wechatProperties.getSuiteSecret(), suiteTicket);
             String tokenKey = SUITE_ACCESS_TOKEN_KEY_PREFIX + authNotice.getSuiteId();
             redisCache.setCacheObject(tokenKey, tokenRsp.getSuiteAccessToken(), tokenRsp.getExpiresIn(), TimeUnit.SECONDS);
 
@@ -63,7 +62,7 @@ public class EnterpriseWechatEventHandler {
             String corpid = permanentCodeRsp.getAuthCorpInfo().getCorpid();
             EnterpriseWechatCorp wechatCorp = corpMapper.selectByCorpIdAndSuiteId(corpid, authNotice.getSuiteId());
             if (wechatCorp == null) {
-                EnterpriseWechatCorp corp = assembler.assembleCorp(permanentCodeRsp, suite);
+                EnterpriseWechatCorp corp = assembler.assembleCorp(permanentCodeRsp);
                 corpMapper.insert(corp);
             }
         } finally {

+ 2 - 3
src/main/java/com/qqflow/engine/domain/ewechat/component/EnterpriseWechatValidator.java

@@ -44,9 +44,8 @@ public class EnterpriseWechatValidator {
         }
     }
 
-    public String appVerifyGetReq(EnterpriseWechatCallbackReq req, String code) {
-        // 获取开发应用模板
-        List<EnterpriseWechatCorp> corps = corpMapper.selectByCode(code);
+    public String appVerifyGetReq(EnterpriseWechatCallbackReq req) {
+        List<EnterpriseWechatCorp> corps = corpMapper.selectAllCorps();
         for (EnterpriseWechatCorp corp : corps) {
             String result = this.commonVerifyGetReq(req, corp.getCorpId());
             if (Objects.nonNull(result)) {

+ 7 - 1
src/main/java/com/qqflow/engine/domain/ewechat/config/EnterpriseWechatProperties.java

@@ -17,8 +17,14 @@ public class EnterpriseWechatProperties {
     /** 企业id */
     private String sCorpId;
 
-    /** token跟encodingAESKey,约定全部的代开发模板和代开发应用都用这个,否则验证不通过 */
+    /** token跟encodingAESKey,约定全部的代开发模板和代开发应用都用这个 */
     private String token;
 
     private String encodingAESKey;
+
+    /** 代开发应用模板id */
+    private String suiteId;
+
+    /** 代开发应用模板secret */
+    private String suiteSecret;
 }

+ 3 - 3
src/main/java/com/qqflow/engine/domain/ewechat/controller/EnterpriseWechatCallbackController.java

@@ -40,10 +40,10 @@ public class EnterpriseWechatCallbackController {
     }
 
     @Operation(summary = "企微应用验证回调")
-    @GetMapping("/{code}/callback")
-    public String wechatCallback(EnterpriseWechatCallbackReq req, @PathVariable String code) {
+    @GetMapping("/app-callback")
+    public String wechatCallback(EnterpriseWechatCallbackReq req) {
         log.info("get回调接口收到请求:{}", JsonUtil.entity2Json(req));
-        return enterpriseWechatValidator.appVerifyGetReq(req, code);
+        return enterpriseWechatValidator.appVerifyGetReq(req);
     }
 
 //    @Operation(summary = "企微应用回调")

+ 2 - 8
src/main/java/com/qqflow/engine/domain/ewechat/mapper/EnterpriseWechatCorpMapper.java

@@ -15,13 +15,7 @@ public interface EnterpriseWechatCorpMapper extends BaseMapper<EnterpriseWechatC
                         .last("LIMIT 1"));
     }
 
-    default EnterpriseWechatCorp selectByCorpIdAndCode(String corpId, String code) {
-        return this.selectOne(
-                Wrappers.<EnterpriseWechatCorp>lambdaQuery().eq(EnterpriseWechatCorp::getCorpId, corpId).eq(EnterpriseWechatCorp::getCallbackCode, code)
-                        .last("LIMIT 1"));
-    }
-
-    default List<EnterpriseWechatCorp> selectByCode(String code) {
-        return this.selectList(Wrappers.<EnterpriseWechatCorp>lambdaQuery().eq(EnterpriseWechatCorp::getCallbackCode, code));
+    default List<EnterpriseWechatCorp> selectAllCorps() {
+        return this.selectList(Wrappers.emptyWrapper());
     }
 }

+ 0 - 13
src/main/java/com/qqflow/engine/domain/ewechat/mapper/EnterpriseWechatSuiteMapper.java

@@ -1,13 +0,0 @@
-package com.qqflow.engine.domain.ewechat.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.qqflow.engine.domain.ewechat.po.EnterpriseWechatSuite;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface EnterpriseWechatSuiteMapper extends BaseMapper<EnterpriseWechatSuite> {
-    default EnterpriseWechatSuite selectBySuiteId(String suiteId) {
-        return this.selectOne(Wrappers.<EnterpriseWechatSuite>lambdaQuery().eq(EnterpriseWechatSuite::getSuiteId, suiteId).last("LIMIT 1"));
-    }
-}

+ 3 - 5
src/main/java/com/qqflow/engine/domain/ewechat/model/enterprise/req/EnterpriseWechatSuiteAccessTokenReq.java

@@ -1,9 +1,7 @@
 package com.qqflow.engine.domain.ewechat.model.enterprise.req;
 
 import com.fasterxml.jackson.databind.PropertyNamingStrategies;
-import com.fasterxml.jackson.databind.PropertyNamingStrategy;
 import com.fasterxml.jackson.databind.annotation.JsonNaming;
-import com.qqflow.engine.domain.ewechat.po.EnterpriseWechatSuite;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -24,10 +22,10 @@ public class EnterpriseWechatSuiteAccessTokenReq {
     /** 企业微信后台推送的ticket */
     private String suiteTicket;
 
-    public static EnterpriseWechatSuiteAccessTokenReq of(EnterpriseWechatSuite suite, String suiteTicket){
+    public static EnterpriseWechatSuiteAccessTokenReq of(String suiteId, String suiteSecret, String suiteTicket){
         EnterpriseWechatSuiteAccessTokenReq req = new EnterpriseWechatSuiteAccessTokenReq();
-        req.setSuiteId(suite.getSuiteId());
-        req.setSuiteSecret(suite.getSuiteSecret());
+        req.setSuiteId(suiteId);
+        req.setSuiteSecret(suiteSecret);
         req.setSuiteTicket(suiteTicket);
         return req;
     }

+ 0 - 5
src/main/java/com/qqflow/engine/domain/ewechat/po/EnterpriseWechatCorp.java

@@ -18,11 +18,6 @@ public class EnterpriseWechatCorp extends BaseUpdateModel implements Serializabl
     private String permanentCode;
 
     /**
-     * 回调 code
-     */
-    private String callbackCode;
-
-    /**
      * 代开发应用模板id
      */
     private String suiteId;

+ 0 - 34
src/main/java/com/qqflow/engine/domain/ewechat/po/EnterpriseWechatSuite.java

@@ -1,34 +0,0 @@
-package com.qqflow.engine.domain.ewechat.po;
-
-import com.qqflow.engine.common.po.BaseUpdateModel;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.io.Serializable;
-
-/**
- * 企业微信代开发模板
- */
-@Getter
-@Setter
-public class EnterpriseWechatSuite extends BaseUpdateModel implements Serializable {
-    /**
-     * 开发模板名称
-     */
-    private String name;
-
-    /**
-     * 模板 ID
-     */
-    private String suiteId;
-
-    /**
-     * 模板Secret
-     */
-    private String suiteSecret;
-
-    /**
-     * 回调 code
-     */
-    private String callbackCode;
-}

+ 3 - 1
src/main/resources/application-test.yml

@@ -36,4 +36,6 @@ logging:
 enterprise-wechat:
   sCorp-id: ww76b6c51c3935e90d
   token: jGgY9aLKA
-  encoding-a-eSKey: IycRI8M3tgTIHrFiwWnYWJn9I1o8iIsQrhNy8M4MWnT
+  encoding-a-eSKey: IycRI8M3tgTIHrFiwWnYWJn9I1o8iIsQrhNy8M4MWnT
+  suite-id: dk0580416972e402b8
+  suite-secret: 3aV48BTZHxDBeltZgdiRAUhttqsE5RxNs5pzElGhHHg