Ver código fonte

feat: 企微accessToken和校验处理

wuwenyi 1 semana atrás
pai
commit
6c0526038a

+ 1 - 0
src/main/java/com/qqflow/engine/config/security/SecurityConfig.java

@@ -34,6 +34,7 @@ public class SecurityConfig {
                         .requestMatchers("/uploads/**").permitAll()
                         .requestMatchers(HttpMethod.OPTIONS).permitAll()
                         .requestMatchers("/doc.html", "/swagger-ui/**", "/v3/api-docs/**").permitAll()
+                        .requestMatchers("/WW_verify_*.txt").permitAll()
                         .anyRequest().authenticated()
                 )
                 .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);

+ 9 - 0
src/main/java/com/qqflow/engine/domain/ewechat/api/EnterpriseWechatApi.java

@@ -66,6 +66,15 @@ public class EnterpriseWechatApi {
         return this.commonGet(uri, EnterpriseWechatAccessTokenRsp.class);
     }
 
+    /** 获取成员ID列表(open_userid + 部门ID),支持分页游标 */
+    public EnterpriseWechatListIdRsp listUserId(String accessToken, String cursor, Integer limit) {
+        EnterpriseWechatListIdReq req = new EnterpriseWechatListIdReq();
+        req.setCursor(cursor);
+        req.setLimit(limit);
+        String uri = "/cgi-bin/user/list_id?access_token=" + accessToken;
+        return this.commonPost(uri, req, EnterpriseWechatListIdRsp.class);
+    }
+
     /** 通过手机号获取userid */
     public EnterpriseWechatUseridByMobileRsp getUseridByMobile(String accessToken, String mobile) {
         EnterpriseWechatUseridByMobileReq req = EnterpriseWechatUseridByMobileReq.of(mobile);

+ 12 - 0
src/main/java/com/qqflow/engine/domain/ewechat/model/enterprise/req/EnterpriseWechatListIdReq.java

@@ -0,0 +1,12 @@
+package com.qqflow.engine.domain.ewechat.model.enterprise.req;
+
+import lombok.Data;
+
+@Data
+public class EnterpriseWechatListIdReq {
+    /** 分页游标,首次不填 */
+    private String cursor;
+
+    /** 分页数据量,1~10000 */
+    private Integer limit;
+}

+ 26 - 0
src/main/java/com/qqflow/engine/domain/ewechat/model/enterprise/rsp/EnterpriseWechatListIdRsp.java

@@ -0,0 +1,26 @@
+package com.qqflow.engine.domain.ewechat.model.enterprise.rsp;
+
+import com.fasterxml.jackson.databind.PropertyNamingStrategies;
+import com.fasterxml.jackson.databind.annotation.JsonNaming;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
+public class EnterpriseWechatListIdRsp extends EnterpriseWechatBaseRsp {
+    /** 分页游标,为空表示已无更多数据 */
+    private String nextCursor;
+
+    /** 用户-部门关系列表 */
+    private List<DeptUser> deptUser;
+
+    @Data
+    @JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
+    public static class DeptUser {
+        /** open_userid */
+        private String openUserid;
+        /** 所属部门ID */
+        private Integer department;
+    }
+}

+ 3 - 1
src/main/java/com/qqflow/engine/domain/ewechat/service/impl/EnterpriseWechatServiceImpl.java

@@ -2,6 +2,7 @@ package com.qqflow.engine.domain.ewechat.service.impl;
 
 import com.qqflow.engine.common.util.RedisCache;
 import com.qqflow.engine.domain.ewechat.api.EnterpriseWechatApi;
+import com.qqflow.engine.domain.ewechat.config.EnterpriseWechatProperties;
 import com.qqflow.engine.domain.ewechat.mapper.EnterpriseWechatCorpMapper;
 import com.qqflow.engine.domain.ewechat.model.enterprise.rsp.EnterpriseWechatAccessTokenRsp;
 import com.qqflow.engine.domain.ewechat.po.EnterpriseWechatCorp;
@@ -22,6 +23,7 @@ public class EnterpriseWechatServiceImpl implements EnterpriseWechatService {
     private static final String ACCESS_TOKEN_KEY_PREFIX = "access_token::";
 
     private final EnterpriseWechatApi enterpriseWechatApi;
+    private final EnterpriseWechatProperties properties;
 
     private final RedisCache redisCache;
 
@@ -33,7 +35,7 @@ public class EnterpriseWechatServiceImpl implements EnterpriseWechatService {
         String accessToken = redisCache.getCacheObject(key);
         if(StringUtils.isBlank(accessToken)){
             EnterpriseWechatCorp corp = corpMapper.selectByCorpIdAndSuiteId(corpId, suiteId);
-            EnterpriseWechatAccessTokenRsp tokenRsp = enterpriseWechatApi.getAccessToken(corpId, corp.getPermanentCode());
+            EnterpriseWechatAccessTokenRsp tokenRsp = enterpriseWechatApi.getAccessToken(properties.getSCorpId(), corp.getPermanentCode());
             redisCache.setCacheObject(key, tokenRsp.getAccessToken(), tokenRsp.getExpiresIn() - 1000, TimeUnit.SECONDS);
             accessToken = tokenRsp.getAccessToken();
         }

+ 1 - 0
src/main/resources/static/WW_verify_8ThaY8QmwPH6cBFJ.txt

@@ -0,0 +1 @@
+8ThaY8QmwPH6cBFJ

+ 7 - 1
src/test/java/com/qqflow/engine/domain/ewechat/api/EnterpriseWechatApiTest.java

@@ -81,9 +81,15 @@ class EnterpriseWechatApiTest {
     @Test
     void getUseridByMobile() {
         String accessToken = enterpriseWechatService.getAccessToken(corpId, suiteId);
-        EnterpriseWechatUseridByMobileRsp rsp = enterpriseWechatApi.getUseridByMobile(accessToken, "18078824317");
+        EnterpriseWechatUseridByMobileRsp rsp = enterpriseWechatApi.getUseridByMobile(accessToken, "13450478314");
         System.out.println(JsonUtil.entity2Json(rsp));
     }
 
 
+    @Test
+    void listUserId() {
+        String accessToken = enterpriseWechatService.getAccessToken(corpId, suiteId);
+        EnterpriseWechatListIdRsp rsp = enterpriseWechatApi.listUserId(accessToken, null, 10);
+        System.out.println(JsonUtil.entity2Json(rsp));
+    }
 }