FastBootWeixin基于 SpringBoot 的微信公眾號(hào)快速開發(fā)框架
FastBootWeixin 是一款基于 SpringBoot、Spring、SpringMVC 的微信快速開發(fā)框架。使用簡單快捷,可以快速的完成一個(gè)微信公眾號(hào)。
在使用本框架前建議對(duì)微信公眾號(hào)開發(fā)文檔有所了解,不過在不了解公眾號(hào)文檔的情況下使用本框架也能完成一個(gè)簡單的微信公眾號(hào)。
功能支持
1. Spring Boot風(fēng)格的啟動(dòng)方式
與Spring Boot完美整合,如果自己沒有SpringBoot項(xiàng)目,想直接使用該框架搭建公眾號(hào),可直接使用@WxApplication標(biāo)記啟動(dòng)類,該注解支持參數(shù):menuAutoCreate,默認(rèn)為true。表示自動(dòng)創(chuàng)建微信菜單,可以設(shè)置為false關(guān)閉自動(dòng)創(chuàng)建菜單的行為。若已有Spring Boot項(xiàng)目,想引入此框架,只需在你的任意配置類上標(biāo)記注解@EnableWxMvc即可,參數(shù)同上。
2. Spring Mvc風(fēng)格的Mapping
共支持三種Mapping:
-
@WxButton,微信按鈕綁定與生成。參數(shù)說明:group表示左中右三個(gè)分組,name為按鈕名,type菜單類型,main是否為一級(jí)菜單。order顯示順序。key為事件key,若交給框架管理,則key會(huì)自動(dòng)生成,無需配置。url為view類型的訪問地址。mediaId為媒體ID。
-
@WxMessageMapping,微信消息綁定。參數(shù)說明:type消息類型、wildcard通配符支持多個(gè)、pattern正則表達(dá)式,暫時(shí)不支持哈哈、name綁定名,不必要。
-
@WxEventMapping,微信事件綁定。參數(shù)說明:type事件類型、name綁定名,不必要。
注意:綁定所在類需聲明為@WxController
3. Spring Mvc風(fēng)格的參數(shù)綁定
支持以下類型參數(shù):
-
WxRequest:微信服務(wù)器的請(qǐng)求封裝
-
WxRequest.Body:微信服務(wù)器的請(qǐng)求體內(nèi)容封裝
-
WxRequest.Body.field:WxRequest里的任意屬性名,都可以直接綁定到參數(shù),但是要注意消息類型與參數(shù)值,有些消息不會(huì)有某些內(nèi)容。暫時(shí)還不支持不同消息區(qū)分綁定的不同的Request類型,后續(xù)可加入支持。
-
WxSession:類比于HttpSession,默認(rèn)實(shí)現(xiàn)使用fromUserName作為sessionId
-
WxUser:這個(gè)是較為特殊的類型,其實(shí)是通過WxUserProvider接口提供的,本框架提供一個(gè)默認(rèn)的實(shí)現(xiàn)DefaultWxUserProvider implements WxUserProvider,該實(shí)現(xiàn)通過微信api獲取用戶信息,以WxUser類型返回,當(dāng)然你也可以使用自己的實(shí)現(xiàn)類,只用聲明為SpringBean即可自動(dòng)注入,泛型類型也可以由你自己確定,參數(shù)中有該泛型類型的參數(shù),都會(huì)被自動(dòng)使用WxUserProvider.getUser獲取并綁定到參數(shù)中。
參數(shù)綁定目前支持這幾種,如果有更好的方案需要支持,也可以直接提出意見與建議,我會(huì)及時(shí)進(jìn)行處理的。
4. Spring Mvc風(fēng)格的返回值
返回值支持以下類型:
-
String 該返回值會(huì)以文本消息形式返回給用戶
-
WxMessage及其子類 該返回值可以很方便的使用對(duì)應(yīng)消息類型的Builder去構(gòu)造,此時(shí)會(huì)以對(duì)應(yīng)類型的消息返回給用戶。
-
@WxAsyncMessage 標(biāo)記異步返回消息,通過這個(gè)注解,可以令消息的返回值以異步消息的形式調(diào)用客服接口發(fā)送給用戶。@WxEventMapping的返回值只能以這種形式發(fā)送。
-
String或者WxMessage的Iterable或者Array。該類型會(huì)分為多條異步消息發(fā)送給用戶。
上面異步發(fā)送消息都是使用的WxMessageTemplate發(fā)送的,下面講解。
5. Spring風(fēng)格的消息發(fā)送
本框架提供WxMessageTemplate發(fā)送消息,同時(shí)在template中提供了WxMessageProcesser支持,作用是在消息發(fā)送前對(duì)消息做處理。
如同步返回消息時(shí),需要寫入fromUserName字段,而該字段是消息發(fā)送時(shí)的toUserName字段,沒有必要讓框架的使用者去處理這個(gè)字段,在WxCommonMessageProcesser處理器中就對(duì)該字段進(jìn)行了處理,有興趣的可以參考源碼。
同時(shí)還支持以下轉(zhuǎn)換:對(duì)于media類型的消息,可以直接使用mediaUrl或者mediaPath寫入素材路徑,消息轉(zhuǎn)換器通過WxMediaManager自動(dòng)管理素材獲得必要的素材id。(關(guān)于WxMediaManager下面寫)
注意:所有的消息處理文本消息,建議都使用WxMessage里的對(duì)應(yīng)消息內(nèi)容的builder來生成!
6. 素材自動(dòng)管理
本框架提供WxMediaManager來管理素材,同時(shí)使用嵌入式數(shù)據(jù)庫保存素材與本地文件的對(duì)應(yīng)關(guān)系,目前這部分功能我雖然完成了,但是總感覺有很大的不妥,希望有人能幫我看看順便提點(diǎn)意見。
上面消息發(fā)送中的媒體其實(shí)也是通過素材管理器來實(shí)現(xiàn)的。
7. 內(nèi)置AccessToken管理
本框架提供WxTokenStore接口來存儲(chǔ)token,并提供一個(gè)默認(rèn)的基于內(nèi)存的實(shí)現(xiàn)MemoryWxTokenStore,若有分布式需要可以自行實(shí)現(xiàn)該接口,并把實(shí)現(xiàn)類作為Bean注入Spring即可。
8. 微信接口調(diào)用與返回值自動(dòng)處理
使用WxApiInvokeSpi接口與WxInvokerProxyFactory工廠類自動(dòng)生成微信接口調(diào)用代理,只需要聲明方法和注解即可,默認(rèn)使用HttpComponent調(diào)用接口。有興趣的小伙伴可以看看源碼,我寫的也不太好,有更好的建議歡迎提出。
同時(shí)對(duì)返回值做初步分析,如果接口返回內(nèi)容的errorCode不為0,則會(huì)作為異常拋出。異常體系為WxException及其子類。
PS:你也可以使用這種方式任意生成自己的代理調(diào)用接口,后續(xù)我會(huì)加入文檔,暫時(shí)懶。。。
9. 菜單自動(dòng)生成與自動(dòng)更新
可以通過開關(guān)開啟與關(guān)閉,通過@WxButton注解生成菜單結(jié)構(gòu),并自動(dòng)調(diào)用接口判斷菜單是否改變,自動(dòng)生成與更新菜單。
10. 內(nèi)置微信接口認(rèn)證
可以正確響應(yīng)微信發(fā)送的Token驗(yàn)證,方便快捷。
11. 完全無侵入的MVC模式
使用本框架,不會(huì)對(duì)SpringMvc自己原生的Mapping產(chǎn)生任何影響,也不會(huì)占用任何獨(dú)有的Mapping關(guān)系(除了認(rèn)證請(qǐng)求)。在此框架存在的情況下,你可以使用任何SpringMvc的原生功能,包括根目錄的請(qǐng)求,也不會(huì)被微信服務(wù)器獨(dú)自占用。
12. 微信Web認(rèn)證攔截器與URL自動(dòng)轉(zhuǎn)換
提供微信OAUTH2認(rèn)證攔截,通過配置wx.mvc.interceptor.includePatterns和wx.mvc.interceptor.excludePatterns來配置攔截的目標(biāo)地址,你可以提供一個(gè)WxOAuth2Callback接口的實(shí)現(xiàn)類作為Bean,在WxOAuth2Interceptor中會(huì)自動(dòng)注入這個(gè)bean,并在微信Web認(rèn)證通過后調(diào)用after(WxOAuth2Context context)方法把相關(guān)的context傳遞給該Bean的方法,你可以在該方法中獲取到context了的WxWebUser,并通過WxUserManager把WxWebUser轉(zhuǎn)換為WxUser。關(guān)系詳細(xì)信息請(qǐng)參考:微信網(wǎng)頁授權(quán)。
附加功能:自動(dòng)判斷消息中的url是否需要添加OAuth重定向,請(qǐng)參考WxRedirectUtils。
