微信企业号获取永久素材/删除永久素材/修改永久图文素材

Posted Engineer-Jsp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信企业号获取永久素材/删除永久素材/修改永久图文素材相关的知识,希望对你有一定的参考价值。

这个纯属微信企业号的免费分享,因为在我的视频教程里面这是要收费的。。。

只为帮助有需要的人,废话少说,开始今天的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"


第一个接口是最简单的,参数也比较少,一个简单的 get 请求

/** 
 * 获取永久素材示例 
 */  
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<String> JSONBody = new ArrayList<String>();

		// 开始修改主体
		/** 修改第一个图文主体 */
		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("发送失败");
			
		
	

ForeverArticle 类

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);
	


核心类 WeixinUtil 

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个接口就这么多内容,谢谢观看,希望对大家有帮助!

以上是关于微信企业号获取永久素材/删除永久素材/修改永久图文素材的主要内容,如果未能解决你的问题,请参考以下文章

C#开发微信门户及应用(26)-公众号微信素材管理

微信小程序同步微信公众号文章(二)

公众号文章如何不群发就可以生成永久链接!

微信公众平台开发—上传永久素材(图片)

Java 微信公众号上传永久素材的方法

Java获取永久图文素材中的网页端Url