上一篇                     
               
			  Java如何快速生成图文消息
- 后端开发
- 2025-07-03
- 4932
 在Java中创建图文消息,通常使用微信公众号开发框架或企业微信SDK,核心步骤:1. 构建
 
 
Article对象数组;2. 设置标题、描述、图片URL和跳转链接;3. 通过
 NewsMessage类封装图文列表;4. 调用API发送消息,需依赖官方SDK处理消息组装和加密。
什么是图文消息?
图文消息是一种融合文字、图片、链接等元素的富媒体内容格式,常见于微信公众号、企业微信、钉钉等平台,用户可通过图文消息获取结构化信息(如新闻、产品介绍),通常包含标题、封面图、摘要和正文链接,在Java开发中,创建图文消息的核心是通过API调用平台接口,构建符合规范的JSON/XML数据并发送。
创建图文消息的关键步骤(以微信公众号为例)
前置条件
- 公众号权限:已认证的服务号,开通图文消息接口权限。
- 访问令牌:通过AppID和AppSecret获取access_token(有效期2小时)。// 示例:获取access_token String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; ResponseEntity<String> response = restTemplate.getForEntity(url, String.class); JSONObject json = new JSONObject(response.getBody()); String accessToken = json.getString("access_token");
构建图文消息JSON数据结构
微信公众号要求图文消息以JSON数组格式提交,每条图文包含6个必要字段:

{
  "articles": [
    {
      "title": "Java图文消息教程",
      "thumb_media_id": "封面图片MediaID",
      "author": "作者名",
      "digest": "摘要文本",
      "show_cover_pic": 1, // 是否显示封面图(0/1)
      "content": "正文HTML内容",
      "content_source_url": "原文链接"
    }
  ]
} 
上传封面图片获取MediaID
使用media/upload接口上传图片并获取thumb_media_id:
// 示例:上传图片
String uploadUrl = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=TOKEN&type=image";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("media", new FileSystemResource("cover.jpg")); // 封面图片文件
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(body, headers);
String result = restTemplate.postForObject(uploadUrl, request, String.class);
JSONObject jsonResult = new JSONObject(result);
String thumbMediaId = jsonResult.getString("media_id"); // 关键ID 
发送图文消息
调用material/add_news接口提交图文数据:

String apiUrl = "https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=" + accessToken;
JSONObject article = new JSONObject();
article.put("title", "Java图文消息教程");
article.put("thumb_media_id", thumbMediaId);
article.put("author", "TechAuthor");
article.put("digest", "学习使用Java创建微信公众号图文消息");
article.put("show_cover_pic", 1);
article.put("content", "<h1>正文标题</h1><p>使用HTML标签编写正文...</p>");
article.put("content_source_url", "https://example.com");
JSONArray articles = new JSONArray();
articles.put(article);
JSONObject requestBody = new JSONObject();
requestBody.put("articles", articles);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> request = new HttpEntity<>(requestBody.toString(), headers);
String response = restTemplate.postForObject(apiUrl, request, String.class);
// 响应示例:{"media_id":"NEWS_MEDIA_ID"} 用于后续群发 
技术栈与工具
- HTTP客户端 
  - Spring Boot的RestTemplate或WebClient
- Apache HttpClient
 
- Spring Boot的
- JSON处理 
  - org.json.JSONObject(轻量级)
- Jackson库(高性能)
 
- HTML内容生成 
  - 使用Thymeleaf/Freemarker模板引擎动态生成
- 手动拼接HTML字符串(简单场景)
 
注意事项安全**
- 过滤用户输入的HTML标签(防止XSS攻击),推荐使用Jsoup: String safeHtml = Jsoup.clean(rawHtml, Safelist.basic()); 
- 性能优化 
  - 复用access_token(避免频繁请求)
- 图片压缩:封面图建议尺寸900×500像素,大小≤2MB
 
- 复用
- 平台限制 单次请求最多支持8条图文HTML长度不超过200KB 
- 错误处理 
  - 检查接口返回的errcode(如40014表示token失效)
- 重试机制(网络超时场景)
 
- 检查接口返回的
完整流程总结
- 获取access_token→ 2. 上传封面图得thumb_media_id→ 3. 构建JSON请求体 → 4. 调用图文接口 → 5. 处理响应
最佳实践:生产环境建议封装图文消息工具类,集成Spring Boot Starter,通过配置中心管理AppID/Secret。
引用说明
- 微信公众号图文消息接口文档:微信官方文档
- JSON处理库:org.json
- HTML过滤工具:Jsoup
- Spring RestTemplate:Spring Framework Docs
 遵循微信公众号最新API规范,适用于2025年10月后的接口版本,代码示例基于Java 11+Spring Boot 3.x实现。)
 
 
 
			 
			 
			 
			 
			 
			 
			