diff --git a/linkwe-api/src/main/java/com/linkwechat/controller/WeAgentController.java b/linkwe-api/src/main/java/com/linkwechat/controller/WeAgentController.java index 24649e7c04b60f8417ec10df8e0e91c427bbab8c..2f5583d1f920621c69887b199991af31d48a9a54 100644 --- a/linkwe-api/src/main/java/com/linkwechat/controller/WeAgentController.java +++ b/linkwe-api/src/main/java/com/linkwechat/controller/WeAgentController.java @@ -8,7 +8,6 @@ import com.linkwechat.common.core.domain.AjaxResult; import com.linkwechat.common.core.page.TableDataInfo; import com.linkwechat.common.utils.SecurityUtils; import com.linkwechat.domain.WeAgentInfo; -import com.linkwechat.domain.WeAgentMsg; import com.linkwechat.domain.WeCorpAccount; import com.linkwechat.domain.agent.query.WeAgentAddQuery; import com.linkwechat.domain.agent.query.WeAgentEditQuery; @@ -17,7 +16,7 @@ import com.linkwechat.domain.agent.query.WeAgentMsgListQuery; import com.linkwechat.domain.agent.vo.LwAgentListVo; import com.linkwechat.domain.agent.vo.WeAgentMsgListVo; import com.linkwechat.domain.agent.vo.WeAgentMsgVo; -import com.linkwechat.domain.wecom.vo.agent.query.WeAgentQuery; +import com.linkwechat.domain.wecom.vo.agent.query.WeAgentRemoteQuery; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentDetailVo; import com.linkwechat.fegin.QwAgentClient; import com.linkwechat.service.IWeAgentInfoService; @@ -30,7 +29,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; import java.util.List; /** @@ -61,10 +59,11 @@ public class WeAgentController extends BaseController { public AjaxResult addAgent(@RequestBody @Validated WeAgentAddQuery query) { log.info("新增应用信息入参query:{}", JSONObject.toJSONString(query)); //校验新增的应用是否存在 - WeAgentQuery weAgentQuery = new WeAgentQuery(); - weAgentQuery.setAgentid(String.valueOf(query.getAgentId())); - weAgentQuery.setCorpid(SecurityUtils.getCorpId()); - WeAgentDetailVo weAgentDetailVo = qwAgentClient.getAgentDetail(weAgentQuery).getData(); + WeAgentRemoteQuery remoteQuery = new WeAgentRemoteQuery(); + remoteQuery.setAgentid(String.valueOf(query.getAgentId())); + remoteQuery.setSecret(query.getSecret()); + remoteQuery.setCorpid(SecurityUtils.getCorpId()); + WeAgentDetailVo weAgentDetailVo = qwAgentClient.getRemoteAgentDetail(remoteQuery).getData(); if(null == weAgentDetailVo){ return AjaxResult.error("当前应用不存在"); diff --git a/linkwe-service/src/main/java/com/linkwechat/domain/wecom/vo/agent/query/WeAgentRemoteQuery.java b/linkwe-service/src/main/java/com/linkwechat/domain/wecom/vo/agent/query/WeAgentRemoteQuery.java new file mode 100644 index 0000000000000000000000000000000000000000..780465f73bcb6e5b78cc06d42343d7e66f923e2f --- /dev/null +++ b/linkwe-service/src/main/java/com/linkwechat/domain/wecom/vo/agent/query/WeAgentRemoteQuery.java @@ -0,0 +1,19 @@ +package com.linkwechat.domain.wecom.vo.agent.query; + +import com.linkwechat.domain.wecom.query.WeBaseQuery; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; + +@ApiModel +@Data +@EqualsAndHashCode(callSuper = true) +public class WeAgentRemoteQuery extends WeBaseQuery { + + @ApiModelProperty("应用密钥") + @NotBlank(message = "应用密钥不能为空") + private String secret; +} diff --git a/linkwe-service/src/main/java/com/linkwechat/fallback/QwAgentFallbackFactory.java b/linkwe-service/src/main/java/com/linkwechat/fallback/QwAgentFallbackFactory.java index d4fb11ce2e6003c0b2f4a8c6b8b873fc9c3dfcb1..d9cd03b662aacfb85e8971c4b95e5c17d4d0aec9 100644 --- a/linkwe-service/src/main/java/com/linkwechat/fallback/QwAgentFallbackFactory.java +++ b/linkwe-service/src/main/java/com/linkwechat/fallback/QwAgentFallbackFactory.java @@ -3,6 +3,7 @@ package com.linkwechat.fallback; import com.linkwechat.common.core.domain.AjaxResult; import com.linkwechat.domain.wecom.vo.WeResultVo; import com.linkwechat.domain.wecom.vo.agent.query.WeAgentQuery; +import com.linkwechat.domain.wecom.vo.agent.query.WeAgentRemoteQuery; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentDetailVo; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentListVo; import com.linkwechat.fegin.QwAgentClient; @@ -28,6 +29,11 @@ public class QwAgentFallbackFactory implements QwAgentClient { return null; } + @Override + public AjaxResult getRemoteAgentDetail(WeAgentRemoteQuery query) { + return null; + } + @Override public AjaxResult updateAgent(WeAgentQuery query) { return null; diff --git a/linkwe-service/src/main/java/com/linkwechat/fegin/QwAgentClient.java b/linkwe-service/src/main/java/com/linkwechat/fegin/QwAgentClient.java index 59f674bfb4ca7631b2b3cad4a8d561d9f94389c3..7f8b98e1b97684cde49aa1a52ebc459489130ab9 100644 --- a/linkwe-service/src/main/java/com/linkwechat/fegin/QwAgentClient.java +++ b/linkwe-service/src/main/java/com/linkwechat/fegin/QwAgentClient.java @@ -3,6 +3,7 @@ package com.linkwechat.fegin; import com.linkwechat.common.core.domain.AjaxResult; import com.linkwechat.domain.wecom.vo.WeResultVo; import com.linkwechat.domain.wecom.vo.agent.query.WeAgentQuery; +import com.linkwechat.domain.wecom.vo.agent.query.WeAgentRemoteQuery; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentDetailVo; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentListVo; import com.linkwechat.fallback.QwAgentFallbackFactory; @@ -35,6 +36,15 @@ public interface QwAgentClient { @PostMapping("/agent/getAgentDetail") public AjaxResult getAgentDetail(@RequestBody WeAgentQuery query); + /** + * 从企业微信查询应用详情 + * + * @param query 入参 + * @return WeAgentDetailVo + */ + @PostMapping("/agent/getRemoteAgentDetail") + public AjaxResult getRemoteAgentDetail(@RequestBody WeAgentRemoteQuery query); + /** * 设置应用 * diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAgentClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAgentClient.java index 8b2504ad5d2c6acf9845779d79f975e303fcb6b0..fe9e2dffad2b86a9ddc265dab3fcfca60bb12f5f 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAgentClient.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAgentClient.java @@ -3,6 +3,7 @@ package com.linkwechat.wecom.client; import com.dtflys.forest.annotation.*; import com.linkwechat.domain.wecom.vo.WeResultVo; import com.linkwechat.domain.wecom.vo.agent.query.WeAgentQuery; +import com.linkwechat.domain.wecom.vo.agent.query.WeAgentRemoteQuery; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentDetailVo; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentListVo; import com.linkwechat.wecom.interceptor.WeAgentTokenInterceptor; @@ -30,6 +31,13 @@ public interface WeAgentClient { @Get(url = "/agent/get?agentid={$query.agentid}") WeAgentDetailVo getAgentDetail(@Var("query") WeAgentQuery query); + /** + * 根据应用id获取应用详情 + * @param query 应用id + * @return {@link WeAgentDetailVo} + */ + @Get(url = "/agent/get?agentid={$query.agentid}") + WeAgentDetailVo getRemoteAgentDetail(@Var("query") WeAgentRemoteQuery query); /** * 设置应用 * @param query {@link WeAgentQuery} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/controller/QwAgentController.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/controller/QwAgentController.java index 4ddf7a64c52fc38e2e9d5d697385c7ca22beb59d..26326b5963924fb8b6e6e99013ece4ef3cd087eb 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/controller/QwAgentController.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/controller/QwAgentController.java @@ -3,6 +3,7 @@ package com.linkwechat.wecom.controller; import com.linkwechat.common.core.domain.AjaxResult; import com.linkwechat.domain.wecom.vo.WeResultVo; import com.linkwechat.domain.wecom.vo.agent.query.WeAgentQuery; +import com.linkwechat.domain.wecom.vo.agent.query.WeAgentRemoteQuery; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentDetailVo; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentListVo; import com.linkwechat.wecom.service.IQwAgentService; @@ -50,6 +51,17 @@ public class QwAgentController { return AjaxResult.success(weAgentDetail); } + /** + * 应用详情 + * + * @param query 入参 + * @return WeAgentDetailVo + */ + @PostMapping("/getRemoteAgentDetail") + public AjaxResult getRemoteAgentDetail(@RequestBody WeAgentRemoteQuery query) { + WeAgentDetailVo weAgentDetail = qwAgentService.getRemoteAgentDetail(query); + return AjaxResult.success(weAgentDetail); + } /** * 设置应用 * diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeAgentTokenInterceptor.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeAgentTokenInterceptor.java index 345fba22773c29a083a41d1154ae60c7be3f3e94..0db1d19fdf7dd28fd74b77712a5e39642369025d 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeAgentTokenInterceptor.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeAgentTokenInterceptor.java @@ -14,6 +14,7 @@ import com.linkwechat.common.utils.StringUtils; import com.linkwechat.common.utils.spring.SpringUtils; import com.linkwechat.domain.wecom.query.WeBaseQuery; import com.linkwechat.domain.wecom.vo.WeResultVo; +import com.linkwechat.domain.wecom.vo.agent.query.WeAgentRemoteQuery; import com.linkwechat.wecom.service.IQwAccessTokenService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -39,6 +40,7 @@ public class WeAgentTokenInterceptor extends WeForestInterceptor implements Inte } String corpId = ""; Integer agentId = null; + String secret = null; Object[] arguments = request.getArguments(); for (Object argument : arguments) { if (argument instanceof WeBaseQuery) { @@ -46,11 +48,14 @@ public class WeAgentTokenInterceptor extends WeForestInterceptor implements Inte corpId = query.getCorpid(); agentId = Integer.valueOf(query.getAgentid()); } + if (argument instanceof WeAgentRemoteQuery) { + secret = ((WeAgentRemoteQuery) argument).getSecret(); + } } if (StringUtils.isEmpty(corpId) && Objects.isNull(agentId)) { throw new WeComException("未获取入参中的信息"); } - String token = iQwAccessTokenService.findAgentAccessToken(corpId, agentId); + String token = iQwAccessTokenService.findAgentAccessToken(corpId, agentId, secret); request.replaceOrAddQuery("access_token", token); return true; } @@ -106,6 +111,7 @@ public class WeAgentTokenInterceptor extends WeForestInterceptor implements Inte //删除缓存 String corpId = ""; Integer agentId = null; + String secret = null; Object[] arguments = request.getArguments(); for (Object argument : arguments) { if (argument instanceof WeBaseQuery) { @@ -113,12 +119,15 @@ public class WeAgentTokenInterceptor extends WeForestInterceptor implements Inte corpId = query.getCorpid(); agentId = Integer.valueOf(query.getAgentid()); } + if (argument instanceof WeAgentRemoteQuery) { + secret = ((WeAgentRemoteQuery) argument).getSecret(); + } } if (StringUtils.isEmpty(corpId) && Objects.isNull(agentId)) { throw new WeComException("未获取入参中的信息"); } iQwAccessTokenService.removeAgentAccessToken(corpId, agentId); - String token = iQwAccessTokenService.findAgentAccessToken(corpId, agentId); + String token = iQwAccessTokenService.findAgentAccessToken(corpId, agentId, secret); request.replaceOrAddQuery("access_token", token); } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IQwAccessTokenService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IQwAccessTokenService.java index 5a67c76cd98d8947250c9f6eb14e17cf83cd3397..927950a04a388cdc804d063f47690c04692f02a9 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IQwAccessTokenService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IQwAccessTokenService.java @@ -40,7 +40,7 @@ public interface IQwAccessTokenService { void removeAddressBookAccessToken(String corpId); - String findAgentAccessToken(String corpId, Integer agentId); + String findAgentAccessToken(String corpId, Integer agentId, String secret); void removeAgentAccessToken(String corpId, Integer agentId); diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IQwAgentService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IQwAgentService.java index 3ba317191f915abbce80f7f6b895a90cb1328f60..ee9f9376af9cffbc0e6667b0ee1096251f21da28 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IQwAgentService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IQwAgentService.java @@ -1,15 +1,10 @@ package com.linkwechat.wecom.service; -import com.linkwechat.domain.wecom.query.WeBaseQuery; -import com.linkwechat.domain.wecom.query.agentdev.WeTransformExternalUserIdQuery; -import com.linkwechat.domain.wecom.query.agentdev.WeTransformUserIdQuery; import com.linkwechat.domain.wecom.vo.WeResultVo; import com.linkwechat.domain.wecom.vo.agent.query.WeAgentQuery; +import com.linkwechat.domain.wecom.vo.agent.query.WeAgentRemoteQuery; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentDetailVo; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentListVo; -import com.linkwechat.domain.wecom.vo.agentdev.WeTransformCorpVO; -import com.linkwechat.domain.wecom.vo.agentdev.WeTransformExternalUserIdVO; -import com.linkwechat.domain.wecom.vo.agentdev.WeTransformUserIdVO; /** * @author danmo @@ -31,6 +26,13 @@ public interface IQwAgentService { */ WeAgentDetailVo getAgentDetail(WeAgentQuery query); + /** + * 获取应用详情 + * @param query + * @return + */ + WeAgentDetailVo getRemoteAgentDetail(WeAgentRemoteQuery query); + /** * 设置应用 * @param query diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/QwAccessTokenServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/QwAccessTokenServiceImpl.java index cf28befa3c53c66cabc675b52266302e3e742a5b..23efacf3b90833faadf3728b46c3c324a0ec4c53 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/QwAccessTokenServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/QwAccessTokenServiceImpl.java @@ -172,16 +172,21 @@ public class QwAccessTokenServiceImpl implements IQwAccessTokenService { } @Override - public String findAgentAccessToken(String corpId, Integer agentId) { + public String findAgentAccessToken(String corpId, Integer agentId, String secret) { String weAgentTokenKey = StringUtils.format(WeConstans.WE_AGENT_ACCESS_TOKEN, corpId, agentId); String weAccessToken = redisService.getCacheObject(weAgentTokenKey); //为空,请求微信服务器同时缓存到redis中 if (StringUtils.isEmpty(weAccessToken)) { - WeAgentInfo weAgentInfo = weAgentInfoService.getAgentInfoByAgentId(agentId); - if (Objects.isNull(weAgentInfo)) { - throw new WeComException("无可用的应用"); + String secretReal = secret; + if (StringUtils.isEmpty(secretReal)) { + WeAgentInfo weAgentInfo = weAgentInfoService.getAgentInfoByAgentId(agentId); + if (Objects.isNull(weAgentInfo)) { + throw new WeComException("无可用的应用"); + } + secretReal = weAgentInfo.getSecret(); } - WeCorpTokenVo weCorpTokenVo = weTokenClient.getToken(corpId, weAgentInfo.getSecret()); + + WeCorpTokenVo weCorpTokenVo = weTokenClient.getToken(corpId, secretReal); if (Objects.nonNull(weCorpTokenVo) && StringUtils.isNotEmpty(weCorpTokenVo.getAccessToken())) { weAccessToken = weCorpTokenVo.getAccessToken(); diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/QwAgentServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/QwAgentServiceImpl.java index 45a72b0e4bd016ba0834b363a482197b23ab91ce..45879196add5173c5f44f8a9a461c6c3a0c2bfb2 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/QwAgentServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/QwAgentServiceImpl.java @@ -1,21 +1,13 @@ package com.linkwechat.wecom.service.impl; -import com.linkwechat.domain.wecom.query.WeBaseQuery; -import com.linkwechat.domain.wecom.query.agentdev.WeTransformExternalUserIdQuery; -import com.linkwechat.domain.wecom.query.agentdev.WeTransformUserIdQuery; import com.linkwechat.domain.wecom.vo.WeResultVo; import com.linkwechat.domain.wecom.vo.agent.query.WeAgentQuery; +import com.linkwechat.domain.wecom.vo.agent.query.WeAgentRemoteQuery; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentDetailVo; import com.linkwechat.domain.wecom.vo.agent.vo.WeAgentListVo; -import com.linkwechat.domain.wecom.vo.agentdev.WeTransformCorpVO; -import com.linkwechat.domain.wecom.vo.agentdev.WeTransformExternalUserIdVO; -import com.linkwechat.domain.wecom.vo.agentdev.WeTransformUserIdVO; import com.linkwechat.wecom.client.WeAgentClient; -import com.linkwechat.wecom.client.WeIDTransformClient; import com.linkwechat.wecom.service.IQwAgentService; -import com.linkwechat.wecom.service.IQwCorpService; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -43,6 +35,11 @@ public class QwAgentServiceImpl implements IQwAgentService { return weAgentClient.getAgentDetail(query); } + @Override + public WeAgentDetailVo getRemoteAgentDetail(WeAgentRemoteQuery query) { + return weAgentClient.getRemoteAgentDetail(query); + } + @Override public WeResultVo updateAgent(WeAgentQuery query) { return weAgentClient.updateAgent(query);