SpringBoot開發微信公衆号 - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 公衆号相關 >

SpringBoot開發微信公衆号

發表時(shí)間:2020-9-20

發布人(rén):融晨科技

浏覽次數:77

在(zài)講微信公衆号開發之(zhī)前,先來(lái)大(dà)概了(le/liǎo)解一下微信公衆号。微信公衆号大(dà)體上(shàng)可以(yǐ)分爲(wéi / wèi)服務号和(hé / huò)訂閱号,訂閱号和(hé / huò)服務号的(de)區别如下:

  1. 服務号可以(yǐ)申請微信支付功能。

  2. 服務号隻能由企業申請,訂閱号可以(yǐ)由企業或個(gè)人(rén)申請。

  3. 訂閱号和(hé / huò)服務号每月推送消息次數不(bù)同,訂閱号每天可以(yǐ)推送一次,服務号每月可以(yǐ)推送四次。

  4. 服務号推送的(de)消息會出(chū)現在(zài)用戶的(de)聊天列表中,而(ér)訂閱号推送的(de)消息顯示在(zài)訂閱号文件夾中。

  5. 還有一些其他(tā)接口功能的(de)區别和(hé / huò)限制,總的(de)來(lái)說(shuō)服務号支持更高級的(de)功能開發。

訂閱号更加偏向于(yú)向用戶傳遞咨詢,一般各種技術類公衆号都屬于(yú)訂閱号,訂閱号的(de)消息推送并不(bù)會有太顯眼的(de)提醒,如果你想讓某個(gè)公衆号的(de)推送内容更加顯眼,可以(yǐ)選擇将公衆号置爲(wéi / wèi)星标。置爲(wéi / wèi)星标後公衆号會顯示在(zài)所有訂閱号的(de)最頂部,同時(shí)收到(dào)消息後會有黃色五角星星标提醒。

一 公衆号配置服務器

微信官方提供了(le/liǎo)非常完善的(de)接入文檔,如果想了(le/liǎo)解文檔的(de)具體内容,直接浏覽器搜索微信開發文檔就(jiù)可以(yǐ)了(le/liǎo)。但是(shì)爲(wéi / wèi)了(le/liǎo)方便開發,一般不(bù)會直接去根據微信開發文檔進行開發,github上(shàng)有許多開源項目對微信開發文檔進行了(le/liǎo)封裝,這(zhè)裏我使用mica-weixin開發包進行演示,mica-weixin是(shì)jfinal-weixin的(de)boot版本。

配置服務器信息很簡單,具體流程就(jiù)是(shì)微信服務發送請求一個(gè)請求給業務服務器,業務服務器驗證請求後給微信服務一個(gè)響應

1.1 搭建業務服務

本地(dì / de)搭建一個(gè)spring-boot-weixin的(de)項目,使用内網穿透工具進行穿透,使其可以(yǐ)與外網進行通信。

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通過配置文件進行公衆号信息的(de)配置,如果你想通過數據庫配置公衆号信息,可以(yǐ)參考我以(yǐ)前寫過的(de)一篇文章jfinal-weixin自定義配置支持多公衆号。

dream:
  weixin:
    wx-configs:
    - appId: xxxxxx
      appSecret: xxxxxx
      token: javatrip
      encodingAesKey: xxxxxx

appId和(hé / huò)appSecret可在(zài)公衆号後台進行查看,具體位置在(zài)菜單開發—>基本配置中,其中appSecret要(yào / yāo)妥善保管,現在(zài)公衆号已經不(bù)支持查看appSecret了(le/liǎo),如果你忘了(le/liǎo)appSecret,隻能進行重置。

1.1.3 開發消息校驗接口

mica-weixin已經爲(wéi / wèi)我們提供好了(le/liǎo)消息校驗接口,隻需要(yào / yāo)繼承DreamMsgControllerAdapter就(jiù)可以(yǐ)了(le/liǎo)。

@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) {
    }
}

同時(shí),需要(yào / yāo)開啓緩存,由于(yú)mica-weixin的(de)将access_token等信息放在(zài)了(le/liǎo)緩存中。在(zài)啓動類上(shàng)加@EnableCaching就(jiù)開啓了(le/liǎo)。

@SpringBootApplication
@EnableCaching
public class WeixinApplication {
    public static void main(String[] args) {
        SpringApplication.run(WeixinApplication.class, args);
    }
}

1.1.4 公衆号後台配置服務器信息

使用内網穿透工具穿透内網地(dì / de)址,然後在(zài)公衆号後台菜單開發—>基本配置中填寫服務器配置信息。

填寫完成後點擊啓用,這(zhè)樣就(jiù)完成了(le/liǎo)微信服務器和(hé / huò)業務服務器的(de)關系配置。開啓開發者配置後,自動回複、自定義菜單等功能都不(bù)能正常使用了(le/liǎo)。這(zhè)時(shí)候就(jiù)需要(yào / yāo)去調用對應的(de)接口實現這(zhè)些功能。

二 實現各種消息接口

2.1 關注消息

在(zài)一步中,自定義類WeiXinMsgController中需要(yào / yāo)重寫三個(gè)父類中的(de)方法,其中processInFollowEvent()就(jiù)是(shì)關注和(hé / huò)取消關注的(de)方法,取消關注後用戶雖然不(bù)能收到(dào)消息,但是(shì)後台可以(yǐ)接收到(dào)用戶取消關注的(de)事件。

@Override
protected void processInFollowEvent(InFollowEvent inFollowEvent) {

    OutTextMsg defaultMsg = new OutTextMsg(inFollowEvent);
    // 關注
    if(InFollowEvent.EVENT_INFOLLOW_SUBSCRIBE.equals(inFollowEvent.getEvent())){
        // 可将關注用戶錄入db,此處可以(yǐ)獲取到(dào)用戶openid
        String openId = inFollowEvent.getFromUserName();
        // 查詢db,根據響應消息類型封裝消息體
        if("文本消息"){
            OutTextMsg otm = new OutTextMsg(inFollowEvent);
            otm.setContent("消息内容");
            render(otm);
            return;
        }else if("圖片消息"){
            OutImageMsg oim = new OutImageMsg(inFollowEvent);
            // 這(zhè)裏需要(yào / yāo)調用微信提供的(de)素材接口,将圖片上(shàng)傳至素材庫。
            oim.setMediaId("圖片素材id");
            render(oim);
            return;
        }else if("圖文消息"){
            OutNewsMsg>@Override
protected void processInTextMsg(InTextMsg inTextMsg) {

    String content = inTextMsg.getContent();
    // 根據用戶發送的(de)content去查詢db中的(de)響應内容
    if("文本消息"){
        OutTextMsg otm = new OutTextMsg(inTextMsg);
        otm.setContent("消息内容");
        render(otm);
        return;
    }else if("圖片消息"){
        OutImageMsg oim = new OutImageMsg(inTextMsg);
        // 這(zhè)裏需要(yào / yāo)調用微信提供的(de)素材接口,将圖片上(shàng)傳至素材庫。
        oim.setMediaId("圖片素材id");
        render(oim);
        return;
    }else if("圖文消息"){
        OutNewsMsg>@Override
protected void processInMenuEvent(InMenuEvent inMenuEvent) {
    String eventKey = inMenuEvent.getEventKey();
    // 根據用戶發送的(de)content去查詢db中的(de)響應内容
    if("文本消息"){
        OutTextMsg otm = new OutTextMsg(inMenuEvent);
        otm.setContent("消息内容");
        render(otm);
        return;
    }else if("圖片消息"){
        OutImageMsg oim = new OutImageMsg(inMenuEvent);
        // 這(zhè)裏需要(yào / yāo)調用微信提供的(de)素材接口,将圖片上(shàng)傳至素材庫。
        oim.setMediaId("圖片素材id");
        render(oim);
        return;
    }else if("圖文消息"){
        OutNewsMsg>
 

如果需要(yào / yāo)配置多個(gè)白名單ip,使用回車鍵将多個(gè)ip分隔開。

mica-weixin提供了(le/liǎo)所有的(de)接口封裝,具體可參考它的(de)官方文檔,如果要(yào / yāo)獲取微信菜單,可以(yǐ)這(zhè)樣寫:

@WxApi("weixin/api")
public class WeiXinApiController {
    @GetMapping("menu")
    @ResponseBody
    public String getMenu(){
        ApiResult menu = MenuApi.getMenu();
        return menu.getJson();
    }
}

@WxApi這(zhè)個(gè)是(shì)它的(de)自定義注解,其實就(jiù)是(shì)包含了(le/liǎo)@RequestMapping和(hé / huò)@Controller

四 其他(tā)事項

4.1 多公衆号配置

mica-weixin提供了(le/liǎo)多公衆号配置的(de)功能,使用ThreadLocal和(hé / huò)appid進行綁定。隻需要(yào / yāo)簡單配置即可實現多公衆号配置。

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的(de)有效期是(shì)2小時(shí),并且該接口有調用次數限制,mica-weixinaccess_token存儲在(zài)redis中,避免每次調用接口都去獲取access-token,因此項目需要(yào / yāo)配置redis。

spring:
  redis:
    host: localhost
    port: 6379

4.3 手動選擇ThreadLocal

如果想要(yào / yāo)開發微信公衆号的(de)後台管理功能,多公衆号的(de)時(shí)候就(jiù)需要(yào / yāo)手動去指定當前線程使用哪個(gè)公衆号信息。如下:

ApiConfigKit.setThreadLocalAppId(appid);

至此,SpringBoot開發微信公衆号就(jiù)算完成了(le/liǎo),由于(yú)訂閱号開放的(de)接口太少了(le/liǎo),好多功能不(bù)能正常演示。還有mica-weixin也(yě)許不(bù)是(shì)最好的(de)選擇,如果想試着開發微信公衆号,可以(yǐ)在(zài)github上(shàng)找一下開發包。至于(yú)我爲(wéi / wèi)什麽會使用mica-weixin,是(shì)因爲(wéi / wèi)我曾用過一段時(shí)間的(de)jfinal框架,與之(zhī)配套的(de)微信開發包就(jiù)是(shì)jfinal-weixin,也(yě)就(jiù)是(shì)jfinal版的(de)mica-weixin

相關案例查看更多