java微信素材编辑_Java微信公众平台开发之素材管理(Spring Boot 2.X)
微信素材管理和群发这块文档对Java很不友好。本文只对新增临时素材,新增永久素材做介绍,其余获取、删除、修改自行补充
公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来进行的。素材管理接口对所有认证的订阅号和服务号开放。
素材的限制
图片(image): 2M,支持PNG\JPEG\JPG\GIF格式
语音(voice):2M,播放长度不超过60s,支持AMR\MP3格式
视频(video):10MB,支持MP4格式
缩略图(thumb):64KB,支持JPG格式
一、新增临时素材
接口:https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE,再传一个媒体文件类型,可以是图片(image)、语音(voice)、视频(video)和缩略图(thumb)。
1、订阅号和服务号要通过认证
2、临时素材media_id是可复用的
3、媒体文件在微信后台保存时间为3天,即3天后media_id失效。
/**
* 新增临时素材(本地)
*
* @param accessToken
* @param type 媒体文件类型,分别有图片(image)、语音(voice)、(video)和缩略图(thumb)
* @param filePath 本地路径
* @return
*/
@Override
public MaterialResult uploadTempMediaFile(String accessToken, String type, String filePath) {
Map params = new HashMap<>();
params.put("access_token", accessToken);
params.put("type", type);
try {
String result = MaterialUtil.uploadMediaFile(wechatMaterialConfig.getUploadTempMediaUrl(), params, filePath);
return JsonUtil.fromJson(result, MaterialResult.class);
} catch (Exception e) {
log.error(e.getMessage());
}
return null;
}
/**
* 新增临时素材(网络)
*
* @param accessToken
* @param type 媒体文件类型,分别有图片(image)、语音(voice)、(video)和缩略图(thumb)
* @param url 网络路径
* @return
*/
@Override
public MaterialResult uploadTempMediaUrl(String accessToken, String type, String url) {
Map params = new HashMap<>();
params.put("access_token", accessToken);
params.put("type", type);
try {
String result = MaterialUtil.uploadMediaUrl(wechatMaterialConfig.getUploadTempMediaUrl(), params, url);
return JsonUtil.fromJson(result, MaterialResult.class);
} catch (Exception e) {
log.error(e.getMessage());
}
return null;
}
二、新增永久素材
接口:https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE,媒体文件类型,分别有图片(image)、语音(voice)、视频(video,例外)和缩略图(thumb)
/**
* 新增永久素材(本地)
*
* @param accessToken
* @param type 媒体文件类型,分别有图片(image)、语音(voice)和缩略图(thumb)
* @param filePath 本地路径
* @return
*/
@Override
public MaterialResult uploadForeverMediaFile(String accessToken, String type, String filePath) {
Map params = new HashMap<>();
params.put("access_token", accessToken);
params.put("type", type);
try {
String result = MaterialUtil.uploadMediaFile(wechatMaterialConfig.getUploadForeverMediaUrl(), params, filePath);
return JsonUtil.fromJson(result, MaterialResult.class);
} catch (Exception e) {
log.error(e.getMessage());
}
return null;
}
/**
* 新增永久素材(网络)
*
* @param accessToken
* @param type 媒体文件类型,分别有图片(image)、语音(voice)和缩略图(thumb)
* @param url 网络路径
* @return
*/
@Override
public MaterialResult uploadForeverMediaUrl(String accessToken, String type, String url) {
Map params = new HashMap<>();
params.put("access_token", accessToken);
params.put("type", type);
try {
String result = MaterialUtil.uploadMediaUrl(wechatMaterialConfig.getUploadForeverMediaUrl(), params, url);
return JsonUtil.fromJson(result, MaterialResult.class);
} catch (Exception e) {
log.error(e.getMessage());
}
return null;
}
新增永久视频素材需特别注意,在上传视频素材时需要POST另一个表单,id为description,包含素材的描述信息title和introduction,内容格式为JSON
/**
* 上传本地video永久素材
* 返回格式
* {
* "media_id":MEDIA_ID
* }
*
* @param accessToken
* @param title 视频素材的标题
* @param introduction 视频素材的描述
* @param filePath 本地路径
* @return
*/
@Override
public String uploadForeverMediaFile(String accessToken, String title, String introduction, String filePath) {
//只能是mp4的
Map params = new HashMap<>();
params.put("access_token", accessToken);
params.put("type", WechatMaterialConstant.MATERIAL_UPLOAD_TYPE_VIDEO);
try {
String result = MaterialUtil.uploadVideoMediaFile(wechatMaterialConfig.getUploadForeverMediaUrl(),
params, filePath, title, introduction);
return JsonUtil.fromJson(result, MaterialResult.class).getMediaId();
} catch (Exception e) {
log.error(e.getMessage());
}
return null;
}
/**
* 上传网络video永久素材
* 返回格式
* {
* "media_id":MEDIA_ID
* }
*
* @param accessToken
* @param title 视频素材的标题
* @param introduction 视频素材的描述
* @param url 网络路径
* @return
*/
@Override
public String uploadForeverMediaUrl(String accessToken, String title, String introduction, String url) {
//只能是mp4的
Map params = new HashMap<>();
params.put("access_token", accessToken);
params.put("type", WechatMaterialConstant.MATERIAL_UPLOAD_TYPE_VIDEO);
try {
String result = MaterialUtil.uploadVideoMediaUrl(wechatMaterialConfig.getUploadForeverMediaUrl(),
params, url, title, introduction);
// log.error(result);
return JsonUtil.fromJson(result, MaterialResult.class).getMediaId();
} catch (Exception e) {
log.error(e.getMessage());
}
return null;
}
三、新增永久图文素材
接口:https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=ACCESS_TOKEN
对于常用的素材,开发者可通过本接口上传到微信服务器,永久使用.
1、永久图片素材新增后,将带有URL返回给开发者,开发者可以在腾讯系域名内使用(腾讯系域名外使用,图片将被屏蔽)。
2、公众号的素材库保存总数量有上限:图文消息素材、图片素材上限为5000,其他类型为1000。
3、图文消息的具体内容中,微信后台将过滤外部的图片链接,图片url需通过"上传图文消息内的图片获取URL"接口上传图片获取。
4、"上传图文消息内的图片获取URL"接口所上传的图片,不占用公众号的素材库中图片数量的5000个的限制,图片仅支持jpg/png格式,大小必须在1MB以下。
5、图文消息支持正文中插入自己帐号和其他公众号已群发文章链接的能力。
/**
* 新增永久图文素材
* 返回示例
* {
* "media_id":MEDIA_ID
* }
* 活得新增的图文消息素材的media_id
*
* @param accessToken
* @param entity 图文消息article组合的data
* @return
* @see WechatMassService#uploadForMassNewsFile
*/
@Override
public String uploadNewsMedia(String accessToken, UploadNewsEntity entity) {
Map params = new HashMap<>();
params.put("access_token", accessToken);
String data = JsonUtil.toJson(entity);
String result = HttpUtil.doPost(wechatMaterialConfig.getAddNewsUrl(), params, data);
return JsonUtil.fromJson(result, MassNewsResult.class).getMediaId();
}
四、上传图文消息内的图片获取URL
接口:https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN
本接口所上传的图片不占用公众号的素材库中图片数量的5000个的限制。图片仅支持jpg/png格式,大小必须在1MB以下,此接口返回的url就是上传图片的URL,可放置图文消息中使用。
/**
* {
* "url": "http://mmbiz.qpic.cn/mmbiz/gLO17UPS6FS2xsypf378iaNhWacZ1G1UplZYWEYfwvuU6Ont96b1roYs CNFwaRrSaKTPCUdBK9DgEHicsKwWCBRQ/0"
* }
* 图文消息的具体内容中,微信后台将过滤外部的图片链接,图片url需通过"上传图文消息内的图片获取URL"接口上传图片获取
* 获取
*
* @param accessToken
* @param filePath 本地路径
* @return
*/
@Override
public String uploadFileForNewsMedia(String accessToken, String filePath) {
Map params = new HashMap<>();
params.put("access_token", accessToken);
try {
String result = MaterialUtil.uploadMediaFile(wechatMaterialConfig.getUploadimgMediaUrl(), params, filePath);
return JsonUtil.fromJson(result, MaterialResult.class).getUrl();
} catch (Exception e) {
log.error(e.getMessage());
}
return null;
}
/**
* {
* "url": "http://mmbiz.qpic.cn/mmbiz/gLO17UPS6FS2xsypf378iaNhWacZ1G1UplZYWEYfwvuU6Ont96b1roYs CNFwaRrSaKTPCUdBK9DgEHicsKwWCBRQ/0"
* }
* 图文消息的具体内容中,微信后台将过滤外部的图片链接,图片url需通过"上传图文消息内的图片获取URL"接口上传图片获取
* 获取
*
* @param accessToken
* @param url 网络路径
* @return
*/
@Override
public String uploadUrlForNewsMedia(String accessToken, String url) {
Map params = new HashMap<>();
params.put("access_token", accessToken);
try {
String result = MaterialUtil.uploadMediaUrl(wechatMaterialConfig.getUploadimgMediaUrl(), params, url);
return JsonUtil.fromJson(result, MaterialResult.class).getUrl();
} catch (Exception e) {
log.error(e.getMessage());
}
return null;
}
五、Junit测试
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = WechatMainApplication.class)
@ActiveProfiles("dev")
public class WechatMaterialServiceImplTest {
@Autowired
private WechatAuthService wechatAuthService;
@Autowired
private WechatMaterialService wechatMaterialService;
@Test
public void uploadTempMediaFile() {
String filePath = "C:/Users/Phil/Pictures/cc0a42661f668d17e18d0a0f3a699909.jpeg";
String accessToken = wechatAuthService.getAccessToken();
System.out.println("新增临时本地图片素材,返回" + wechatMaterialService.uploadTempMediaFile(accessToken,
WechatMaterialConstant.MATERIAL_UPLOAD_TYPE_IMAGE, filePath));
//新增临时本地图片素材,返回MassNewsResult(type=image, mediaId=rh0D9L_B5Ty_-EcwIFULGjb57eCGAbQZRz8bNrWnfcLMiMz2Pm7vIQCdUKzC8C_8, createdAt=1543648966, url=null)
}
@Test
public void uploadTempMediaUrl() {
String url = "http://b-ssl.duitang.com/uploads/item/201503/14/20150314212812_kCLmy.jpeg";
String accessToken = wechatAuthService.getAccessToken();
System.out.println("新增临时网络图片素材,返回 " + wechatMaterialService.uploadTempMediaUrl(accessToken,
WechatMaterialConstant.MATERIAL_UPLOAD_TYPE_IMAGE, url));
//新增临时网络图片素材,返回 MassNewsResult(type=image, mediaId=lgbD-K0ltDTmsW2dSxus6sFxqqFc3mU_NiIAOev_U_mU2Yqa6iSv8KPF5e5WE7yC, createdAt=1543648973, url=null)
}
@Test
public void uploadForeverMediaFile() {
String filePath = "C:/Users/Phil/Pictures/cc0a42661f668d17e18d0a0f3a699909.jpeg";
String accessToken = wechatAuthService.getAccessToken();
System.out.println("新增永久本地图片素材,返回" + wechatMaterialService.uploadForeverMediaFile(accessToken,
WechatMaterialConstant.MATERIAL_UPLOAD_TYPE_IMAGE, filePath));
//新增永久本地图片素材,返回MassNewsResult(type=null, mediaId=tbP52CbH1vuCLlyUAt2rlUEZKK230SjWIaB9xablAPw, createdAt=0, url=http://mmbiz.qpic.cn/mmbiz_jpg/L8zibbZGicwDyd6CV9JpbEe6T7rjqK2fBibCrZAxEvwDCJKHAgtfUialcnNlcjxTsAmycHSKjrO6KzdDUMeDwhYsIA/0?wx_fmt=jpeg)
}
@Test
public void uploadForeverMediaUrl() {
String url = "http://www.59xihuan.cn/uploads/allimg/201309/9181378183464-lp.jpg";
// String url = "http://b-ssl.duitang.com/uploads/item/201503/14/20150314212812_kCLmy.jpeg";
String accessToken = wechatAuthService.getAccessToken();
System.out.println("新增永久网络图片素材, 返回" + wechatMaterialService.uploadForeverMediaUrl(accessToken,
WechatMaterialConstant.MATERIAL_UPLOAD_TYPE_IMAGE, url));
//新增永久网络图片素材, 返回MassNewsResult(type=null, mediaId=GG16CzQSj3di2OTScAcNAzmoxg_5_KTyxsJ6uEEBpiM, createdAt=0, url=http://mmbiz.qpic.cn/mmbiz_jpg/3WjFdhSpzNwwEwTpWMU4j8UVddOSDGR2zRuJsQZXaRYnsIB3g4yESBqjxkf1e7ruIWYfUO5FtRWIibaVwt6icOHw/0?wx_fmt=jpeg)
}
@Test
public void uploadNewsMedia() {
String accessToken = wechatAuthService.getAccessToken();
UploadNewsEntity entity = new UploadNewsEntity();
UploadNewsEntity.UploadNewsArticle article1 = new UploadNewsEntity.UploadNewsArticle();
article1.setThumbMediaId("tbP52CbH1vuCLlyUAt2rlWEIB6qGsfypnI01Jwwonjg");
article1.setAuthor("article1");
article1.setTitle("article1");
article1.setContentSourceUrl("");
article1.setContent("article1");
article1.setDigest("article1");
article1.setShowConverPic(1);
entity.addArticle(article1);
UploadNewsEntity.UploadNewsArticle article2 = new UploadNewsEntity.UploadNewsArticle();
article2.setThumbMediaId("tbP52CbH1vuCLlyUAt2rlRjbl4sO2dPYqvCLZNwIorg");
article2.setAuthor("article2");
article2.setTitle("article2");
article2.setContentSourceUrl("");
article2.setContent("article2");
article2.setDigest("article2");
article2.setShowConverPic(0);
entity.addArticle(article2);
System.out.println("新增永久图文素材, 返回" + wechatMaterialService.uploadNewsMedia(accessToken, entity));
//新增永久图文素材, 返回tbP52CbH1vuCLlyUAt2rlVvIMceFKJmY663R_urJAYc
}
@Test
public void uploadFileForNewsMedia() {
String accessToken = wechatAuthService.getAccessToken();
String filePath = "D:\\Project\\Phil\\Wechat\\phil_new_wechat\\src\\main\\webapp\\image\\00_01.jpeg";
System.out.println(wechatMaterialService.uploadFileForNewsMedia(accessToken, filePath));
//http://mmbiz.qpic.cn/mmbiz_jpg/L8zibbZGicwDw6sv1WWkFK1nCUDY9bJrHiaEbJuTS37XbJR3hEiblAkibzjdTHdHKqXb6Ij53CDfNwztRsOwljibEp8A/0
}
@Test
public void uploadUrlForNewsMedia() {
String accessToken = wechatAuthService.getAccessToken();
String url = "http://www.59xihuan.cn//uploads/allimg/20130728/64511374987081-lp.jpg";
System.out.println(wechatMaterialService.uploadUrlForNewsMedia(accessToken, url));
//http://mmbiz.qpic.cn/mmbiz_jpg/L8zibbZGicwDw6sv1WWkFK1nCUDY9bJrHiaQXwtf52SyM4ftxVeuickvh1rDLPMaeE1jDxgpWice9TgJOzYPIRAy8uA/0
}
@Test
public void uploadForeverVideoMediaFile() {
String filePath = "D:/Project/Phil/Wechat/phil_new_wechat/src/main/webapp/video/1539717180390.mp4";
String accessToken = wechatAuthService.getAccessToken();
System.out.println("新增永久本地视频素材, 返回" + wechatMaterialService.uploadForeverMediaFile(accessToken,
"title", "test", filePath));
//新增永久本地视频素材, 返回GG16CzQSj3di2OTScAcNA-LTwMdsrKszM7M677NJyic
}
@Test
public void uploadForeverVideoMediaUrl() {
//String url = "http://vs6.bdstatic.com/browse_static/v3/common/widget/global/player/newPlayer_e2332cd1.swf";
//转换
String url = "http://xiaozhaozhao.nat300.top/video/1539717180390.mp4";
String accessToken = wechatAuthService.getAccessToken();
System.out.println("新增永久网络视频素材, 返回" + wechatMaterialService.uploadForeverMediaUrl(accessToken,
"title", "test", url));
// 新增永久网络视频素材, 返回GG16CzQSj3di2OTScAcNA6OWJlBHKk8sXSmbgPzxEQo
}
@Test
public void getTempMaterial() {
String accessToken = wechatAuthService.getAccessToken();
String mediaId = "c985PlW3avLd3w9gUclA75geC9PFFozfX6-Jn6s9kRWwV2gu0KHSaBEDJu0Eugno";
System.out.println(wechatMaterialService.getTempMaterial(accessToken, mediaId));
}
@Test
public void getMaterial() {
String accessToken = wechatAuthService.getAccessToken();
// String mediaId = "tbP52CbH1vuCLlyUAt2rlUEZKK230SjWIaB9xablAPw"; //图片
String mediaId = "tbP52CbH1vuCLlyUAt2rlVvIMceFKJmY663R_urJAYc"; //图文
System.out.println(wechatMaterialService.getMaterial(accessToken, mediaId));
}
@Test
public void deleteMaterial() {
String mediaId = "tbP52CbH1vuCLlyUAt2rlYaBvU3BHrs8g0-XxdnNILY";
//tbP52CbH1vuCLlyUAt2rlfnoE7EJNJvPvEv0nFkezsw
//tbP52CbH1vuCLlyUAt2rlYUYsAvjhY7UmdgQ_8qnip4
String accessToken = wechatAuthService.getAccessToken();
System.out.println(wechatMaterialService.deleteMaterial(accessToken, mediaId));
//ResultState(errcode=0, errmsg=ok)
}
@Test
public void geMaterialCount() {
String accessToken = wechatAuthService.getAccessToken();
System.out.println(wechatMaterialService.geMaterialCount(accessToken));
//MaterialCountResult(voiceCount=0, videoCount=5, imageCount=15, newsCount=2)
}
}
java微信素材编辑_Java微信公众平台开发之素材管理(Spring Boot 2.X)相关推荐
- 微信公众平台开发——新增素材
微信公众平台开发--新增永久素材 请求接口 接口使用(以图片上传为例) 使用Layui写一个前台上传图片的页面 js 使用HttpRequestPostMedia方法 UploadMedia方法 效果 ...
- Java微信公众平台开发_03_消息管理之被动回复消息
GitHub源码:https://github.com/shirayner/weixin_gz 一.本节要点 1.回调url 上一节,我们启用服务器配置的时候,填写了一个服务器地址(url),如下图, ...
- 微信公众平台开发(11)--用户管理,获取关注用户的信息
点此查看 微信公众号/微信网页/微信支付/企业微信/小程序开发合集及源代码下载 本文目录 1. 前言 2. 代码 3. 测试 3.1 获取用户列表 3.2 获取用户信息 3.3 修改用户备注 4. 小 ...
- java微信开发平台_Java微信公众平台开发(1) 接入微信公众平台
前面几篇文章一直都在说微信公众平台的开发准备工作,那么从这篇开始我们就将正式的进入JAVA微信公众平台开发的整个流程,那么这篇我们开始聊聊如何将我们的服务端和微信公众平台对接! (一)接入流程解析 通 ...
- java获取微信用户源码_Java微信公众平台开发(十)--微信用户信息的获取
前面的文章有讲到微信的一系列开发文章,包括token获取.菜单创建等,在这一篇将讲述在微信公众平台开发中如何获取微信用户的信息,在上一篇我们有说道微信用户和微信公众账号之间的联系可以通过Openid关 ...
- 获取微信用户信息java开发_Java微信公众平台开发(十二)--微信用户信息的获取
前面的文章有讲到微信的一系列开发文章,包括token获取.菜单创建等,在这一篇将讲述在微信公众平台开发中如何获取微信用户的信息,在上一篇我们有说道微信用户和微信公众账号之间的联系可以通过Openid关 ...
- 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单
我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...
- 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装...
微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...
- 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备...
相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结. 所以下面给大家分享一下我的经验: 第一部分 介绍微信公众号的一些简单 ...
- 微信公众平台开发教程Java版(六) 事件处理(菜单点击/关注/取消关注)
前言: 事件处理是非常重要的,这一章讲讲常见的事件处理 1.关注/取消关注 2.菜单点击 事件类型介绍: 在微信中有事件请求是消息请求中的一种.请求类型为:event 而event事件类型又分多种事件 ...
最新文章
- Linux之压缩与解压缩
- Spring boot的properties文件编码设置
- 用java写注册表单_利用HTML表单标签编写一个注册页面
- udp模拟tcp java_Java简单实现UDP和TCP
- CodeForces.1174D.EhabandtheExpectedXORProblem(构造前缀异或和数组)
- BSCI实验之十三:配置点到点链路OSPF及认证
- Parallels Desktop 17 “操作失败 执行该操作失败”的解决方法
- Ubuntu10.04下载并编译Android4.3源代码
- linux系统如何重置密码
- 亿能bms上位机_BMS_CAN 基于USBCAN的BMS上位机软件,VC CSharp C#编程 238万源代码下载- www.pudn.com...
- 民谣吉他之新手调音,弦音不对的问题
- 深入理解Magento第五章 – Magento资源配置
- 统计字符串中字符ch出现的次数c语言,C语言与汇编的嵌入式编程:统计字符串中各字符出现的次数...
- 如何修改openwrt路由器的密码_openwrt路由器改WiFi密码_openwrt wireless密码修改
- 如果不能产生价值,阅读便毫无意义
- [面试日记] 1,时隔五年再次开始面试
- markdown基本语法.md
- 哈工大计算机学院奖学金,【逆天了】哈工大研究生补贴/奖学金一览表,原来读研福利这么好...
- ckEditor使用方法
- 蓝魔平板i9s刷机Android,蓝魔i9s从Windows 8.1系统刷回Android系统图文教程
热门文章
- php博客平台 开源,PHP开源博客Blog - PHP开源网(PHP-OPEN.ORG)
- Verilog GPIO 模块设计
- 02 ElasticSearch笔记
- linux文件加解密,linux 系统下对文件进行加解密的方法参考总结
- Web Uploader文件(图片)上传使用方法
- SpringCloud狂神说学习笔记(一)
- SC0084 AT32F407/437在UCOSIII上运行LwIP协议栈
- WPS参考文献编号及超链接
- matlab 三维颜色,Matlab三维视图颜色控制
- 计算机安全威胁防范,计算机网络安全威胁及防范措施