企业微信接入模块
企业微信模块 | 接入状态 | 实现类 | 用法 |
---|---|---|---|
获取企微微信服务器IP地址 | ✅ | WeComServerService |
ServerServiceTest |
基础 ↓ | |||
帐号ID | ✅ | WeComIDService |
WeComIDServiceTest |
通讯录管理-成员管理 | ✅ | UserService |
UserServiceTest |
通讯录管理-部门管理 | ✅ | DepartmentService |
DepartmentServiceTest |
通讯录管理-标签管理 | ✅ | TagService |
TagServiceTest |
通讯录管理-互联企业 | ✅ | LinkedCorpService |
LinkedCorpServiceTest |
消息通知 | ✅ | WeComMessageHandler/ WeComMessageResolver ,WeComEventHandler/ WeComEventResolver |
WeComMessageResolverTest |
身份验证 | ✅ | AuthService |
AuthServiceTest |
企业互联 | ✅ | CorpGroupService |
CorpGroupServiceTest |
安全管理 | ✅ | SecurityService |
SecurityServiceTest |
消息推送-应用发送消息到群聊会话 | ✅ | AppChatService |
AppChatServiceTest |
群机器人 | ✅ | WebHookService |
WebHookServiceTest |
应用管理 | ✅ | AgentService |
AgentServiceTest |
应用管理-自定义菜单 | ✅ | MenuService |
MenuServiceTest |
素材管理 | MediaService |
MediaServiceTest |
Service名称一般取自 API 第一个URL目录, 如
URL: https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&userid=USERID
Service: UserService
- 创建Service对象
所有Service接口的的默认实现都是以DefaultXXXX开头的。如WeComServerService的实现类为DefaultWeComServerService
String corpId = "", corpSecret = "";
WeComConfig WeComConfig = new WeComConfig(corpId, corpSecret);
DefaultWeComAccessTokenService weComAccessTokenService = new DefaultWeComAccessTokenService(WeComConfig);
WeComServerService weComServerService = new DefaultWeComServerService(weComAccessTokenService);
- 通过Service A实例获取Service B的实例
如通过WeComServerService
获取UserService
实例
- 方式一: 直接通过
ofXXXX
获取对应Service
UserService openApiService = weComServerService.ofUserService();
- 方式二: 通过
<T extends WeChatService> T of(Class<T> toWeChatService)
获取对应Service
toWeChatService
为对应Service的实现类, 一般为DefaultXXXService
UserService openApiService = weComServerService.of(DefaultUserService.class);
// TODO xxx
AccessToken无需单独获取和指定,调用Api方法时,会自动获取并缓存AccessToken.
AccessToken由WeComAccessTokenService
维护,且缓存由WeChatTokenStorage
维护。
- 方式一: 使用
WeComAccessTokenService
获取token
String appId = "", appSecret = "";
WeComConfig weComConfig = new WeComConfig(appId, appSecret);
WeComAccessTokenService WeComAccessTokenService = new DefaultWeComAccessTokenService(weComConfig);
String token = WeComAccessTokenService.getToken();
- 方式二: 使用Service实例获取token
String token = weComService.getToken();
- 方式一: 自动刷新
调用Api方法时,若收到微信40014:不合法的 access_token ,请开发者认真比对 access_token 的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口
时,会自动重新请求AccessToken。
- 方式二: 通过
WeComAccessTokenService
刷新AccessToken
刷新后会自动更新到缓存中。
weComAccessTokenService.tokenRefresh()
# 或
weComAccessTokenService.token(true)
AccessToken缓存由WeChatTokenStorage
维护,默认实现为DefaultLocalWeChatTokenStorage
。
可在实例化WeComConfig
时指定WeChatTokenStorage
。
- 默认缓存
DefaultLocalWeChatTokenStorage
AccessToken缓存在当前Jvm中。
WeComConfig WeComConfig = new WeComConfig(appId, appSecret);
WeComAccessTokenService weComAccessTokenService = new DefaultWeComAccessTokenService(WeComConfig);
- 指定
WeChatTokenStorage
实现类
指定为Redis缓存实现类。
String redisAddress = "redis://127.0.0.1:6379";
Integer database = 0;
WeComConfig weComConfigWithRedis = new WeComConfig(appId, appSecret);
weComConfigWithRedis.setRedisConfig(WeChatRedisConfigFactory.newConfig(WeChatRedisConfig.ServerType.SingleServer, redisAddress, database));
RedisWeChatTokenStorage mpServerServiceWithRedisStorage = new RedisWeChatTokenStorage(WeComConfigWithRedis);
weComConfigWithRedis.setWeChatTokenStorage(mpServerServiceWithRedisStorage);
weComAccessTokenService = new DefaultWeComAccessTokenService(WeComConfigWithRedis);
可通过继承AbstractWeComService
类来快速接入微信公众号API, 并使用其中的post
,get
方法。
调用post
,get
方法时,可以指定是否需要AccessToken。
如:
public class DefaultWeComServerService extends AbstractWeComService implements WeComServerService {
public DefaultWeComServerService(WeComConfig weChatConfig) {
super(weChatConfig);
}
public DefaultWeComServerService(WeComAccessTokenService weComAccessTokenService) {
super(weComAccessTokenService);
}
public DefaultWeComServerService(WeComAccessTokenService weComAccessTokenService, RequestFilterChain requestFilterChain) {
super(weComAccessTokenService, requestFilterChain);
}
}
消息和事件 由 WeComMessageResolver
处理, 需先创建 WeComMessageResolver
实例, 实现”消息处理器WeComMessageHandler<?>
“、”事件处理器WeComEventHandler<?>
“,
并将处理器添加到WeComMessageResolver
中。
创建WeComMessageResolver
并添加消息处理器
@Resource
private List<WeComMessageHandler<WeComMessage>> messageHandlers;
WeComMessageResolver weComMessageResolver = new WeComMessageResolver(weComService);
weComMessageResolver.addWeChatHandlers(messageHandlers);
实现WeComMessageHandler<?>
消息处理器, 并重写handle方法, ?
为需要处理的具体消息类型。
@Component("weComMessageHandler")
@Slf4j
public class MessageHandler implements WeComMessageHandler<WeComMessage> {
@Override
public WeComEchoMessage handle(WeComService service, WeComMessage message, MessageResolverContext context) {
log.info("企业微信消息解析器: message: {}, context: {}", message, context);
return WeComMessageHandler.super.handle(service, message, context);
}
}
实现WeComEventHandler<?>
消息处理器, 并重写handle方法, ?
为需要处理的具体事件类型。
@Component("weComEventHandler")
@Slf4j
public class EventHandler implements WeComEventHandler<WeComXmlEvent> {
@Override
public WeComEchoMessage handle(WeComService service, WeComXmlEvent event, MessageResolverContext context) {
log.info("企业微信事件解析器: message: {}, context: {}", event, context);
return WeComEventHandler.super.handle(service, event, context);
}
}
企业内部开发-服务端: https://developer.work.weixin.qq.com/document/path/90664