使用公眾號的消息模板給關注用戶發消息

🧑 博主簡介:CSDN博客專家歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/?__c=1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,精通Java編程高并發設計Springboot和微服務,熟悉LinuxESXI虛擬化以及云原生Docker和K8s,熱衷于探索科技的邊界,并將理論知識轉化為實際應用。保持對新技術的好奇心,樂于分享所學,希望通過我的實踐經歷和見解,啟發他人的創新思維。在這里,我希望能與志同道合的朋友交流探討,共同進步,一起在技術的世界里不斷學習成長。
技術合作請加本人wx(注明來自csdn):foreast_sea

在這里插入圖片描述

在這里插入圖片描述


在Java中對接微信公眾號并向指定關注用戶發送消息,主要依賴微信公眾號的消息模板功能。以下是關鍵步驟和代碼實現:


?? 一、核心前提條件

  1. 公眾號類型:需服務號或認證后的訂閱號(個人可用測試號)。
  2. 用戶關注:目標用戶必須已關注公眾號。
  3. 獲取用戶OpenID:每個用戶有唯一OpenID(通過網頁授權或后臺接口獲取)。
  4. 消息模板:在公眾號后臺申請模板消息,獲取template_id

🔧 二、開發步驟與Java代碼實現

1. 服務器URL驗證(首次配置必做)

微信通過GET請求驗證服務器有效性,需實現校驗邏輯:

@WebServlet("/wx")
public class WxServlet extends HttpServlet {private static final String TOKEN = "your_token"; // 與公眾號配置的Token一致protected void doGet(HttpServletRequest request, HttpServletResponse response) {String signature = request.getParameter("signature");String timestamp = request.getParameter("timestamp");String nonce = request.getParameter("nonce");String echostr = request.getParameter("echostr");// 1. 排序并拼接Token、timestamp、nonceString[] arr = {TOKEN, timestamp, nonce};Arrays.sort(arr);String concatStr = String.join("", arr);// 2. SHA1加密String sha1 = DigestUtils.sha1Hex(concatStr); // Apache Commons Codec// 3. 校驗簽名if (sha1.equals(signature)) {response.getWriter().print(echostr); // 返回echostr表示驗證成功}}
}

注意:需使用內網穿透工具(如cpolar、natapp)將本地服務暴露為公網URL,供微信訪問。


2. 獲取Access Token

調用微信API獲取接口憑證(有效期2小時,需緩存):

public String getAccessToken() throws IOException {String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential"+ "&appid=APPID&secret=APPSECRET"; // 替換為實際AppID和AppSecretHttpClient client = HttpClient.newHttpClient();HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url)).build();HttpResponse<String> response = client.send(request, BodyHandlers.ofString());JSONObject json = new JSONObject(response.body());return json.getString("access_token"); // 返回Token
}

優化:使用Redis緩存Token,避免頻繁調用。


3. 發送模板消息

構造JSON請求體,調用微信消息接口:

public void sendTemplateMessage(String openid, String templateId) throws IOException {// 1. 準備消息數據Map<String, Object> data = new HashMap<>();data.put("first", Map.of("value", "訂單通知", "color", "#173177"));data.put("orderNo", Map.of("value", "202408051234"));data.put("status", Map.of("value", "已發貨"));// 2. 構造完整請求體JSONObject body = new JSONObject();body.put("touser", openid);body.put("template_id", templateId);body.put("url", "https://yourdomain.com/order"); // 用戶點擊跳轉鏈接body.put("data", data);// 3. 調用接口String apiUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + getAccessToken();HttpClient client = HttpClient.newHttpClient();HttpRequest request = HttpRequest.newBuilder().uri(URI.create(apiUrl)).header("Content-Type", "application/json").POST(HttpRequest.BodyPublishers.ofString(body.toString())).build();HttpResponse<String> response = client.send(request, BodyHandlers.ofString());System.out.println("發送結果:" + response.body()); // 解析errcode判斷成功與否
}

表:模板消息參數說明

