新增临时素材_asp 新增临时素材 - CSDN
精华内容
参与话题
  • 新增微信临时素材

    2020-10-12 14:12:24
    public JSONObject UploadMeida(String fileType, String filePath, String appId) throws Exception { //返回结果 String result = null; File file = new File(filePath); if (!file.exists() || !...
    public JSONObject UploadMeida(String fileType, String filePath, String appId) throws Exception {
            //返回结果
            String result = null;
            File file = new File(filePath);
            if (!file.exists() || !file.isFile()) {
                throw new IOException("文件不存在");
            }
            String token = String.valueOf(redisDao.getValue(CacheKey.getWechatTokenKey(appId)));
            String urlString = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=" + token + "&type=" + fileType;
            URL url = new URL(urlString);
            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
            conn.setRequestMethod("POST");//以POST方式提交表单
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setUseCaches(false);//POST方式不能使用缓存
            //设置请求头信息
            conn.setRequestProperty("Connection", "Keep-Alive");
            conn.setRequestProperty("Charset", "UTF-8");
            //设置边界
            String BOUNDARY = "----------" + System.currentTimeMillis();
            conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
            //请求正文信息
            //第一部分
            StringBuilder sb = new StringBuilder();
            sb.append("--");//必须多两条道
            sb.append(BOUNDARY);
            sb.append("\r\n");
            sb.append("Content-Disposition: form-data;name=\"media\"; filename=\"" + file.getName() + "\"\r\n");
            sb.append("Content-Type:application/octet-stream\r\n\r\n");
            System.out.println("sb:" + sb);
    
            //获得输出流
            OutputStream out = new DataOutputStream(conn.getOutputStream());
            //输出表头
            out.write(sb.toString().getBytes("UTF-8"));
            //文件正文部分
            //把文件以流的方式 推送道URL中
            DataInputStream din = new DataInputStream(new FileInputStream(file));
            int bytes = 0;
            byte[] buffer = new byte[1024];
            while ((bytes = din.read(buffer)) != -1) {
                out.write(buffer, 0, bytes);
            }
            din.close();
            //结尾部分
            byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("UTF-8");//定义数据最后分割线
            out.write(foot);
            out.flush();
            out.close();
            if (HttpsURLConnection.HTTP_OK == conn.getResponseCode()) {
    
                StringBuffer strbuffer = null;
                BufferedReader reader = null;
                try {
                    strbuffer = new StringBuffer();
                    reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                    String lineString = null;
                    while ((lineString = reader.readLine()) != null) {
                        strbuffer.append(lineString);
    
                    }
                    if (result == null) {
                        result = strbuffer.toString();
                        System.out.println("result:" + result);
                    }
                } catch (IOException e) {
                    System.out.println("发送POST请求出现异常!" + e);
                    e.printStackTrace();
                } finally {
                    if (reader != null) {
                        reader.close();
                    }
                }
            }
            JSONObject jsonObject = JSONObject.fromObject(result);
            return jsonObject;
        }

    正确情况下的返回JSON数据包结果如下:

    {"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789}
    展开全文
  • 一、新增临时素材 公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来进行的。素材管理接口对所有认证的订阅号和...

    一、新增临时素材

    公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来进行的。素材管理接口对所有认证的订阅号和服务号开放。通过本接口,公众号可以新增临时素材(即上传临时多媒体文件)。

    注意点:

    1、临时素材media_id是可复用的。

    2、媒体文件在微信后台保存时间为3天,即3天后media_id失效。

    3、上传临时素材的格式、大小限制与公众平台官网一致。

    图片(image): 2M,支持PNG\JPEG\JPG\GIF格式

    语音(voice):2M,播放长度不超过60s,支持AMR\MP3格式

    视频(video):10MB,支持MP4格式

    缩略图(thumb):64KB,支持JPG格式

    4、需使用https调用本接口。

    接口调用请求说明

     

    http请求方式:POST/FORM,使用https https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE 调用示例(使用curl命令,用FORM表单方式上传一个多媒体文件): curl -F media=@test.jpg "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE"

    参数说明

    参数 是否必须 说明
    access_token 调用接口凭证
    type 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)
    media form-data中媒体文件标识,有filename、filelength、content-type等信息

    返回说明

    正确情况下的返回JSON数据包结果如下:

    {"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789}
    
    参数 描述
    type 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb,主要用于视频与音乐格式的缩略图)
    media_id 媒体文件上传后,获取标识
    created_at 媒体文件上传时间戳

    错误情况下的返回JSON数据包示例如下(示例为无效媒体类型错误):

    {"errcode":40004,"errmsg":"invalid media type"}
    

    根据上面的接口,我们定义了一个上传临时素材的方法,包含文件目录和文件类型这两个参数,我们这里依然采用RestTemplate工具类进行文件上传

     

    /**
         * 上传临时素菜
         * 1、临时素材media_id是可复用的。
         * 2、媒体文件在微信后台保存时间为3天,即3天后media_id失效。
         * 3、上传临时素材的格式、大小限制与公众平台官网一致。
         * @param filePath
         * @param type
         * @return
         */
        public String uploadFile(String filePath,String type) {
    
            String accessToken = accessTokenUtil.getAccessToken();
            if (accessToken != null) {
                String url = URIConstant.MEDIA_UPLOAD_URL.replace("ACCESS_TOKEN", accessToken)
                        .replace("TYPE", type);
                log.info("MEDIA_UPLOAD_URL:{}",url);
    
                //设置请求体,注意是LinkedMultiValueMap
                MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
                FileSystemResource fileSystemResource = new FileSystemResource(filePath);
                form.add("media", fileSystemResource);
    
                //设置请求头
                HttpHeaders headers = new HttpHeaders();
                headers.setContentType(MediaType.MULTIPART_FORM_DATA);
    
                //用HttpEntity封装整个请求报文
                HttpEntity<MultiValueMap<String, Object>> data = new HttpEntity<>(form, headers);
                try{
                    //这里RestTemplate请求返回的字符串直接转换成JSONObject会报异常,后续深入找一下原因
                    String resultString = restTemplate.postForObject(url, data, String.class);
                    log.info("上传返回的信息是:{}",resultString);
                    if(!StringUtils.isEmpty(resultString)){
                        JSONObject jsonObject = JSONObject.parseObject(resultString);
                        return jsonObject.getString("media_id");
                    }
                }catch (Exception e){
                    log.error(e.getMessage());
                }
    
            }
            return null;
        }

    我们在swagger中新建一个Controller用以提交我们的上传请求,并测试我们的代码是否正确

    @ApiOperation(value = "上传临时素材")
        @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
        @ApiImplicitParams({
                @ApiImplicitParam(name="filePath",value="文件位置", paramType="query",dataType="String"),
                @ApiImplicitParam(name="type",value="媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)", paramType="query",dataType="String"),
    
        })
        public Object upload(String filePath, String type) throws Exception{
    
            String result = uploadUtil.uploadFile(filePath,type);
            return result;
        }

    启动我们的项目,在swagger中输入一个有效的文件路径(这里假如是图片类型),type设置为image

     

    可以看到,我们成功上传了临时文件,并获取到了该文件的media_id(这个后续很重要!!!)

     

    二、获取临时素材

    临时素材主要分为三类(图片、音频,视频),图片和音频文件支持下载到本地,视频文件支持获取视频的URL地址

    (1)获取临时图片

     

    /**
         * 公众号可以使用本接口获取临时素材(即下载临时的多媒体文件)
         * 1、如果是图片,则下载图片
         */
        public ResponseEntity<byte[]> getImage(String mediaId){
    
            String accessToken = accessTokenUtil.getAccessToken();
            if(accessToken != null) {
                String url = URIConstant.MEDIA_GET_URL.replace("ACCESS_TOKEN", accessToken)
                        .replace("MEDIA_ID", mediaId);
                log.info("MEDIA_GET_URL:{}", url);
    
                String fileName = mediaId+ ".jpg";
                HttpHeaders headers = new HttpHeaders();
                try {
                    fileName = new String(fileName.getBytes("GBK"), "ISO-8859-1");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                headers.setContentDispositionFormData("attachment", fileName);// 文件名称
                ResponseEntity<byte[]> responseEntity = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(headers), byte[].class);
                return responseEntity;
            }
            return null;
        }

    (2)获取临时音频

    /**
         * 公众号可以使用本接口获取临时素材(即下载临时的多媒体文件)
         * 1、如果是声音,则下载声音
         */
        public ResponseEntity<byte[]> getVoice(String mediaId){
    
            String accessToken = accessTokenUtil.getAccessToken();
            if(accessToken != null) {
                String url = URIConstant.MEDIA_GET_URL.replace("ACCESS_TOKEN", accessToken)
                        .replace("MEDIA_ID", mediaId);
                log.info("MEDIA_GET_URL:{}", url);
    
                String fileName = mediaId+ ".speex";
                HttpHeaders headers = new HttpHeaders();
                try {
                    fileName = new String(fileName.getBytes("GBK"), "ISO-8859-1");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                headers.setContentDispositionFormData("attachment", fileName);// 文件名称
                ResponseEntity<byte[]> responseEntity = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(headers), byte[].class);
                return responseEntity;
            }
            return null;
        }

     (3)获取视频素材地址

    /**
         * 公众号可以使用本接口获取临时素材(即下载临时的多媒体文件)
         * 2、如果是视频,则返回视频的地址
         */
        public String getVedio(String mediaId){
    
            String accessToken = accessTokenUtil.getAccessToken();
            if(accessToken != null) {
                String url = URIConstant.MEDIA_GET_URL.replace("ACCESS_TOKEN", accessToken)
                        .replace("MEDIA_ID", mediaId);
                log.info("MEDIA_GET_URL:{}", url);
    
                String responseString = restTemplate.getForObject(url,String.class);
                return responseString;
            }
            return null;
        }

     三、测试

    这里我们仅以上传临时图片素材并下载临时图片素材为例,我们在我们的Controller中新增一个根据media_id获取临时图片类型素材的方法

    我们把我们刚才上传临时素材成功返回的media_id传给我们的方法

     

    可以看到我们的swagger返回带有Download file的超级链接,点击即可下载我们的图片,当然我们可以直接在浏览器直接输入我们的完整请求地址

    http://localhost/material/getFile?mediaId=C3Vd7uR-MKY5bOkyT5hWGaS-icl3av7GahjM9E9Hx9i8nonxg4PNtE-s7TbYSseV

    点击这个Download File,我们成功的下载到这个上传的临时图片

     试着打开这个文件,我们可以看到,这个确实是我们上传的图片

     这里贴出完整的代码,自行修改以获得其他类型的临时文件,不做赘述

    UploadUtil.java
    package com.xu.wemall.components.weixin;
    
    import com.alibaba.fastjson.JSONObject;
    import com.xu.wemall.commons.constants.URIConstant;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.core.io.FileSystemResource;
    import org.springframework.http.*;
    import org.springframework.stereotype.Component;
    import org.springframework.util.LinkedMultiValueMap;
    import org.springframework.util.MultiValueMap;
    import org.springframework.util.StringUtils;
    import org.springframework.web.client.RestTemplate;
    
    import java.io.UnsupportedEncodingException;
    
    /**
     * 功能:临时素材工具类
     */
    @Slf4j
    @Component
    public class UploadUtil {
    
        @Autowired
        private RestTemplate restTemplate;
    
        @Autowired
        private AccessTokenUtil accessTokenUtil;
    
        /**
         * 上传临时素菜
         * 1、临时素材media_id是可复用的。
         * 2、媒体文件在微信后台保存时间为3天,即3天后media_id失效。
         * 3、上传临时素材的格式、大小限制与公众平台官网一致。
         * @param filePath
         * @param type
         * @return
         */
        public String uploadFile(String filePath,String type) {
    
            String accessToken = accessTokenUtil.getAccessToken();
            if (accessToken != null) {
                String url = URIConstant.MEDIA_UPLOAD_URL.replace("ACCESS_TOKEN", accessToken)
                        .replace("TYPE", type);
                log.info("MEDIA_UPLOAD_URL:{}",url);
    
                //设置请求体,注意是LinkedMultiValueMap
                MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
                FileSystemResource fileSystemResource = new FileSystemResource(filePath);
                form.add("media", fileSystemResource);
    
                //设置请求头
                HttpHeaders headers = new HttpHeaders();
                headers.setContentType(MediaType.MULTIPART_FORM_DATA);
    
                //用HttpEntity封装整个请求报文
                HttpEntity<MultiValueMap<String, Object>> data = new HttpEntity<>(form, headers);
                try{
                    //这里RestTemplate请求返回的字符串直接转换成JSONObject会报异常,后续深入找一下原因
                    String resultString = restTemplate.postForObject(url, data, String.class);
                    log.info("上传返回的信息是:{}",resultString);
                    if(!StringUtils.isEmpty(resultString)){
                        JSONObject jsonObject = JSONObject.parseObject(resultString);
                        return jsonObject.getString("media_id");
                    }
                }catch (Exception e){
                    log.error(e.getMessage());
                }
    
            }
            return null;
        }
    
        /**
         * 公众号可以使用本接口获取临时素材(即下载临时的多媒体文件)
         * 1、如果是图片,则下载图片
         */
        public ResponseEntity<byte[]> getImage(String mediaId){
    
            String accessToken = accessTokenUtil.getAccessToken();
            if(accessToken != null) {
                String url = URIConstant.MEDIA_GET_URL.replace("ACCESS_TOKEN", accessToken)
                        .replace("MEDIA_ID", mediaId);
                log.info("MEDIA_GET_URL:{}", url);
    
                String fileName = mediaId+ ".jpg";
                HttpHeaders headers = new HttpHeaders();
                try {
                    fileName = new String(fileName.getBytes("GBK"), "ISO-8859-1");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                headers.setContentDispositionFormData("attachment", fileName);// 文件名称
                ResponseEntity<byte[]> responseEntity = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(headers), byte[].class);
                return responseEntity;
            }
            return null;
        }
    
        /**
         * 公众号可以使用本接口获取临时素材(即下载临时的多媒体文件)
         * 1、如果是声音,则下载声音
         */
        public ResponseEntity<byte[]> getVoice(String mediaId){
    
            String accessToken = accessTokenUtil.getAccessToken();
            if(accessToken != null) {
                String url = URIConstant.MEDIA_GET_URL.replace("ACCESS_TOKEN", accessToken)
                        .replace("MEDIA_ID", mediaId);
                log.info("MEDIA_GET_URL:{}", url);
    
                String fileName = mediaId+ ".speex";
                HttpHeaders headers = new HttpHeaders();
                try {
                    fileName = new String(fileName.getBytes("GBK"), "ISO-8859-1");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                headers.setContentDispositionFormData("attachment", fileName);// 文件名称
                ResponseEntity<byte[]> responseEntity = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(headers), byte[].class);
                return responseEntity;
            }
            return null;
        }
    
        /**
         * 公众号可以使用本接口获取临时素材(即下载临时的多媒体文件)
         * 2、如果是视频,则返回视频的地址
         */
        public String getVedio(String mediaId){
    
            String accessToken = accessTokenUtil.getAccessToken();
            if(accessToken != null) {
                String url = URIConstant.MEDIA_GET_URL.replace("ACCESS_TOKEN", accessToken)
                        .replace("MEDIA_ID", mediaId);
                log.info("MEDIA_GET_URL:{}", url);
    
                String responseString = restTemplate.getForObject(url,String.class);
                return responseString;
            }
            return null;
        }
    
    
    
    }
    
    
    

    谢谢各位,我们下回继续再说!

    展开全文
  • 1.新增临时素材:公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来进行的。素材管理接口对所有认证的订阅号和...

    1.新增临时素材:

    公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、

    媒体消息的获取和调用等操作,是通过media_id来进行的。素材管理接口对所有认证的订阅号和服务号开放。通过本接口,公

    号可以新增临时素材(即上传临时多媒体文件)。

    注意点:

    1、临时素材media_id是可复用的。

    2、媒体文件在微信后台保存时间为3天,即3天后media_id失效。

    3、上传临时素材的格式、大小限制与公众平台官网一致。

    图片(image): 2M,支持PNG\JPEG\JPG\GIF格式

    语音(voice):2M,播放长度不超过60s,支持AMR\MP3格式

    视频(video):10MB,支持MP4格式

    缩略图(thumb):64KB,支持JPG格式

    4、需使用https调用本接口。

    接口调用说明:
    http请求方式:POST/FORM,使用https
    https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE
    2.新增永久素材:

    对于常用的素材,开发者可通过本接口上传到微信服务器,永久使用。新增的永久素材也可以在公众平台官网素材

    管理模块中查询管理。

    请注意:

    1、最近更新:永久图片素材新增后,将带有URL返回给开发者,开发者可以在腾讯系域名内使用(腾讯系域名外使用,图片将被屏蔽)。

    2、公众号的素材库保存总数量有上限:图文消息素材、图片素材上限为5000,其他类型为1000。

    3、素材的格式大小等要求与公众平台官网一致:

    图片(image): 2M,支持bmp/png/jpeg/jpg/gif格式

    语音(voice):2M,播放长度不超过60s,mp3/wma/wav/amr格式

    视频(video):10MB,支持MP4格式

    缩略图(thumb):64KB,支持JPG格式

    4、图文消息的具体内容中,微信后台将过滤外部的图片链接,图片url需通过"上传图文消息内的图片获取URL"接口上传图片获取。

    5、"上传图文消息内的图片获取URL"接口所上传的图片,不占用公众号的素材库中图片数量的5000个的限制,图片仅支持jpg/png格式,大小必须在1MB以下。

    6、图文消息支持正文中插入自己帐号和其他公众号已群发文章链接的能力。

    接口调用说明:
    http请求方式: POST,https协议
    https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=ACCESS_TOKEN
    返回说明
    {
       "media_id":MEDIA_ID
    }

    返回图文消息内的图片获取URL

    本接口所上传的图片不占用公众号的素材库中图片数量的5000个的限制。图片仅支持jpg/png格式,大小必须在1MB以下。

    接口调用请求说明

    http请求方式: POST,https协议
    https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN
    调用示例(使用curl命令,用FORM表单方式上传一个图片):

    返回说明 正常情况下的返回结果为:

    {
    
    "url":  "http://mmbiz.qpic.cn/mmbiz/gLO17UPS6FS2xsypf378iaNhWacZ1G1UplZYWEYfwvuU6Ont96b1roYs CNFwaRrSaKTPCUdBK9DgEHicsKwWCBRQ/0"
    
    }

    解说:

    图片上传到服务器:首先获取到正在使用的公众号mp_id,图片在本地服务器上的路径(相对路径)转换为绝对路径,获取access_token,从数据表中获取到status_type判断临时还是永久,如果为0为临时素材,如果为1为永久素材。用isset判断是否存在media_id存在则将图片添加到数据表。

     //图片上传公众号服务器
    	public function image_submit(){
    		//获取正在使用的公众号
    		$mp = $this->mp;
    		//图片在本地服务器上的路径
    		$url = I('post.url');
    		//相对路径->绝对路径
    		$file = realpath('.'.$url);
    		// echo $file;
    		// exit;
    		$status_type = I('post.status_type');//临时,永久
    
    		$accessToken = getAccess_token();//获取access_token
    		include APP_PATH.'LaneWeChat/lanewechat.php';
    
    		if($status_type == 0){
    			//临时素材
    			$url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=$accessToken&type=image";
    		}else{
    			//永久素材
    			$url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=$accessToken&type=image";
    		} 
    
    		$data['media'] = Curl::addFile($file);
    		$ret = Curl::callWebServer($url,$data,'post',true,false);
            
            //写入数据库
            if(isset($ret['media_id'])){
            	$mp = $this->mp;
            	$data['mpid'] = $mp['id'];
            	$data['type'] = 'image';
            	$data['url'] = $url;
            	$data['media_id'] = $ret['media_id'];
            	$data['create_time'] = time();
            	M('material')->add($data);
            	$this->ajaxReturn(array('msg'=>'上传成功'));
            }else{
                $this->ajaxReturn($ret);
            }
    		
    
    	}

    上传图文消息到公众号服务器解说:

    同上传图片到公众号服务器相同首先获取到正在使用的公众号mp_id,图片在本地服务器上的路径(相对路径)转换为绝对路径,获取access_token,不同的是要另外获取填写的标题,内容,链接。上传的图文消息为永久素材所以不用判断。直接用用isset判断是否存在media_id存在则将图片添加到数据表。

    //上传图文消息到公众号服务器
    	public function news_submit(){
    		//获取正在使用的公众号
    		$mp = $this->mp;
    		//图片在本地服务器上的路径
    		$url = I('post.url');
    		//相对路径->绝对路径
    		$file = realpath('.'.$url);
    		// echo $file;
    		// exit;
    		$title = I('post.title');//标题
    		$content = I('post.content');//内容
    		$link = I('post.link');//链接
    
    
    		$accessToken = getAccess_token();//获取access_token
    		include APP_PATH.'LaneWeChat/lanewechat.php';
    
    		//上传永久图文api
    		$api = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=$accessToken&type=image";
    
    		$data['media'] = Curl::addFile($file);
    		$ret = Curl::callWebServer($api,$data,'post',true,false);
    		// $this->ajaxReturn($ret);
    		// exit;
    
    		 //写入数据库
            if(isset($ret['media_id'])){
            	$arr = array(
            		'title' => $title,
            		'type' => 'image',
            		'url' => $url,
            		'thumb_media_id' =>$ret['media_id'],
            		'author' => 'yxy',
            		'digest' => 'bbbbb',
            		'show_cover_pic' => 1,
            		'content' => $content,
            		'create_time' => time(),
            		'content_source_url' => $link,
            		'media_id' => $ret['media_id'],
            	);
    
            	$data['articles'][] = $arr;
            	$data = json_encode($data,JSON_UNESCAPED_UNICODE);
            	$api = "https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=$accessToken";
            	$ret = Curl::callWebServer($api,$data,'post',true,false);
    
            	if(isset($ret['media_id'])){
            		$mp = $this->mp;
            		$arr['mpid'] = $mp['id'];
            		// print_r($arr);
            		// exit;
            		M('material')->add($arr);	
            	    // $this->ajaxReturn(array('msg'=>'上传成功'));
            	}   	
            	$this->ajaxReturn($ret);
            }else{
                $this->ajaxReturn($ret);
            }
    
    	}






    展开全文
  • 三、新增临时素材

    2019-07-26 19:00:05
    三、新增临时素材 1.官方文档 公众号在发送信息时,可能会用到一些临时的多媒体信息,对多媒体文件、多媒体信息获取和调用等操作,是通过media_id来进行的,通过新增临时素材接口,可以上传多媒体文件。 注:...

    三、新增临时素材

     

    1.官方文档

           公众号在发送信息时,可能会用到一些临时的多媒体信息,对多媒体文件、多媒体信息获取和调用等操作,是通过media_id来进行的,通过新增临时素材接口,可以上传多媒体文件。

           注:临时素材只能在微信服务器保存三天,所以在使用临时素材之前应该先判断临时素材是否有效

    1.1接口调用说明

    调用此接口,要求使用post方式且必须为https协议,这里文档推荐我们是curl命令行工具模拟表单post,我们考虑到安全性(服务器里调用exe程序是非安全的且可能没有权限),这里我们还是使用webrequest模拟表单向微信接口发出post请求

    ​1.2接口返回说明

    文件上传成功后,返回上传的文件类型、媒体文件上传时间戳,以及最重要的media_id,我们可以将这些信息存入数据库中,当要使用时,从数据库取出,先通过create_at字段判断文件是否过期,在进行后续操作

    2.开发应用:

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    //1.定义接口url
     
     
    //2.发送带文件流的数据post到微信接口
     
    string jsonstr = Funcs.PostFormData(new List<FormItem>() {
     
    new FormItem(){Name="access_token",Value=AcessToken.GetAcessToken(),ParamType=ParamType.Text},
     
    new FormItem(){Name="type",Value="image",ParamType=ParamType.Text},
     
    new FormItem(){Name="media",Value=context.Server.MapPath("/images/a.jpg"),ParamType=ParamType.File}
     
    }, url);
     
    //3.解析返回json字符串
     
    if (jsonstr.IndexOf("media_id") > -1)
     
    {
     
        MediaResult result = JsonConvert.DeserializeObject<MediaResult>(jsonstr);
     
        //将获取到的media_id以及过期时间等存储到数据库中
     
        context.Response.Write("MEDIA_ID:" + result.MEDIA_ID + ",created_at:" + TimeStampUtils.GetTime(result.created_at.ToString()));
     
    }
     
    else
     
    {
     
        ErrorResult result = JsonConvert.DeserializeObject<ErrorResult>(jsonstr);
     
        context.Response.Write("errcode:" + result.errcode + ",errmsg:" + result.errmsg);
     
    }

     

    注:Funcs.PostFormData方法分别传入url和参数集合(参数名、参数值、参数类型),返回响应html字符串

    结果:





    转载于:https://www.cnblogs.com/notniu/p/4431128.html

    展开全文
  • 微信公众号开发--新增临时素材

    千次阅读 2018-11-18 16:55:54
    在近日的微信公众号开发中,遇到临时素材的提交 遇到错误码45001 显示媒体文件不存在,返回代码打印了文件路径,发现路径没有任何问题,继续重来还是45001。 过了会弹出api访问超过当日次数,更郁闷了,明明没有...
  • 用java代码上传图片不知道怎么上传图片,有那位大神做过没有请指教小弟一下
  • php 微信新增临时素材

    万次阅读 2018-08-13 09:35:08
     2:临时素材media_id是可复用的。  如果是php5.3以下的版本path路径需要带上@,加文本绝对路径,5.3以上的版本需要用new curlFile()类获取绝对地址 $path = new CURLFile(realpath('G:/xampp/htdocs/wx/app/...
  • 微信公众号
  • php 微信新增永久素材

    万次阅读 2018-08-13 09:34:49
    微信的新增永久素材,最重要的是图文素材,基本流程是如下:   获取access_token; 上传封面素材,获取永久素材的media_id,可以是images或者thumb类型都可以 上传图文中的图片,获取图片的腾讯域名的url 上传...
  • 获取永久素材、删除永久素材新增永久素材 需要认证号(认证订阅号/认证服务号),且接口调用次数限制为10次/天,超过就会报{ [errcode] => 45009 [errmsg] => reach max api daily quota limit hint: [UOnSja0283...
  • 简介 微信素材分为临时素材和永久素材两种 新增临时素材 公众号经常有需要用到一些临时性的多媒体素材的...通过本接口,公众号可以新增临时素材(即上传临时多媒体文件)。 注意点: 1、临时素材media_id
  • 公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来进行的。 接口开放权限:素材管理接口对所有认证的订阅号和...
  • 三个文件: upload.php class.php config.php upload.php require_once("config.php"); require_once("class.php"); $accessToken = new AccessToken(); $mediaID = new MediaID();...$access_token = $access
  • //转载 记录一下这些都是测试过后可以使用的代码!本博文是记录一下。怎么上传临时的素材后获取id然后进行... php 微信开发之新增上传/获取下载临时素材 代码 define("AppID","");//你的id define("AppSecret", "");
  • 这里需要说一下图片,语音,视频的回复消息构造,这三种消息构造时的都需要一个mediaId,而这个mediaId是通过素材管理接口上传多媒体文件得到的,为了构造图片,语音,视频的这几种回复消息,我事先准备好了测试素材,如下图...
  • 1.对于临时素材,每个素材(media_id)会在开发者上传或粉丝发送到微信服务器3天后自动删除(所以用户发送给开发者的素材,若开发者需要,应尽快下载到本地),以节省服务器资源(对于用户上传的临时素材,我们是不是...
  • Java微信公众平台开发之素材管理

    千次阅读 2019-12-20 22:36:10
    本文只对新增临时素材,新增永久素材做介绍,其余获取、删除、修改自行补充 公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是...
  • 公众号上传临时素材获取media_id

    千次阅读 2018-01-15 11:13:39
    公众号上传临时素材获取media_idjava语言 更新于2018-01-15 public class Util{ private static final String UPLOAD_URL = ...
  • 1、上传临时素材到公众号遇到的问题:"errcode":41005,"errmsg":"media data missing 解决办法:因为php版本的原因,上传素材一直保错。php的curl的curl_setopt 函数存在版本差异 php5.5已经把通过@加文件...
  • 解决办法:因为php版本的原因,上传素材一直保错。php的curl的curl_setopt 函数存在版本差异 php5.5已经把通过@加文件路径上传文件的方式给放入到Deprecated中了。php5.6默认是不支持这种方式了 特殊处理1...
1 2 3 4 5 ... 20
收藏数 975
精华内容 390
关键字:

新增临时素材