Java如何快速生成图文消息

在Java中创建图文消息,通常使用微信公众号开发框架或企业微信SDK,核心步骤:1. 构建Article对象数组;2. 设置标题、描述、图片URL和跳转链接;3. 通过NewsMessage类封装图文列表;4. 调用API发送消息,需依赖官方SDK处理消息组装和加密。

什么是图文消息?

图文消息是一种融合文字、图片、链接等元素的富媒体内容格式,常见于微信公众号、企业微信、钉钉等平台,用户可通过图文消息获取结构化信息(如新闻、产品介绍),通常包含标题、封面图、摘要和正文链接,在Java开发中,创建图文消息的核心是通过API调用平台接口,构建符合规范的JSON/XML数据并发送。

Java如何快速生成图文消息


创建图文消息的关键步骤(以微信公众号为例)

前置条件

  • 公众号权限:已认证的服务号,开通图文消息接口权限。
  • 访问令牌:通过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

Java如何快速生成图文消息

// 示例:上传图片
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"} 用于后续群发

技术栈与工具

  1. HTTP客户端
    • Spring Boot的RestTemplateWebClient
    • Apache HttpClient
  2. JSON处理
    • org.json.JSONObject(轻量级)
    • Jackson库(高性能)
  3. HTML内容生成
    • 使用Thymeleaf/Freemarker模板引擎动态生成
    • 手动拼接HTML字符串(简单场景)

注意事项安全**

  • 过滤用户输入的HTML标签(防止XSS攻击),推荐使用Jsoup:
    String safeHtml = Jsoup.clean(rawHtml, Safelist.basic());
  1. 性能优化
    • 复用access_token(避免频繁请求)
    • 图片压缩:封面图建议尺寸900×500像素,大小≤2MB
  2. 平台限制

    单次请求最多支持8条图文HTML长度不超过200KB

    Java如何快速生成图文消息

  3. 错误处理
    • 检查接口返回的errcode(如40014表示token失效)
    • 重试机制(网络超时场景)

完整流程总结

  1. 获取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实现。)

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/44641.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年7月3日 05:42
下一篇 2025年7月3日 05:50

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN