微信對外提供了很多 API觉渴,但是這些 API 使用起來非常不方便炮沐,用戶需要實現非常底層的操作难咕;所以我以 spring-boot-starter 的形式對其做了一次封裝,形成了 wechat-spring-boot-starters
這個項目理卑,盡量做到“零”配置運行翘紊;目前實現了消息部分的封裝,完成所有類型消息的統(tǒng)一處理藐唠,自動執(zhí)行消息加解密而無需用戶參與帆疟。以下將介紹 wechat-spring-boot-starters
的基本情況。
配置
前提
- 此項目基于 Spring Boot宇立,所以要使用本項目踪宠,必須引入 Spring Boot 的相關依賴
- JDK 1.8 及以上
引入 maven 依賴
<dependency>
<groupId>me.javaroad.openapi.wechat</groupId>
<artifactId>wechat-spring-boot-starters</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
因為目前是 snapshot 版本,所以還需要引入 snapshot repository :
<repositories>
<repository>
<snapshots />
<id>sonatype snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
</repositories>
基礎配置
在 application.yml 中新增以下配置:
weixin:
mp:
endpoint:
# 微信回調地址妈嘹,默認為 /weixin/callback柳琢,如需自定義,請修改以下配置項
callback-url: /weixin/callback
security:
# 微信后臺配置的 token
token: 1234567890
# 微信后臺配置的消息加解密 aeskey
encodingAesKey: abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG
# #############################################################
# 微信 access token 過期刷新閾值润脸,計算方法:
# 當前時間 - (獲得token時間 + token 有效期 + 閾值) < 0 則刷新 token
# 默認為 token 失效前 5 分鐘刷新
# #############################################################
refresh-token-threshold: 300
auth:
# APPID
appid: appid
# APP secret
secret: secret
關于消息加密解密
系統(tǒng)會自動判斷微信服務器推送給用戶的消息是否經過加密柬脸,如果經過加密,將會自動解密毙驯,并在用戶服務器返回給微信服務器時自動加密數據倒堕,這個過程不需要用戶做任何操作。
消息處理 - MessageHandler
當系統(tǒng)接收到微信服務器推送的消息之后爆价,做了兩件事情:
- 發(fā)布了
ReceiveMessageEvent
類型的事件 - 將收到的消息分發(fā)到
MessageHandler
上
所以用戶可以通過以上兩種方式獲取微信服務器推送的消息涩馆。
第一種方式:
@Component
public class ReceiveMessageEventListener implements ApplicationListener<ReceiveMessageEvent> {
@Async
@Override
public void onApplicationEvent(ReceiveMessageEvent event) {
System.out.println(event.getSource());
}
}
這里是通過監(jiān)聽系統(tǒng)事件獲取對應的消息,此處 強烈建議 以異步的方式處理消息允坚,如需同步處理消息,請參考第二種方式蛾号。
第二種方式
@Component
public class TextMessageHandler extends AbstractMessageHandler<TextMessage> {
public TextMessageHandler(MessageHandlerFactory messageHandlerFactory) {
super(messageHandlerFactory);
}
@Override
public ResponseMessage handleMessage(TextMessage message) {
// 此處根據業(yè)務對收到的消息做處理稠项,注意,處理時間不能超過 5s鲜结,否則會導致微信對用戶給出嚴重錯誤的提示
// 如果時間很可能超過 5s, 需要在新線程中處理
// 如果不需要對用戶返回任何消息展运,則請在此處返回 EmptyResponseMessage
return new TextResponseMessage();
}
}
這種方式會同步執(zhí)行,所以處理時間必須不能超過 5 s .
系統(tǒng)中提供了以下類型的消息精刷,其中 普通消息 和 事件推送消息 是微信服務器推送給用戶服務器的消息拗胜,它將作為 MessageHandler
的參數傳給對應的 Handler, 被動回復消息 和 特殊消息 為用戶服務器返回給微信服務器的消息怒允, 它將作為 MessageHandler
的返回值埂软。
普通消息
TextMessage
文本消息ImageMessage
圖片消息VoiceMessage
語音消息VideoMessage
視頻消息ShortVideoMessage
小視頻消息LocationMessage
地理位置消息LinkMessage
鏈接消息
事件推送消息
-
SubscribeEventMessage
關注/取消關注 事件 -
QrCodeEventMessage
掃二維碼事件 -
CustomMenuEventMessage
自定義菜單事件 -
LocationEventMessage
上報地理位置事件
被動回復消息
TextResponseMessage
文本消息ImageResponseMessage
圖片消息VoiceResponseMessage
語音消息VideoResponseMessage
視頻消息MusicResponseMessage
音樂消息NewsResponseMessage
圖文消息
特殊消息
-
EmptyResponseMessage
這個消息僅用于被動回復用戶時,如果接收了用戶的消息而不希望給用戶回復的話纫事,請返回此消息
結語
以上就是目前實現的消息管理的部分接口勘畔,后續(xù)會繼續(xù)完善所灸。
最后附上源碼:GitHub