这个纯属微信企业号的免费分享,因为在我的视频教程里面这是要收费的。。。
只为帮助有需要的人,废话少说,开始今天的3个接口讲解 ------
① 获取永久素材
② 删除永久素材
③ 修改永久素材
1.获取永久素材
通过media_id获取上传的图文消息、图片、语音、文件、视频素材。
Https请求方式: GET
https://qyapi.weixin.qq.com/cgi-bin/material/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID
参数 | 必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
media_id | 是 | 素材资源标识ID |
所有管理组均可调用。
a)正确时返回(这里省略了HTTP首部):
如果为图文消息素材,正确时返回结果如下
{ "type": "mpnews", "mpnews": { "articles": [ { "thumb_media_id": "2-G6nrLmr5EC3MMb_-zK1dDdzmd0p7cNliYu9V5w7o8K0HuucGBZCzw4HmLa5C", "title": "Title01", "author": "zs", "digest": "airticle01", "content_source_url": "", "show_cover_pic": 0 }, { "thumb_media_id": "2-G6nrLmr5EC3MMb_-zK1dDdzmd0p7cNliYu9V5w7oovsUPf3wG4t9N3tE", "title": "Title02", "author": "Author001", "digest": "article02", "content":"Content001", "content_source_url": "", "show_cover_pic": 0 } ] } }
如果为其他类型素材,返回结果和普通的http下载相同,请根据http头做相应的处理。
{ HTTP/1.1 200 OK Connection: close Content-Type: image/jpeg Content-disposition: attachment; filename="MEDIA_ID.jpg" Date: Sun, 06 Jan 2013 10:20:18 GMT Cache-Control: no-cache, must-revalidate Content-Length: 339721 Xxxx }
b)错误时返回(这里省略了HTTP首部):
{ "errcode": "40004", "errmsg": "invalid media_id" }
/**
* 获取永久素材示例
*/
public static void main(String[] args) {
// 请求地址
String GetReqUrl = "https://qyapi.weixin.qq.com/cgi-bin/material/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID";
// 测试用的 media_id ,来自上传永久图文素材接口
String Media_Id = "29Ujz_kRpTZ9LOIjurDHR6d4tffci2gWMt0tIw2nDPetZsRpJPBZKhP6onvu9NFq1";
// 获取访问凭证
String accesstoken = WeixinUtil.getAccessToken(ParamesAPI.corpId,
ParamesAPI.secret).getToken();
// 替换 GetReqUrl 中的参数
GetReqUrl = GetReqUrl.replace("ACCESS_TOKEN", accesstoken).replace("MEDIA_ID", Media_Id);
// 开始请求
JSONObject JSONResult = WeixinUtil.HttpRequest(GetReqUrl, "GET", null);
// 打印结果
if (JSONResult != null) {
System.out.println("获取成功!");
System.out.println(JSONResult.toString());
} else {
System.out.println("获取失败!");
}
}
打印测试结果:
2.删除永久素材
通过media_id删除上传的图文消息、图片、语音、文件、视频素材。
Https请求方式: GET
https://qyapi.weixin.qq.com/cgi-bin/material/del?access_token=ACCESS_TOKEN&media_id=MEDIA_ID
参数 | 必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
media_id | 是 | 素材资源标识ID |
所有管理组均可调用。
{ "errcode": 0, "errmsg": "deleted" }这个相比上一个更简单多了,直接编写 main 测试
/**
* 删除永久素材示例
*/
public static void main(String[] args) {
// 请求地址
String GetReqUrl = "https://qyapi.weixin.qq.com/cgi-bin/material/del?access_token=ACCESS_TOKEN&media_id=MEDIA_ID";
// 测试用的 media_id ,来自上传永久图文素材接口
String Media_Id = "29Ujz_kRpTZ9LOIjurDHR6d4tffci2gWMt0tIw2nDPetZsRpJPBZKhP6onvu9NFq1";
// 获取访问凭证
String accesstoken = WeixinUtil.getAccessToken(ParamesAPI.corpId,
ParamesAPI.secret).getToken();
// 替换 GetReqUrl 中的参数
GetReqUrl = GetReqUrl.replace("ACCESS_TOKEN", accesstoken).replace("MEDIA_ID", Media_Id);
// 开始请求
JSONObject JSONResult = WeixinUtil.HttpRequest(GetReqUrl, "GET", null);
// 打印结果
if (JSONResult != null) {
System.out.println("删除成功!");
System.out.println(JSONResult.toString());
} else {
System.out.println("删除失败!");
}
}
3.修改永久图文素材
/**
* 修改永久图文素材示例
*/
public static void main(String[] args) {
// 已经上传成功的永久图文素材
String media_id = "29Ujz_kRpTZ9LOIjurDHR6d4tffci2gWMt0tIw2nDPesE3KzbigjS8wlsp1pAnPhU";
// 定义群发修改后的图文 JSON 头(主要用于展示修改后的永久图文素材对比)
String SendForeverNewsJSONHeader = "{\"touser\": \"@all\", \"toparty\":\"@all\", \"msgtype\": \"mpnews\", \"agentid\": 1,\"mpnews\":{\"media_id\": \"%s\"}, \"safe\": 0}";
// 定义 JSON 头
String JSONHeadr = "{\"media_id\": \"%s\",\"mpnews\":{\"articles\":%s}}";
// 定义 JSON 主体
List JSONBody = new ArrayList();
// 开始修改主体
/** 修改第一个图文主体 */
ForeverArticle mArticle1 = new ForeverArticle();
// 修改图文消息标题
mArticle1.title = "修改永久图文素材测试-1";
// 修改图文消息缩略图的media_id, 可以在上传永久素材接口中获得
mArticle1.thumb_media_id = "2UswksB2VRMzWw054wu75UyC32k1UDMVXVQGOtxMZsbXtvWULY9PZyXNsuyIvnUGIOwDYTX-nWTrLwhycqZxeDA";
// 图文消息的作者
mArticle1.author = "Engineer-Jsp";
// 图文消息点击“阅读原文”之后的页面链接
mArticle1.content_source_url = "http://www.engineer-jsp.cn/";
// 修改图文消息的内容,支持html标签
mArticle1.content = "修改永久图文素材测试-1";
// 修改图文消息的描述
mArticle1.digest = "修改永久图文素材测试-1";
// 是否显示封面,1为显示,0为不显示。默认为0
mArticle1.show_cover_pic = "1";
// 将该主体添加到 JSON 主体中
JSONBody.add(mArticle1.getJSONObject());
/** 修改第二个图文主体 */
ForeverArticle mArticle2 = new ForeverArticle();
// 修改图文消息标题
mArticle2.title = "修改永久图文素材测试-2";
// 图文消息缩略图的media_id, 可以在上传永久素材接口中获得
mArticle2.thumb_media_id = "2oPn4I5ihl3OYAr2-x3xwvAVzdcQbxb3FWJBCzJtMj8jlF5H1I6H8Hs53K2VpMrejF1RJhE6jCTVqc_dGJM9zJQ";
// 图文消息的作者
mArticle2.author = "Engineer-Jsp";
// 图文消息点击“阅读原文”之后的页面链接
mArticle2.content_source_url = "http://www.engineer-jsp.cn/";
// 修改图文消息的内容,支持html标签
mArticle2.content = "修改永久图文素材测试-2";
// 修改图文消息的描述
mArticle2.digest = "修改永久图文素材测试-2";
// 是否显示封面,1为显示,0为不显示。默认为0
mArticle2.show_cover_pic = "0";
// 将该主体添加到 JSON 主体中
JSONBody.add(mArticle2.getJSONObject());
/** 修改第二个图文主体 */
ForeverArticle mArticle3 = new ForeverArticle();
// 修改图文消息标题
mArticle3.title = "修改永久图文素材测试-3";
// 图文消息缩略图的media_id, 可以在上传永久素材接口中获得
mArticle3.thumb_media_id = "27N7vimhmaV0kMGvy5P8KCqqTC0MK0XGVd0WSyqp5xcxxJ-BEbgHllRVjAIIRh7wjZG2Pr-sCBhW2D12fsNk10A";
// 图文消息的作者
mArticle3.author = "Engineer-Jsp";
// 图文消息点击“阅读原文”之后的页面链接
mArticle3.content_source_url = "http://www.engineer-jsp.cn/";
// 修改图文消息的内容,支持html标签
mArticle3.content = "修改永久图文素材测试-3";
// 修改图文消息的描述
mArticle3.digest = "修改永久图文素材测试-3";
// 是否显示封面,1为显示,0为不显示。默认为0
mArticle3.show_cover_pic = "0";
// 将该主体添加到 JSON 主体中
JSONBody.add(mArticle3.getJSONObject());
// 将所有 JSON 主体添加到 JSON 头
String PostJSONHeader = String.format(JSONHeadr, media_id, JSONBody
.toString());
System.out.println(PostJSONHeader);
// 上传地址
String PostUrl = "https://qyapi.weixin.qq.com/cgi-bin/material/update_mpnews?access_token=ACCESS_TOKEN";
// 获取 accesstoken
String access_token = WeixinUtil.getAccessToken(ParamesAPI.corpId,
ParamesAPI.secret).getToken();
// 替换 accesstoken
PostUrl = PostUrl.replace("ACCESS_TOKEN", access_token);
JSONObject JSONResult = WeixinUtil.HttpRequest(PostUrl, "POST",
PostJSONHeader);
if (JSONResult.has("errcode") && JSONResult.getInt("errcode") == 0) {
System.out.println("修改永久图文素材成功!正在进行群发...");
// 发送修改后的永久图文素材给所有关注用户的测试
String POST_URL = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN";
String PostSendForeverNesData = String.format(
SendForeverNewsJSONHeader, media_id);
int result = WeixinUtil.PostMessage(access_token, "POST", POST_URL,
PostSendForeverNesData);
// 打印结果
if (0 == result) {
System.out.println("发送成功");
} else {
System.out.println("发送失败");
}
}
}
package jsp.weixin.media.util;
public class ForeverArticle {
private String JSONFlags = "{\"title\": \"%s\",\"thumb_media_id\": \"%s\",\"author\": \"%s\",\"content_source_url\": \"%s\",\"content\": \"%s\",\"digest\": \"%s\",\"show_cover_pic\": \"%s\"}";
public String title;
public String thumb_media_id;
public String author;
public String content_source_url;
public String content;
public String digest;
public String show_cover_pic;
public String getJSONObject() {
return String.format(JSONFlags, title, thumb_media_id, author,
content_source_url, content, digest, show_cover_pic);
}
}
package jsp.weixin.ParamesAPI.util;
/**
* @author Engineer-Jsp
* @date 2014.10.09
* 请求数据通用类*/
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import jsp.weixin.menu.util.Menu;
import net.sf.json.JSONObject;
public class WeixinUtil {
/**
* 发起https请求并获取结果
*
* @param requestUrl 请求地址
* @param requestMethod 请求方式(GET、POST)
* @param outputStr 提交的数据
* @return JSONObject 返回JSONObject对象(通过JSONObject.get(key)的方式获取json对象的属性值)
* @author Engineer.Jsp
*/
public static JSONObject HttpRequest(String request , String RequestMethod , String output ){
@SuppressWarnings("unused")
// 定义 JSONObject 对象
JSONObject jsonObject = null;
// buffer 缓冲流
StringBuffer buffer = new StringBuffer();
try {
//建立连接
URL url = new URL(request);
// 获取 HttpURLConnection对象
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 设置输出流
connection.setDoOutput(true);
// 设置输入流
connection.setDoInput(true);
// 是否使用缓存
connection.setUseCaches(false);
// 请求方式
connection.setRequestMethod(RequestMethod);
// 流不为空
if(output!=null){
// 获取流
OutputStream out = connection.getOutputStream();
// 写数据流 UTF-8 编码
out.write(output.getBytes("UTF-8"));
// 关闭
out.close();
}
//流处理
InputStream input = connection.getInputStream();
// 读取流 UTF-8 编码
InputStreamReader inputReader = new InputStreamReader(input,"UTF-8");
// 缓冲流 buffer
BufferedReader reader = new BufferedReader(inputReader);
// 定义 String 来读取每一行
String line;
// 循环读取每一行,知道数据没有了,意思是读取完了
while((line=reader.readLine())!=null){
// 添加到StringBuffer字符流里面
buffer.append(line);
}
//关闭连接、释放资源
reader.close();
// 关闭
inputReader.close();
// 关闭
input.close();
// 强制释放对象,缓解JVM内存
input = null;
// 关闭连接
connection.disconnect();
// 把写到 StringBuffer 字符流的数据用 JSONObject.fromObject 函数转换成 JSONObject 对象
jsonObject = JSONObject.fromObject(buffer.toString());
System.out.println(buffer.toString());
} catch (Exception e) {
}
// 如果为空,返回一个空对象,否则返回jsonObject实例对象
return jsonObject;
}
// 获取AccessToken的接口地址(GET)
public final static String access_token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=CorpID&corpsecret=SECRET";
/**
* 获取AccessToken
* @param corpID 企业Id
* @param secret 管理组的凭证密钥,每个secret代表了对应用、通讯录、接口的不同权限;不同的管理组拥有不同的secret
* @return accessToken AccesstToken 的对象
* @author Engineer.Jsp
*/
public static AccessToken getAccessToken(String corpID, String secret) {
// 这里我们定义一个 AccessToken 对象
AccessToken accessToken = null;
// 定义一个 String 来接收请求地址 access_token_url 的替换之后的值,replace 代表替换
// replace("CorpID", corpID) 代表把 access_token_url 的 "CorpID" 字符替换成参数 corpID
// replace("SECRET", secret) 代表把 access_token_url 的 "SECRET" 字符替换成参数 secret
String requestUrl = access_token_url.replace("CorpID", corpID).replace("SECRET", secret);
// 定义一个 JSONObject 对象来接收请求结果,这里不懂JSONObject可以去百度一下,它是一种数据交互字符格式
// 稍后会贴出 HttpRequest(requestUrl, "GET", null) 通用请求方法,这个方法请务必掌握!后期的很多请求
// 都是采用此通用方法,也请把整篇章节看完后在进行写代码,否则会出现参数或函数混淆,导致浪费不必要的时间!
JSONObject jsonObject = HttpRequest(requestUrl, "GET", null);
// 如果请求成功,表示 jsonObject 里面有东西,它不为空,表示取到了JSONObject数据
if (null != jsonObject) {
// try/catch 代表捕获异常 关于他们的用法与意义,请参照本人博客,里面讲解得很详细,附带案例
// 博客地址:http://blog.csdn.net/jspping/article/details/50340383
try {
// 因为取到了数据,所以这里我们创建一个 AccessToken 对象来接收 access_token 和 expires_in
accessToken = new AccessToken();
// 给accessToken set 一个Token值,并且保存起来
accessToken.setToken(jsonObject.getString("access_token"));
// 给accessToken set 一个ExpiresIn值,并且保存起来
accessToken.setExpiresIn(jsonObject.getInt("expires_in"));
// 打印
System.out.println("获取token成功:"+jsonObject.getString("access_token")+"————"+jsonObject.getInt("expires_in"));
} catch (Exception e) {
accessToken = null;
// 获取token失败
String error = String.format("获取token失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));
// 打印
System.out.println(error);
}
}
// 如果有值,返回一个accessToken实例对象,否则,返回一个空对象
return accessToken;
}
// 菜单创建(POST)
public static String menu_create_url = "https://qyapi.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN&agentid=0";
/**
* 创建菜单
*
* @param menu 菜单实例
* @param accessToken 有效的access_token
* @param agentid 企业应用的id,整型,可在应用的设置页面查看
* @return 0表示成功,其他值表示失败
*/
public static int createMenu(Menu menu, String accessToken) {
int result = 0;
// 拼装创建菜单的url
String url = menu_create_url.replace("ACCESS_TOKEN", accessToken);
// 将菜单对象转换成json字符串
String jsonMenu = JSONObject.fromObject(menu).toString();
// 调用接口创建菜单
JSONObject jsonObject = HttpRequest(url, "POST", jsonMenu);
// 测试数据
System.out.println(jsonObject);
if (null != jsonObject) {
if (0 != jsonObject.getInt("errcode")) {
result = jsonObject.getInt("errcode");
String error = String.format("创建菜单失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));
System.out.println(error);
}
}
return result;
}
public static String URLEncoder(String str){
String result = str ;
try {
result = java.net.URLEncoder.encode(result,"UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 根据内容类型判断文件扩展名
*
* @param contentType 内容类型
* @return
*/
public static String getFileEndWitsh(String contentType) {
String fileEndWitsh = "";
if ("image/jpeg".equals(contentType))
fileEndWitsh = ".jpg";
else if ("audio/mpeg".equals(contentType))
fileEndWitsh = ".mp3";
else if ("audio/amr".equals(contentType))
fileEndWitsh = ".amr";
else if ("video/mp4".equals(contentType))
fileEndWitsh = ".mp4";
else if ("video/mpeg4".equals(contentType))
fileEndWitsh = ".mp4";
// new add
else if ("image/png".equals(contentType))
fileEndWitsh = ".png";
return fileEndWitsh;
}
/**
* 数据提交与请求通用方法
* @param access_token 凭证
* @param RequestMt 请求方式
* @param RequestURL 请求地址
* @param outstr 提交json数据
* */
public static int PostMessage(String access_token ,String RequestMt , String RequestURL , String outstr){
int result = 0;
RequestURL = RequestURL.replace("ACCESS_TOKEN", access_token);
JSONObject jsonobject = WeixinUtil.HttpRequest(RequestURL, RequestMt, outstr);
if (null != jsonobject) {
if (0 != jsonobject.getInt("errcode")) {
result = jsonobject.getInt("errcode");
String error = String.format("操作失败 errcode:{%s} errmsg:{%s}", jsonobject.getInt("errcode"), jsonobject.getString("errmsg"));
System.out.println(error);
}
}
return result;
}
public static void main(String[] args) {
// String corpID = "您的企业号ID";
// String secret = "管理组密钥";
// AccessToken token = getAccessToken(corpID, secret);
// System.out.println("获取到的AccessToeken: " + token.getToken());
// System.out.println("有效时间 : " + token.getExpiresIn());
}
}
打印测试结果:
修改后的永久图文素材:
本地修改的上传图片:
本篇3个接口就这么多内容,谢谢观看,希望对大家有帮助!