知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
您當(dāng)前位置>首頁 » 新聞資訊 » 公眾號相關(guān) >
SpringBoot開發(fā)微信公眾號
發(fā)表時間:2020-9-20
發(fā)布人:葵宇科技
瀏覽次數(shù):77
在講微信公眾號開發(fā)之前,先來大概了解一下微信公眾號。微信公眾號大體上可以分為服務(wù)號和訂閱號,訂閱號和服務(wù)號的區(qū)別如下:
服務(wù)號可以申請微信支付功能。
服務(wù)號只能由企業(yè)申請,訂閱號可以由企業(yè)或個人申請。
訂閱號和服務(wù)號每月推送消息次數(shù)不同,訂閱號每天可以推送一次,服務(wù)號每月可以推送四次。
服務(wù)號推送的消息會出現(xiàn)在用戶的聊天列表中,而訂閱號推送的消息顯示在訂閱號文件夾中。
還有一些其他接口功能的區(qū)別和限制,總的來說服務(wù)號支持更高級的功能開發(fā)。
訂閱號更加偏向于向用戶傳遞咨詢,一般各種技術(shù)類公眾號都屬于訂閱號,訂閱號的消息推送并不會有太顯眼的提醒,如果你想讓某個公眾號的推送內(nèi)容更加顯眼,可以選擇將公眾號置為星標(biāo)。置為星標(biāo)后公眾號會顯示在所有訂閱號的最頂部,同時收到消息后會有黃色五角星星標(biāo)提醒。
一 公眾號配置服務(wù)器
微信官方提供了非常完善的接入文檔,如果想了解文檔的具體內(nèi)容,直接瀏覽器搜索微信開發(fā)文檔就可以了。但是為了方便開發(fā),一般不會直接去根據(jù)微信開發(fā)文檔進(jìn)行開發(fā),github上有許多開源項目對微信開發(fā)文檔進(jìn)行了封裝,這里我使用mica-weixin
開發(fā)包進(jìn)行演示,mica-weixin
是jfinal-weixin
的boot版本。
配置服務(wù)器信息很簡單,具體流程就是微信服務(wù)發(fā)送請求一個請求給業(yè)務(wù)服務(wù)器,業(yè)務(wù)服務(wù)器驗證請求后給微信服務(wù)一個響應(yīng)。
1.1 搭建業(yè)務(wù)服務(wù)
本地搭建一個spring-boot-weixin
的項目,使用內(nèi)網(wǎng)穿透工具進(jìn)行穿透,使其可以與外網(wǎng)進(jìn)行通信。
1.1.1 引入mica-weixin
依賴
<dependency>
<groupId>net.dreamlu</groupId>
<artifactId>mica-weixin</artifactId>
<version>2.0.1</version>
</dependency>
1.1.2 配置公眾號信息
mica-weixin
通過配置文件進(jìn)行公眾號信息的配置,如果你想通過數(shù)據(jù)庫配置公眾號信息,可以參考我以前寫過的一篇文章jfinal-weixin自定義配置支持多公眾號。
dream:
weixin:
wx-configs:
- appId: xxxxxx
appSecret: xxxxxx
token: javatrip
encodingAesKey: xxxxxx
appId
和appSecret
可在公眾號后臺進(jìn)行查看,具體位置在菜單開發(fā)—>基本配置中,其中appSecret
要妥善保管,現(xiàn)在公眾號已經(jīng)不支持查看appSecret
了,如果你忘了appSecret
,只能進(jìn)行重置。
1.1.3 開發(fā)消息校驗接口
mica-weixin
已經(jīng)為我們提供好了消息校驗接口,只需要繼承DreamMsgControllerAdapter
就可以了。
@WxMsgController("/weixin/wx")
public class WeiXinMsgController extends DreamMsgControllerAdapter {
@Override
protected void processInFollowEvent(InFollowEvent inFollowEvent) {
}
@Override
protected void processInTextMsg(InTextMsg inTextMsg) {
}
@Override
protected void processInMenuEvent(InMenuEvent inMenuEvent) {
}
}
同時,需要開啟緩存,由于mica-weixin
的將access_token
等信息放在了緩存中。在啟動類上加@EnableCaching
就開啟了。
@SpringBootApplication
@EnableCaching
public class WeixinApplication {
public static void main(String[] args) {
SpringApplication.run(WeixinApplication.class, args);
}
}
1.1.4 公眾號后臺配置服務(wù)器信息
使用內(nèi)網(wǎng)穿透工具穿透內(nèi)網(wǎng)地址,然后在公眾號后臺菜單開發(fā)—>基本配置中填寫服務(wù)器配置信息。
填寫完成后點擊啟用,這樣就完成了微信服務(wù)器和業(yè)務(wù)服務(wù)器的關(guān)系配置。開啟開發(fā)者配置后,自動回復(fù)、自定義菜單等功能都不能正常使用了。這時候就需要去調(diào)用對應(yīng)的接口實現(xiàn)這些功能。
二 實現(xiàn)各種消息接口
2.1 關(guān)注消息
在一步中,自定義類WeiXinMsgController
中需要重寫三個父類中的方法,其中processInFollowEvent()
就是關(guān)注和取消關(guān)注的方法,取消關(guān)注后用戶雖然不能收到消息,但是后臺可以接收到用戶取消關(guān)注的事件。
@Override
protected void processInFollowEvent(InFollowEvent inFollowEvent) {
OutTextMsg defaultMsg = new OutTextMsg(inFollowEvent);
// 關(guān)注
if(InFollowEvent.EVENT_INFOLLOW_SUBSCRIBE.equals(inFollowEvent.getEvent())){
// 可將關(guān)注用戶錄入db,此處可以獲取到用戶openid
String openId = inFollowEvent.getFromUserName();
// 查詢db,根據(jù)響應(yīng)消息類型封裝消息體
if("文本消息"){
OutTextMsg otm = new OutTextMsg(inFollowEvent);
otm.setContent("消息內(nèi)容");
render(otm);
return;
}else if("圖片消息"){
OutImageMsg oim = new OutImageMsg(inFollowEvent);
// 這里需要調(diào)用微信提供的素材接口,將圖片上傳至素材庫。
oim.setMediaId("圖片素材id");
render(oim);
return;
}else if("圖文消息"){
OutNewsMsg>@Override
protected void processInTextMsg(InTextMsg inTextMsg) {
String content = inTextMsg.getContent();
// 根據(jù)用戶發(fā)送的content去查詢db中的響應(yīng)內(nèi)容
if("文本消息"){
OutTextMsg otm = new OutTextMsg(inTextMsg);
otm.setContent("消息內(nèi)容");
render(otm);
return;
}else if("圖片消息"){
OutImageMsg oim = new OutImageMsg(inTextMsg);
// 這里需要調(diào)用微信提供的素材接口,將圖片上傳至素材庫。
oim.setMediaId("圖片素材id");
render(oim);
return;
}else if("圖文消息"){
OutNewsMsg>@Override
protected void processInMenuEvent(InMenuEvent inMenuEvent) {
String eventKey = inMenuEvent.getEventKey();
// 根據(jù)用戶發(fā)送的content去查詢db中的響應(yīng)內(nèi)容
if("文本消息"){
OutTextMsg otm = new OutTextMsg(inMenuEvent);
otm.setContent("消息內(nèi)容");
render(otm);
return;
}else if("圖片消息"){
OutImageMsg oim = new OutImageMsg(inMenuEvent);
// 這里需要調(diào)用微信提供的素材接口,將圖片上傳至素材庫。
oim.setMediaId("圖片素材id");
render(oim);
return;
}else if("圖文消息"){
OutNewsMsg>
如果需要配置多個白名單ip,使用回車鍵將多個ip分隔開。
mica-weixin
提供了所有的接口封裝,具體可參考它的官方文檔,如果要獲取微信菜單,可以這樣寫:
@WxApi("weixin/api")
public class WeiXinApiController {
@GetMapping("menu")
@ResponseBody
public String getMenu(){
ApiResult menu = MenuApi.getMenu();
return menu.getJson();
}
}
@WxApi
這個是它的自定義注解,其實就是包含了@RequestMapping
和@Controller
。
四 其他事項
4.1 多公眾號配置
mica-weixin
提供了多公眾號配置的功能,使用ThreadLocal
和appid
進(jìn)行綁定。只需要簡單配置即可實現(xiàn)多公眾號配置。
dream:
weixin:
wx-configs:
- appId: xxxxxx
appSecret: xxxxxx
token: javatrip
encodingAesKey: xxxxxx
- appId: xxxxxx
appSecret: xxxxxx
token: javatrip
encodingAesKey: xxxxxx
4.2 redis配置
access_token
的有效期是2小時,并且該接口有調(diào)用次數(shù)限制,mica-weixin
將access_token
存儲在redis中,避免每次調(diào)用接口都去獲取access-token
,因此項目需要配置redis。
spring:
redis:
host: localhost
port: 6379
4.3 手動選擇ThreadLocal
如果想要開發(fā)微信公眾號的后臺管理功能,多公眾號的時候就需要手動去指定當(dāng)前線程使用哪個公眾號信息。如下:
ApiConfigKit.setThreadLocalAppId(appid);
至此,SpringBoot開發(fā)微信公眾號就算完成了,由于訂閱號開放的接口太少了,好多功能不能正常演示。還有mica-weixin
也許不是最好的選擇,如果想試著開發(fā)微信公眾號,可以在github上找一下開發(fā)包。至于我為什么會使用mica-weixin
,是因為我曾用過一段時間的jfinal
框架,與之配套的微信開發(fā)包就是jfinal-weixin
,也就是jfinal版的mica-weixin
。
相關(guān)案例查看更多
相關(guān)閱讀
- 昆明小程序代建
- 網(wǎng)站排名
- 網(wǎng)站建設(shè)百度官方
- python開發(fā)小程序
- 汽車回收管理系統(tǒng)
- 區(qū)塊鏈
- 網(wǎng)絡(luò)公司
- 前端
- web服務(wù)
- 網(wǎng)絡(luò)公司聯(lián)系方式
- 開發(fā)微信小程序
- 網(wǎng)站建設(shè)哪家強
- 北京小程序開發(fā)
- 報廢車回收管理系統(tǒng)
- 云南軟件開發(fā)
- 云南網(wǎng)站建設(shè)列表網(wǎng)
- vue開發(fā)小程序
- 企業(yè)網(wǎng)站
- 網(wǎng)絡(luò)公司電話
- 云南小程序開發(fā)
- 大理網(wǎng)站建設(shè)公司
- 小程序退款
- 昆明網(wǎng)絡(luò)公司
- 云南網(wǎng)站建設(shè)報價
- 云南網(wǎng)站建設(shè)方案 doc
- 云南網(wǎng)站建設(shè)百度官方
- painter
- 云南小程序開發(fā)公司推薦
- 做網(wǎng)站
- 制作一個小程序