使用 Spring Boot Starter 封裝 微信 SDK

微信對外提供了很多 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)接收到微信服務器推送的消息之后爆价,做了兩件事情:

  1. 發(fā)布了 ReceiveMessageEvent 類型的事件
  2. 將收到的消息分發(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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市炫七,隨后出現的幾起案子爬立,更是在濱河造成了極大的恐慌,老刑警劉巖万哪,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侠驯,死亡現場離奇詭異,居然都是意外死亡奕巍,警方通過查閱死者的電腦和手機吟策,發(fā)現死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伍绳,“玉大人踊挠,你說我怎么就攤上這事〕迳保” “怎么了效床?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長权谁。 經常有香客問我剩檀,道長,這世上最難降的妖魔是什么旺芽? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任沪猴,我火速辦了婚禮,結果婚禮上采章,老公的妹妹穿的比我還像新娘运嗜。我一直安慰自己,他們只是感情好悯舟,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布担租。 她就那樣靜靜地躺著,像睡著了一般抵怎。 火紅的嫁衣襯著肌膚如雪奋救。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天反惕,我揣著相機與錄音尝艘,去河邊找鬼。 笑死姿染,一個胖子當著我的面吹牛背亥,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼隘梨,長吁一口氣:“原來是場噩夢啊……” “哼程癌!你這毒婦竟也來了?” 一聲冷哼從身側響起轴猎,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤嵌莉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捻脖,有當地人在樹林里發(fā)現了一具尸體锐峭,經...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年可婶,在試婚紗的時候發(fā)現自己被綠了沿癞。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡矛渴,死狀恐怖椎扬,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情具温,我是刑警寧澤蚕涤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站铣猩,受9級特大地震影響揖铜,放射性物質發(fā)生泄漏。R本人自食惡果不足惜达皿,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一天吓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧峦椰,春花似錦龄寞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至冤竹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茬射,已是汗流浹背鹦蠕。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留在抛,地道東北人钟病。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親肠阱。 傳聞我的和親對象是個殘疾皇子票唆,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內容