微信公众平台接入模块
微信公众平台模块 | 接入状态 | 实现类 | 用法 |
---|---|---|---|
获取微信服务器IP地址、网络检测 | ✅ | ServerService |
ServerServiceTest |
openApi管理 | ✅ | OpenApiService |
OpenApiServiceTest |
自定义菜单 | ✅ | CustomMenusService |
CustomMenusServiceTest |
基础消息能力 | ✅ | MessageService |
MessageServiceTest |
订阅通知 | ✅ | SubscriptionMessagesService |
同 MessageServiceTest |
微信网页开发 | ✅ | WebAppsService |
WebAppsServiceTest |
素材管理 | ✅ | AssetService |
AssertServiceTest |
用户管理 | ✅ | UserManagementService |
UserManagementServiceTest |
账号管理 | ✅ | AccountManagementService |
AccountManagementServiceTest |
未接入模块
微信公众平台模块 | 接入状态 | 实现类 | 用法 |
---|---|---|---|
客服消息 | ⛔ | ||
草稿箱 | ⛔ | ||
发布能力 | ⛔ | ||
数据统计 | ⛔ | ||
微信卡券 | ⛔ | ||
微信门店 | ⛔ | ||
微信小店 | ⛔ | ||
智能接口 | ⛔ | ||
微信设备功能 | ⛔ | ||
微信"一物一码" | ⛔ | ||
微信发票 | ⛔ | ||
微信非税缴费 | ⛔ | ||
扫服务号二维码打开小程序 | ⛔ |
- 创建Service对象
所有Service接口的的默认实现都是以DefaultXXXX开头的。如ServerService的实现类为DefaultServerService
String appId = "", appSecret = "";
WeChatMpConfig weChatMpConfig = new WeChatMpConfig(appId, appSecret);
DefaultWeChatMpAccessTokenService weChatMpAccessTokenService = new DefaultWeChatMpAccessTokenService(weChatMpConfig);
ServerService mpServerService = new DefaultServerService(weChatMpAccessTokenService);
- 通过Service A实例获取Service B的实例
如通过ServerService
获取OpenApiService
实例
- 方式一: 直接通过
ofXXXX
获取对应Service
OpenApiService openApiService = serverService.ofOpenApiService();
- 方式二: 通过
<T extends WeChatService> T of(Class<T> toWeChatService)
获取对应Service
toWeChatService
为对应Service的实现类, 一般为DefaultXXXService
OpenApiService openApiService = serverService.of(DefaultOpenApiService.class);
见 微信公众平台接入模块
测试用例用法。
AccessToken无需单独获取和指定,调用Api方法时,会自动获取并缓存AccessToken.
AccessToken由WeChatMpAccessTokenService
维护,且缓存由WeChatTokenStorage
维护。
- 方式一: 使用
WeChatMpAccessTokenService
获取token
String appId = "", appSecret = "";
WeChatMpConfig weChatMpConfig = new WeChatMpConfig(appId, appSecret);
WeChatMpAccessTokenService weChatMpAccessTokenService = new DefaultWeChatMpAccessTokenService(weChatMpConfig);
String token = weChatMpAccessTokenService.getToken();
- 方式二: 使用Service实例获取token
String token = serverService.getToken();
- 方式一: 自动刷新
调用Api方法时,若收到微信40014:不合法的 access_token ,请开发者认真比对 access_token 的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口
时,会自动重新请求AccessToken。
- 方式二: 通过
WeChatMpAccessTokenService
刷新AccessToken
刷新后会自动更新到缓存中。
weChatMpAccessTokenService.tokenRefresh()
# 或
weChatMpAccessTokenService.token(true)
AccessToken缓存由WeChatTokenStorage
维护,默认实现为DefaultLocalWeChatTokenStorage
。
可在实例化WeChatMpConfig
时指定WeChatTokenStorage
。
- 默认缓存
DefaultLocalWeChatTokenStorage
AccessToken缓存在当前Jvm中。
WeChatMpConfig weChatMpConfig = new WeChatMpConfig(appId, appSecret);
weChatMpAccessTokenService = new DefaultWeChatMpAccessTokenService(weChatMpConfig);
- 指定
WeChatTokenStorage
实现类
指定为Redis缓存实现类。
String redisAddress = "redis://127.0.0.1:6379";
Integer database = 0;
WeChatMpConfig weChatMpConfigWithRedis = new WeChatMpConfig(appId, appSecret);
weChatMpConfigWithRedis.setRedisConfig(WeChatRedisConfigFactory.newConfig(WeChatRedisConfig.ServerType.SingleServer, redisAddress, database));
RedisWeChatTokenStorage mpServerServiceWithRedisStorage = new RedisWeChatTokenStorage(weChatMpConfigWithRedis);
weChatMpConfigWithRedis.setWeChatTokenStorage(mpServerServiceWithRedisStorage);
weChatMpAccessTokenService = new DefaultWeChatMpAccessTokenService(weChatMpConfigWithRedis);
可通过继承AbstractWeChatMpService
类来快速接入微信公众号API, 并使用其中的post
,get
方法。
调用post
,get
方法时,可以指定是否需要AccessToken。
如:
public class DefaultServerService extends AbstractWeChatMpService implements ServerService {
public DefaultServerService(WeChatMpConfig weChatConfig) {
super(weChatConfig);
}
public DefaultServerService(WeChatMpAccessTokenService weChatMpAccessTokenService) {
super(weChatMpAccessTokenService);
}
public DefaultServerService(WeChatMpAccessTokenService weChatMpAccessTokenService, RequestFilterChain requestFilterChain) {
super(weChatMpAccessTokenService, requestFilterChain);
}
}
消息和事件 由 WeChatMpMessageResolver
处理, 需先创建 WeChatMpMessageResolver
实例, 实现”消息处理器WeChatMpMessageHandler<?>
“、”事件处理器WeChatMpEventHandler<?>
“,
并将处理器添加到WeChatMpMessageResolver
中。
创建WeChatMpMessageResolver
并添加消息处理器
@Resource
private List<WeChatMpMessageHandler<WeChatMpMessage>> messageHandlers;
WeChatMpService mpService = new DefaultWeChatMpService(mpConfig);
WeChatMpMessageResolver mpMessageResolver = new WeChatMpMessageResolver(mpService);
mpMessageResolver.addWeChatHandlers(messageHandlers);
实现WeChatMpMessageHandler<?>
消息处理器, 并重写handle方法, ?
为需要处理的具体消息类型。
@Component(")
@Slf4j
public class MessageHandler implements WeChatMpMessageHandler<WeChatMpMessage> {
@Override
public WeChatMpEchoMessage handle(WeChatMpService service, WeChatMpMessage message, MessageResolverContext context) {
}
}
实现WeChatMpEventHandler<?>
消息处理器, 并重写handle方法, ?
为需要处理的具体事件类型。
@Component(")
@Slf4j
public class EventHandler implements WeChatMpEventHandler<WeChatMpXmlEvent> {
@Override
public WeChatMpEchoMessage handle(WeChatMpService service, WeChatMpXmlEvent event, MessageResolverContext context) {
}
}
https://developers.weixin.qq.com/doc/offiaccount/Getting_Started
https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Update_log.html
https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login