• 获取永久素材、删除永久素材和新增永久素材 需要认证号(认证订阅号/认证服务号),且接口调用次数限制为10次/天,超过就会报{ [errcode] => 45009 [errmsg] => reach max api daily quota limit hint: [UOnSja0283...

    获取永久素材/删除永久素材/新增永久素材 需要认证号(认证订阅号/认证服务号),且接口调用次数限制为10次/天,超过就会报{ [errcode] => 45009 [errmsg] => reach max api daily quota limit hint: [UOnSja0283vr31!]}错误。


    至于构造curl请求函数和获取access_token这里就不用贴出来了,具体见

    PHP中的curl网络请求

    获取微信基础接口凭证Access_token

    1.新增永久素材

    (1)、新增的永久素材也可以在公众平台官网素材管理模块中看到
    (2)、永久素材的数量是有上限的,请谨慎新增。图文消息素材和图片素材的上限为5000,其他类型为1000
    (3)、素材的格式大小等要求与公众平台官网一致。具体是,图片大小不超过2M,支持bmp/png/jpeg/jpg/gif格式,语音大小不超过5M,长度不超过60秒,支持mp3/wma/wav/amr格式

    //新增永久媒体素材
    public function add_material($file_info){
    	if (!$this->_getAccessToken()) return false;
    	$curl = 'https://api.weixin.qq.com/cgi-bin/material/add_material?access_token='.$this->_getAccessToken();
    	$data= array(
    		"media"=>$file_info['filename'],
    		'form-data'=>$file_info
    	);
    	$result = $this->_request($curl,true,'POST',$data);
    	if ($result){
    		$json = json_decode($result,true);
    		
    		return $json;
    	}
    	return false;
    }
    
    调用:

    $file_info = array(
        'filename'=>'@images/0.jpg',  //国片相对于网站根目录的路径
        'content-type'=>'image/jpg',  //文件类型
        'filelength'=>'38771'         //图文大小
    ); 
    $result = $wechat->add_material($file_info);

    2.删除永久素材

    请谨慎操作本接口,因为它可以删除公众号在公众平台官网素材管理模块中新建的图文消息、语音、视频等素材(但需要先通过获取素材列表来获知素材的media_id)

    //删除永久素材
    public function del_material($media_id){
    	if (!$this->_getAccessToken()) return false;
    	$curl = 'https://api.weixin.qq.com/cgi-bin/material/del_material?access_token='.$this->_getAccessToken();
    	$data= array('media_id'=>$media_id);
    	$result = $this->_request($curl,true,'POST',json_encode($data));
    	if ($result){
    		$json = json_decode($result,true);
    		
    		 if($result['errcode']==0){
    			return "素材删除成功";
    		}elseif ($result['errcode']==40007) {
    			return "素材ID不正确";
    		}
    	}
    	return '素材删除失败';
    }
    

    3.获取素材列表

    (1)、获取永久素材的列表,也会包含公众号在公众平台官网素材管理模块中新建的图文消息、语音、视频等素材(但需要先通过获取素材列表来获知素材的media_id)
    (2)、临时素材无法通过本接口获取

    //获取素材列表
    public function get_mediaList($type="image",$offset=0,$count=20){
    	if (!$this->_getAccessToken()) return false;
    	$data = array(
    		'type'=>$type,
    		'offset'=>$offset,
    		'count'=>$count
    	);
    	$curl = 'https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token='.$this->_getAccessToken();
    	$result = $this->_request($curl,true,'POST',json_encode($data));
    	if ($result){
    		$json = json_decode($result,true);
    		
    		return $json;
    	}
    	return false;
    }
    


    展开全文
  • php 微信新增永久素材

    2018-08-13 09:34:49
    微信的新增永久素材,最重要的是图文素材,基本流程是如下:   获取access_token; 上传封面素材,获取永久素材的media_id,可以是images或者thumb类型都可以 上传图文中的图片,获取图片的腾讯域名的url 上传...

    微信的新增永久素材,最重要的是图文素材,基本流程是如下:

     

    1. 获取access_token;
    2. 上传封面素材,获取永久素材的media_id,可以是images或者thumb类型都可以
    3. 上传图文中的图片,获取图片的腾讯域名的url
    4. 上传永久图文素材

    第一步就不说了,curl的就可以解决。

     

    第二步获取永久素材跟上篇获取临时id大同小异,等下会吧代码贴出来

    第三步获取图文中的图片url,主要也只是curl,和获取素材的流程差不多

    第四步就是最重要,不过有了神器就简单了

    代码基本就是如下几个封装好的方法,图片地址可以参考上篇的地址,其他都是很简单的

        /*
        * 新增永久图文
         */
        public function addEver_media($json){
            $url = "https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=".$this->get_access_token();
            $res = $this->post($url, $json, 'json');
            // 异常处理: 获取时网络错误
            // 判断是否调用成功        
            return $res;
        }

      /*
        * 新增永久素材
         */
        public function addSucai($path,$type,$title="",$dis=""){
            $url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=".$this->get_access_token()."&type=".$type;
            if($type=="video"){
                $b = json_encode(array(
                        'title'=>$title,
                        'introduction'=>$dis
                    ));
                $res = array(
                    'media' => '@'.$path,
                    'description'=>$b
                    
                );
                $res = $this->upload($url, $res);
            }else{
                $res = $this->upload($url, array('media' => '@'.$path));
            }
            // 判断是否调用成功
            return $res;
        } 

        /*
        * 获取永久素材url
         */
        public function getSucaiURL($media){
            $url = "https://api.weixin.qq.com/cgi-bin/material/get_material?access_token=" .$this->get_access_token();
            $arr = json_encode(array('media_id' => $media));
            $res = $this->post($url, $arr, 'json');   
            // 判断是否调用成功
            return $res;
        }

        /*
         * 上传图片获取url
         */
        public function getPicURL($path){
            $url = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=" .$this->get_access_token() ;
            $res = $this->upload($url, array('media' => '@'.$path));    
            // 判断是否调用成功
            return $res;
        }

      /*
        * 上传图片。图文专用
         */
        public static function upload($url, $filedata) {  
            $curl = curl_init ();  
            if (class_exists ( '/CURLFile' )) {//php5.5跟php5.6中的CURLOPT_SAFE_UPLOAD的默认值不同  
                curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, true );  
            } else {  
                if (defined ( 'CURLOPT_SAFE_UPLOAD' )) {  
                    curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, false );  
                }  
            }  
            curl_setopt ( $curl, CURLOPT_URL, $url );  
            curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, FALSE );  
            curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, FALSE );  
            if (! empty ( $filedata )) {  
                curl_setopt ( $curl, CURLOPT_POST, 1 );  
                curl_setopt ( $curl, CURLOPT_POSTFIELDS, $filedata );  
            }  
            curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );  
            $output = curl_exec ( $curl );  
            curl_close ( $curl );  
            return $output;  
              
        }

        public function post($url, $fields, $data_type='text')
        {
            $cl = curl_init();
            if(stripos($url, 'https://') !== FALSE) {
                curl_setopt($cl, CURLOPT_SSL_VERIFYPEER, FALSE);
                curl_setopt($cl, CURLOPT_SSL_VERIFYHOST, FALSE);
                curl_setopt($cl, CURLOPT_SSLVERSION, 1);
            }
            curl_setopt($cl, CURLOPT_URL, $url);
            curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1 );
            curl_setopt($cl, CURLOPT_POST, true);        
            curl_setopt($cl, CURLOPT_POSTFIELDS, $fields);
            $content = curl_exec($cl);
            $status = curl_getinfo($cl);
            curl_close($cl);
            if (isset($status['http_code']) && $status['http_code'] == 200) {
                if ($data_type == 'json') {
                    $content = json_decode($content);
                }
                return $content;
            } else {
                return FALSE;
            }
        }

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

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

    只为帮助有需要的人,废话少说,开始今天的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个接口就这么多内容,谢谢观看,希望对大家有帮助!

    展开全文
  • 这里不会介绍如何获取token,在开发中发现很多坑,试过很多中方法,下面介绍了一种比较简单的获取永久素材的方式,不需要大量的代码,方便开发。 业务流程: 获取微信公众号永久素材分为两种情况: 文件类型为:...

    这里不会介绍如何获取token,在开发中发现很多坑,试过很多中方法,下面介绍了一种比较简单的获取永久素材的方式,不需要大量的代码,方便开发。

    业务流程:
    公众号获取永久素材流程
    获取微信公众号永久素材分为两种情况:

    1. 文件类型为:video、图文素材
      获取此类素材时,微信将返回一段json。
    2. 文件类型为:image、voice、thumb
      获取此类素材时,微信直接响应素材内容,也就是直接返回文件。(下面将通过流的方式进行获取文件)

    微信官方接口地址:点击进入微信官方获取永久素材文档
    第一种:获取video等类型的素材
    此类比较简单,利用HttpUtil直接发送POST请求,将参数以json格式传递。
    获取token的方式这里不进行记录,代码如下:获取image等类型的永久素材
    返回的数据类型如官方文档。

    第二种:获取image等类型的素材
    这里开发的问题比较多,下面介绍的是获取文件流的方式。
    代码如下:

    		import com.alibaba.fastjson.JSONObject;
    		import org.apache.http.client.methods.CloseableHttpResponse;
    		import org.apache.http.client.methods.HttpPost;
    		import org.apache.http.entity.StringEntity;
    		import org.apache.http.impl.client.CloseableHttpClient;
    		import org.apache.http.impl.client.HttpClients;
    		import java.io.InputStream;
    
        public static void main(String[] args) throws Exception {
            // 封装请求参数
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("media_id","");
            // 获取到http连接对象
            HttpPost httpPost = new HttpPost("httpUrl");
            StringEntity stringEntity = new StringEntity(jsonObject.toString());
            httpPost.setEntity(stringEntity);
            // 打开链接发送请求 获取到返回的流
            CloseableHttpClient build = HttpClients.custom().build();
            CloseableHttpResponse execute = build.execute(httpPost);
            InputStream inputStream = execute.getEntity().getContent();
        }
    

    获取到流后就可以随意操作了,可以上传到文件服务器,也可以直接输出为文件。
    真实有效,亲测可用。

    展开全文
  • 关键字:curl、微信开发、上传永久素材前言微信开发,需要使用的素材(如图片、视频)必须先上传到微信服务器,通过微信服务器返回的meida_id在腾讯系域名内使用。当然可以直接使用代码来实现上传请求,获取微信...

    关键字:curl、微信开发、上传永久素材

    前言

    微信开发,需要使用的素材(如图片、视频)必须先上传到微信服务器,通过微信服务器返回的meida_id在腾讯系域名内使用。当然可以直接使用代码来实现上传请求,获取微信服务器返回的media_id,但是这样的方式略显麻烦,幸亏微信开发可以通过curl命令直接上传素材获取返回的url。

    curl下载安装

    curl是一种命令行工具,作用是发出网络请求,得到和提取返回的数据。在curl工具下载页根据系统下载相应的版本,比如Windows系统下载win32版本,需要注意的是,如果没有使用ssl协议(https),直接下载无ssl版本即可,比如curl-7.16.0-win32-nossl.zip。如果使用了ssl协议(https),就得下载ssl版本,比如curl-7.16.0-win32-ssl.zip,使用ssl版本还需要下载OpenSSL软件(安装exe即可)实现SSL协议。

    curl上传素材

    下载完成的curl压缩包解压之后,打开dos命令行工具(cmd),从dos进入curl根目录(cd..)。输入curl命令即可上传素材到微信服务器。命令如下:

    curl  -F media=@1.jpg -F type=image "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=LJLJ3oEHi8rcuJnUv6RryYHpiVybevrtR4upY_W5_gqXLDhtAHj2-qaxYzfMKe2gSQtO4mPsmoWmu9LUPvLv7cNtnmtC1ezZj2lxwqd9U1eY35rTeuhoyufpcfmf4XgLLXZdAAACOQ"

    命令需要注意两点:①上传素材的地址相对于curl目录,路径要确认无误,否则curl会找不到素材,一般把素材放在curl目录中。②什么微信公众号使用该素材,就得用该微信公众号的appid和appsecret生成的access_token,否则在微信公众号中无法使用该素材。

    在dos中返回的字符串

    {"media_id":"1YTbzmBpzu9_MDbee6yPlfvtqNbJufAbqJmsb3kkFA","url":"http:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/gMreo1rjy9LIGD9GVeNyWmPHV2nzmiaBXhs8qVaDloQ4iaIhHhIwJAu4ZnmuyIPFqvGCZDacTn748eq4iaBmYXj3Q\/0?wx_fmt=jpeg"}
    
    其中的media_id就可以在微信中唯一标记我们上传的永久素材。
    展开全文
  • thinkphp微信上传永久素材报41005错误说明传参值有误,正确的传参方式如下: 例如: $filepath= "themes/simplebootx/Public/assets/images/banner-inner-fail.jpg"; if(class_exists('\CURLFile')){ $data['...
  • 微信开发之素材管理是子恒老师《微信公众平台开发》视频教程的第三部。详细讲解了用php开发微信,对微信公众平台...内容包含微信临时素材,永久素材的上传,删除,获取素材的media_id等等。欢迎反馈,微信/QQ:68183131
  • * 上传永久素材 * @param file * @param type * @param title type为video时需要,其他类型设null * @param introduction type为video时需要,其他类型设null * @return {"media_id":MEDIA_ID,&...
  • 在下有个问题问一下各位大大们,有没有人遇到过调用微信上传永久素材接口上传视频时一直审批不通过的情况,审批状态那一栏是横杠 ,视频没有违规,自己公司的团建视频,大小小于20M不用上传到腾讯上去,标题没有敏感...
  • 众号永久素材从名字可以知道, 我们的永久素材上传到微信服务器后, 只要你不删除, 永久有效, 可以使用。 所以我们上传永久素材后, 获取它的media_id, 直接存入到我们的...
  • 微信素材分为临时素材和永久素材两种 新增临时素材 公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来...
  • 1.新增临时素材:公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来进行的。素材管理接口对所有认证的订阅号和...
  • 微信服务器素材上传 上传素材得到返回JSON 调用示例(使用curl命令,用FORM表单方式上传一个图片): curl -F media=@test.jpg “https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN” ...
  • public static String postFile(String url, String filePath, String title,String introduction) { File file = new File(filePath); if(!file.exists()) return null; String result = null;...t
  • 最近在做关于微信公众号接口的问题,发现上传永久素材的地方有些小问题。 1.临时素材和永久素材没有关系,在微信服务器可以保存三天。新增的临时素材只能通过media_id(临时素材)获取。 2.新增图文素材以外的素材...
  • 那么微信上传永久图片素材又是怎么操作的呢?  根据微信文档说明:  重点在于整合media参数,我的代码如下:  然后发布,测试。微信返回:{"errcode":41005,"errmsg":"mediadata missing....} ...
  • 微信公众号上传永久素材 微信公众号一开始写的只能读取本地,现在可以是网络图片 //ResponseEntity 自定义返回类 public ResponseEntity MenuBarPictureAddMaterial(HttpServletRequest request, String appId, ...
  • 微信公众平台永久素材管理:(使用时间:2018-11-12 16:55) 官方文档地址:详情可参考(https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1444738729) 1. 获取accessToken (本地测试需要在...
  • * 获取素材列表[永久] * $material_type [类型] image/video/voice/news 图片 视频 语音 图文 * QVqFyY4hY4_xpPf_lO2OG1fIslTDY4wzkgg72IOeoDo * QVqFyY4hY4_xpPf_lO2OG80_sJiK4v2BGGq1-cwQSLU */ fun
  • 微信公众号在使用的接口的时候是通过media_id来进行的,所以在使用的接口的时候我们往往需要先上传素材,支持上传素材的格式和限制如下 图片(image): 2M,支持PNG\JPEG\JPG\GIF格式。 语音(voice):2M,播放...
1 2 3 4 5 ... 20
收藏数 706
精华内容 282
关键字:

微信开发 永久素材id