參數必填說明
touser用戶OpenID(如oOM-e52ersdi7a4wZTOQHUQOwGuw
template_id模板ID(如AYZc280-hh7QeO5eM8Usl7SlD5wzQ_I8tQq1e9HlmhQ
data模板內容,需與申請模板時的關鍵詞匹配(如firstorderNo等)
url用戶點擊消息后跳轉的鏈接

?? 三、注意事項與常見問題

  1. 消息類型限制

    • 模板消息:適用于業務通知(如訂單狀態),需用戶觸發交互后7天內發送。
    • 客服消息:用戶主動發送消息后48小時內可任意回復(無需模板)。
    • 表:消息類型對比
      特性模板消息客服消息
      發送條件需用戶觸發交互用戶主動發消息后
      時效性7天內48小時內
      內容格式固定模板自由文本/圖文
  2. 調試工具

    • 測試號申請:微信公眾平臺測試賬號。
    • 內網穿透工具:cpolar(穩定)或natapp(免費)。
  3. 錯誤碼處理

    • 40001:Access Token無效 → 重新獲取。
    • 41028:FormID失效 → 檢查用戶交互是否超期。
    • 完整錯誤碼:微信全局錯誤碼文檔。

🚀 四、進階優化建議

  1. 使用SDK簡化開發
    推薦WxJava封裝底層請求:

    // 示例:WxJava發送模板消息
    WxMpService wxService = new WxMpServiceImpl();
    wxService.setWxMpConfigStorage(new WxMpInMemoryConfigStorage()); // 設置AppID/Secret
    WxMpTemplateMessage message = WxMpTemplateMessage.builder().toUser(openid).templateId(templateId).build();
    message.addData(new WxMpTemplateData("status", "已完成"));
    wxService.getTemplateMsgService().sendTemplateMsg(message);
    
  2. 消息安全與性能

    • Token管理:使用Redis緩存Access Token,定時刷新避免超限(每日2000次)。
    • 異步發送:將消息發送任務放入線程池,避免阻塞主業務邏輯。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917715.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917715.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917715.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【盤古100Pro+開發板實驗例程】FPGA學習 | 3X3圖像矩陣生成 | 圖像實驗指導手冊

本原創文章由深圳市小眼睛科技有限公司創作&#xff0c;版權歸本公司所有&#xff0c;如需轉載&#xff0c;需授權并注明出處&#xff08;www.meyesemi.com) 1. 實驗簡介 實驗目的&#xff1a; 實現 3X3 圖像矩陣對應 9 個像素點圖像數據的讀取。 實驗環境&#xff1a; Wind…

【通用視覺框架】基于OpenCvSharp+WPF+YOLO開發的仿VisionMaster的通用視覺框架軟件,全套源碼,開箱即用

【通用視覺框架】基于OpenCvSharpWPFYOLO開發的仿VisionMaster的通用視覺框架軟件&#xff0c;全套源碼&#xff0c;開箱即用 基于OpenCvSharp、WPF和YOLO的組合&#xff0c;構建一個兼具圖像處理能力、可視化交互和實時檢測的工業級視覺框架。其核心是將底層算法與上層界面無…

微信小程序轉Vue2組件智能提示詞

角色 小程序轉Vue2組件工程師&#xff08;ElementUI專精&#xff09; 核心能力 技術專長&#xff1a;作為世界頂尖前端工程師&#xff0c;專注于將小程序組件&#xff08;.wxml/.wxss/.js/.json&#xff09;精準轉換為Vue2ElementUI組件&#xff0c;轉換邏輯零偏差&#xff0c;…

JVM 學習總結

文章目錄內存結構程序計數器什么是程序計數器&#xff1f;核心作用&#xff1a;為什么需要程序計數器&#xff1f;實現原理主要特點示例&#xff1a;PC 寄存器如何工作總結Java 虛擬機棧什么是 Java 虛擬機棧&#xff1f;棧幀的內部結構主要特點總結線程診斷本地方法棧堆堆內存…

目標檢測檢出率,誤檢率,ap,map等評估python代碼

1.deepseek版本import numpy as np from collections import defaultdictdef calculate_iou(box1, box2):"""計算兩個邊界框的交并比&#xff08;IoU&#xff09;:param box1: [x1, y1, x2, y2]:param box2: [x1, y1, x2, y2]:return: IoU"""# 計…

python的高校班級管理系統

前端開發框架:vue.js 數據庫 mysql 版本不限 后端語言框架支持&#xff1a; 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 數據庫工具&#xff1a;Navicat/SQLyog等都可以 在高校教…

Scrapy 工作流程深度解析:引擎驅動的完美協作

一、Scrapy 核心組件全景圖 #mermaid-svg-KWCKN9n4urijbSws {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-KWCKN9n4urijbSws .error-icon{fill:#552222;}#mermaid-svg-KWCKN9n4urijbSws .error-text{fill:#552222;…

PCIe Base Specification解析(七)

文章目錄3.6 Data Integrity Mechansisms3.6.1 Introduction3.6.2 LCRC, Sequence Number, and Retry Management (TLP Transmitter)3.6.2.1 LCRC and Sequence Number Rules (TLP Transmitter)3.6.2.2 Handling of Received DLLPs3.6.3 LCRC and Sequence Number (TLP Receive…

Windows 11 使用Windows Hello使用人臉識別登錄失敗,重新錄入人臉識別輸入PIN后報Windows Hello安裝程序白屏無響應的問題解決

Windows 11 使用Windows Hello使用人臉識別登錄失敗&#xff0c;重新錄入人臉識別輸入PIN后報Windows Hello安裝程序白屏無響應的問題解決&#xff1a;遇到此種情況時&#xff1a;1、在“開始”右鍵——設置——賬號——登錄選項2、需要在PIN這里先進行刪除此登錄選項&#xff…

qq scheme

QQ intent scheme跳轉 1.跳轉指定說說(root) 2.跳轉指定說說(非root) 3. 跳轉聊天框 4. 跳轉用戶主頁 5. 跳轉加群 6. 跳轉指定用戶空間 1.跳轉指定說說(root) 該方法需root權限 app.startActivity({className: "com.qzone.reborn.base.QZoneTransparentShellActivi…

C語言基礎_隨機數、數組、函數、指針

0、隨機數&#xff1a; 要用C語言產生隨機數&#xff0c;首先在預處理程序部分要引入stdlib.h頭文件&#xff0c;然后就可以用rand()在后續程序中生成隨機數了。如果不設置隨機數種子srand()&#xff0c;后面生成的隨機數序列就是以41開頭的一個固定序列&#xff0c;因此一般以…

PHP?ORT擴展構建純PHP機器學習的推薦系統

結合 PHP?ORT 構建推薦系統的核心思想是&#xff1a;使用 ONNX 格式的機器學習模型&#xff0c;在 PHP 中本地執行推理&#xff0c;實時給出推薦結果。下面是一個完整的架構設計與實現路徑&#xff0c;適合你快速上手。&#x1f3af; 場景目標 你想在一個 PHP 網站中實現推薦功…

PromptPilot搭配Doubao-seed-1.6:定制你需要的AI提示prompt

目錄 一、PromptPilot 二、基于產品評價的用戶情感分析 2.1 使用PromptPiolt工具進行提示詞生成 2.2 基于prompt的模型調試 2.3 基于prompt的批量數據測評 2.4 基于多輪對話的prompt測試 如今&#xff0c;我們正身處一個 AI 技術飛速迭代的時代。人工智能早已不再是實驗室…

MSPM0開發學習筆記:二維云臺結合openmv實現小球追蹤

文章目錄前言一、硬件選擇二、原理介紹&#xff08;UART&#xff09;三、硬件連線三、軟件代碼1、視覺部分代碼&#xff08;Openart&#xff09;2、控制部分代碼&#xff08;MSPM0&#xff09;&#xff08;1&#xff09; UART部分&#xff08;2&#xff09; 計算函數部分&#…

【CTF-WEB-SQL】SQL注入基本流程(sql-labs的Less11)(用burp抓取post然后用sqlmap盲注)

題目 從第11less開始&#xff0c;就是POST表單了burp抓取數據包將抓取到的數據包存放到桌面&#xff0c;保存為post.txt數據包內容如下&#xff1a;POST /Less-11/ HTTP/1.1 Host: 223.112.39.132:44537 Content-Length: 39 Cache-Control: max-age0 Accept-Language: zh-CN,zh…

WPF 與 Winform :Windows 桌面開發該用誰?

WPF 與 Winform :Windows 桌面開發該用誰? 一、 WPF 與 Winform的概念 WPF:顏值與實力并存的 “后起之秀” Winform:簡單直接的 “老前輩” 二、WPF 與 Winform 的核心差異 1. 設計理念:分離 vs 耦合 2. 布局系統:靈活適配 vs 固定坐標 3. 視覺效果:絢麗動畫 vs 樸素原生…

【Git學習】入門與基礎

目錄 Git的安裝 Git 配置用戶信息 Git 初始化本地倉庫 Git 工作區、暫存區和版本庫 Git 跟蹤文件 Git 修改文件 Git 刪除文件 Git 撤銷本地文件的修改 Git 取消暫存 Git 跳過暫存區 Git 版本回退 Git 撤銷提交 Git 設置忽略文件 Git 比較文件差異 Git 代碼托管平臺…

idea添加gitlab訪問令牌

1.按下圖所示順序操作gitlab,獲取到對應的token;2.填寫對應的gitlab地址和第一步獲取的token

人工智能領域、圖歐科技、IMYAI智能助手2025年5月更新月報

2025年5月IMYAI平臺技術動態與模型更新綜述 摘要&#xff1a; 本文整理了2025年5月期間IMYAI平臺發布的主要技術更新、新模型上線信息及功能調整公告&#xff0c;涵蓋DeepSeek、Gemini、Claude、即夢、Suno等模型動態及平臺功能優化。 正文&#xff1a; 一、 模型更新與上線Dee…

機器人權利:真實還是虛幻,機器人權利研究如何可能,道德權利與法律權利

一、機器人權利&#xff1a;真實還是虛幻&#xff1f;機器人權利的討論源于技術進步對傳統法律與倫理體系的沖擊&#xff0c;其真實性取決于技術發展階段與社會接受度的互動。當前&#xff0c;機器人權利仍呈現“虛幻與真實交織”的特征&#xff1a;技術基礎&#xff1a;從工具…