淺析微信公眾號訂閱消息開發流程


  官方文檔:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html

1、登錄公眾號管理平台:廣告與服務 - 模板消息

  在這里需要添加“消息模板”(這里是需要拿到模板 id 的),以及查看“模板消息接口文檔”,根據文檔去做后台開發即可。

  模板庫里沒有合適的模板時,需要自己新建,等待審核周期有點長,7-15天,所以需要提前申請模板

2、前提條件:

(1)用戶需關注了你的微信公眾號

(2)你有用戶的 openId

3、如何確定發送給哪些人?

(1)如果你有關聯性的成員,比如問題,需要發送給該問題領域的技術專家去回答,那就直接取關聯的該領域的技術專家的 users 去遍歷發送訂閱消息即可

(2)如果沒有關聯性的成員,比如資訊或每日一題,怎么辦呢?

  1. 可以在頁面放置微信公眾號的二維碼,讓用戶去掃碼

  2. 掃碼進入公眾號,關注后,自動回復快捷鏈接

  3. 點擊訂閱數據庫每日一題,即可進入每日一題頁面,給予按鈕進行訂閱(訂閱后在表里存儲訂閱的哪些用戶即可,在發送訂閱消息時,從這些用戶里去取即可)

4、具體開發步驟:

(1)Controller 層:聲明接口

@ApiOperation("發送每日一題微信提醒") @PreAuthorize("hasRole('sys')") @PostMapping("/dailys/{dailyId}/remind") public OperationInfo remindDaily(@PathVariable Integer dailyId) throws EmcsCustomException {   dailyService.sendWxRemind(dailyId);   return OperationInfo.success("發送訂閱消息成功"); }

(2)異步遍歷訂閱用戶發送消息提醒

@Async public void sendWxRemind(Integer dailyId) throws EmcsCustomException {
  ......   //獲取訂閱用戶   List<User> users = getSubscribedUsers();   if (users == null || users.isEmpty()) {     log.error("每日一題訂閱用戶為空");     return;   }   users.forEach(user-> {     wxService.sendLessonRemind(user, "每日一題更新啦", title, startTime, "點擊查看或退訂", null, pagePath);   }); }

(3)如何發送,看文檔即可,比如這樣

public void sendEventStartRemind(User user, String title, String name, String time, String comment, String url) {   ......   requestBody.put("template_id", "第一步的模板ID");   requestBody.put("url", url);   requestBody.put("data", data);   String accessToken = getAccessToken(WxPublicConfig.getInstance()).getAccess_token();   wechatApi.sendPublicTemplateMessage(accessToken, requestBody); }

  這里比較重要的是第一步的模板id,以及 accessToken 的獲取,也有文檔

    /** * 獲取微信token, 公眾號,開放號,小程序 */
    private WxTokenVO getAccessToken(IWxConfig config) { WxTokenVO token = wechatApi.getAccessToken(config.getAppID(), config.getAppSecret()); if (token.getErrcode() != null && token.getErrcode() != 0) { log.error("獲取微信賬戶token異常: {}, code: {}, message: {}", config.getAppID(), token.getErrcode(), token.getErrmsg()); } log.info("獲取{}token: {}", config.getAppID(), JSON.toJSONString(token)); return token; }

  下面就是按文檔用 OpenFeign 請求微信提供的接口去做對應事情即可,如這樣:

@FeignClient(name = "wechatApi", url = "https://api.weixin.qq.com") public interface WechatApi { /** * 獲取微信賬號access token, 公眾賬號,開放賬號,小程序賬號 * https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
     */ @RequestLine("GET /cgi-bin/token?grant_type=client_credential&appid={appId}&secret={appSecret}") WxTokenVO getAccessToken(@Param("appId") String appId, @Param("appSecret") String appSecret);/** * 發送微信公眾號模板消息 * https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html
     */ @RequestLine("POST /cgi-bin/message/template/send?access_token={accessToken}") @Body("body") void sendPublicTemplateMessage(@Param("accessToken") String accessToken, JSONObject body); }

5、接收微信服務器返回

  如果需要接收微信服務器的返回,然后根據發送消息是否發送成功,然后做一些自己的相關業務的話,就需要填寫這個回調地址(你可以把它理解為一個 api 接口,該接口必須是 public 完全公開的,這是供微信服務器去回調的)。

  在微信公眾管理平台:設置與開發 -  基本配置 - 服務器配置,這里去進行回調地址配置。

  具體如何做,看官方文檔:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html,這里需要注意的是第二步:需要驗證消息的確來自微信服務器,驗證成功之后才能去做自己平台相關的業務邏輯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM