微信素材_微信上传素材 - CSDN
精华内容
参与话题
  • 微信小程序图片素材

    2020-07-30 23:33:28
    微信小程序图片素材,爆款界面图片收集,
  • 2.将图片上传到微信临时素材中,是有有效期的生成serviceid 3.前端将serviceid传给后台,后台通过serviceid去微信下载临时素材保存到服务器 4.保存成功告诉前台保存成功 此处展示后台通过前台给的serviceid下载...
    微信上传图片到本地服务器的流程
    1.前端通过微信jssdk里面的图片上传功能,找到本地图片生成localid
    2.将图片上传到微信临时素材中,是有有效期的生成serviceid
    3.前端将serviceid传给后台,后台通过serviceid去微信下载临时素材保存到服务器
    4.保存成功告诉前台保存成功
    
    
    此处展示后台通过前台给的serviceid下载临时素材
    /**
         * 微信下载临时素材  serviceid 为微信服务器上存放临时素材的标识
         */
        public function DownImage($serviceid){
            //获取临时素材
            $imageAll = $this->test($serviceid);
            $savename = md5(microtime(true));
            $savename = $savename.mt_rand(1,9999).".jpg";
            //图片保存到服务器
            $imgurl = $this->saveWeixinFile($savename,$imageAll['body']);
            return $imgurl;
        }
        /**
         * 从微信下载图片
         */
        public function test($serviceid){
            $wx = $this->getCacheToken();
            $url = "https://api.weixin.qq.com/cgi-bin/media/get?access_token=".$wx['value']."&media_id=".$serviceid;
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_HEADER, 0);    
            curl_setopt($ch, CURLOPT_NOBODY, 0);    //只取body头
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $package = curl_exec($ch);
            $httpinfo = curl_getinfo($ch);
            curl_close($ch);
            $imageAll = array_merge(array('header' => $httpinfo), array('body' => $package)); 
            return $imageAll;
        }
    
        //获取access_token   我的access_token存在了数据库里面,具体方法在文章jssdk里面
        private function getCacheToken()
        {
            $time = time();
            $where['name'] = ['=','access_token'];
            $where['expire_time'] = ['>',$time];
            $result = model('wx')->WxFind($where);
            return $result;
        }
    
        /**
         * 保存图片
         * @param  [type] $filename    [description]
         * @param  [type] $filecontent [description]
         * @return [type]              [description]
         */
        private function saveWeixinFile($filename,$filecontent)
        { 
            $path = "uploads/".date('Ymd');//路径
            $a = is_dir($path);
            if (!$a) {
                mkdir($path,0777,true);
            }
            $imageSrc = $path."/".$filename; //图片名字
            $imgpath = ROOT_PATH."public/".$imageSrc;
            $imgpath = str_replace("\\","/",$imgpath);
            $local_file = fopen($imgpath, 'w');
            if (false !== $local_file){
                if (false !== fwrite($local_file, $filecontent)) {
                    $imageSrc = config('http_url')."/".$path."/".$filename;
                    fclose($local_file);
                    return $imageSrc;
                }
            }
    
        }

     

    展开全文
  • 微信公众号获取永久素材

    千次阅读 2019-05-09 13:01:59
    这里不会介绍如何获取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();
        }
    

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

    展开全文
  • * 获取素材列表[永久] * $material_type [类型] image/video/voice/news 图片 视频 语音 图文 * QVqFyY4hY4_xpPf_lO2OG1fIslTDY4wzkgg72IOeoDo * QVqFyY4hY4_xpPf_lO2OG80_sJiK4v2BGGq1-cwQSLU */ fun

    注意:获取永久素材/删除永久素材/新增永久素材 需要认证号,且接口限制为10

    /**
         * 获取素材列表[永久]
         * $material_type [类型] image/video/voice/news 图片 视频 语音 图文
         * QVqFyY4hY4_xpPf_lO2OG1fIslTDY4wzkgg72IOeoDo
         * QVqFyY4hY4_xpPf_lO2OG80_sJiK4v2BGGq1-cwQSLU
         */
        function getMaterial($material_type="image",$offset=0,$count=20){
            $access_token=$this->getAccessToken();  
            $type = $material_type;
            $url = 'https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token='.$access_token;
            $filedata = array(
                'type' => $type,
                'offset' => $offset,
                'count' => $count
            );
            $filedata = json_encode($filedata,true);
            $result = $this->https_request($url, $filedata);
            $result = json_decode($result, true);
            dump($result);
        }
    
        /**
         * 删除永久素材
         * 
         */
        function delMaterial($media_id){
            $access_token = $this -> getAccessToken();
            $url="https://api.weixin.qq.com/cgi-bin/material/del_material?access_token=".$access_token;
            if(empty($media_id)){
                $this-> error('素材ID不能为空');
            }
            $filedata = array( 'media_id'=> $media_id);
            $filedata = json_encode($filedata,true);
            $result = $this->https_request($url, $filedata);
            $result = json_decode($result, true);
            if($result['errcode']==0){
                echo "素材删除成功";
            }elseif ($result['errcode']==40007) {
                echo "素材ID不正确";
            }
            dump($result);
    
        }
    
        //https请求(支持GET和POST)
        protected function https_request($url, $data = null)
        {
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
            if (!empty($data)){
                curl_setopt($curl, CURLOPT_POST, 1);
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            }
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            $output = curl_exec($curl);
            curl_close($curl);
            return $output;
        }
    展开全文
  • 微信公众号开发之素材管理

    千次阅读 2019-07-23 13:49:13
    因公司项目需求,需要开发一套微信公众后台管理系统,因为个人能力和时间限制,这里选择了SDK开发。 选用的SDK是:Gaoming13/wechat-php-sdk github地址:https://github.com/gaoming13/wechat-php-sdk (之后...

    因公司项目需求,需要开发一套微信公众后台管理系统,因为个人能力和时间限制,这里选择了SDK开发。

    选用的SDK是:Gaoming13/wechat-php-sdk

    github地址:https://github.com/gaoming13/wechat-php-sdk

    (之后发现这个SDK太老了,不过有些还可以用。建议使用EasyWeChat官网:https://www.easywechat.com/

    这里主要做了永久素材的操作:素材新增、素材列表的获取、单个素材的获取、删除单个素材的功能

     一、首先,看一下sdk中api的初始化

    //api对象
    $this->api = new Api(array(
        'appId' => $this->AppID,
        'appSecret' => 	$this->AppSecret,
        'get_access_token' => function(){
        // 用户需要自己实现access_token的返回
            return cache('wechat_token');
         },
         'save_access_token' => function($token) {
         // 用户需要自己实现access_token的保存
             cache('wechat_token', $token);
         }
    ));

    access_token的存储我这里用的是缓存的形式。常用的还有两种方式就是文件存储形式和数据表存储。

    还有一点,我这里碰到的点小坑:

    更换微信公众号配置(APPID,secret等)后 ,可能用的还是之前的access_token,所以这里需要清一下缓存,方法是:

    cache('wechat_token',null)

    这里强调这一点的原因是,我用cache('wechat_token'," ")是清不掉的

     二、添加永久素材

    //上传文件及获取文件路径
    $file = $this->request->file('file');
    
    $filepath = \Env::get('root_path') . 'public' . DIRECTORY_SEPARATOR . 'wechat'.DIRECTORY_SEPARATOR.'img';
    
    $info = $file->move($filepath);
    
    $path = $filepath . DIRECTORY_SEPARATOR . $info->getSaveName();
    
    // 使用SDK上传素材到微信素材库
    $res=$this->api->add_material('image',$path);

    图片、语音的上传方法是一样的,上传语音只需把image改为voice即可

    这里需要注意的点是:

    1、上传到微信的文件路径,即$path不能直接用缓存文件的路径,需要将文件暂存到本地某个路径下,然后再去上传

    2、上传完后为了节省内存,需要将暂存的文件删除,删除的时候也有坑,就是删除文件之前,先需要解除绑定

    unset($info);//解除绑定
    unlink($path);//删除文件

    至于视频的添加,跟图片语音有点区别

    视频的话,一般需要加标题和描述,所以SDK的添加素材方法不知道为啥不能用了,项目紧急,就还换了curl包做了

    包地址:https://curl.haxx.se/download.html

    方法如下:

     $describe = array(
                'title'=>$title,
                'introduction'=>$introduction
            );
    
            $describe = json_encode($describe);
            $postPath = 'https://api.weixin.qq.com/cgi-bin/material/add_material?type=video&access_token='.$this->api->get_access_token();
    
            $curl = new \Curl\Curl();
            $curl->setOpt(CURLOPT_SSL_VERIFYPEER, false);
            $curl->setOpt(CURLOPT_SSL_VERIFYHOST, false);
            $curl->post($postPath, [
                'media' => new \CURLFile($path),
                'description' => $describe
            ]);

    添加的问题大概就这些

    三、获取素材列表

    $this->api->get_materials('news', 0, 20);
    $this->api->get_materials('image', 0, 20);
    $this->api->get_materials('voice', 0, 20);
    $this->api->get_materials('video', 0, 20);
    

    分别获取的是图文、图片、语音、视频的列表

    问题:防盗链问题

    获取的素材列表就是需要在项目的后台展示的,但是因为防盗链,素材是无法展示的

    网上查了查,有些说可以直接在html页面加

    <meta name="referrer" content="never">

    加了之后发现的确可以,但是有时候又不行,所以没办法,就在本地服务器存了一份,用media_id关联起来,后台显示直接用项目服务器上的媒体即可

    其他获取单个素材和删除素材的,基本没啥大问题,这里就不赘述了

    展开全文
  • 微信开发之素材管理是子恒老师《微信公众平台开发》视频教程的第三部。详细讲解了用php开发微信,对微信公众平台中的素材管理开发。内容包含微信临时素材,永久素材的上传,删除,获取素材的media_id等等。欢迎反馈...
  • 标签:  微信关注图片   微信点击关注图标   微信平台求关注图片 微信求关注动态图片 ...微信求关注图标素材 ...微信求关注图标素材微信求关注图片,微信求关注,微信求关注图标,微信求关注素材
  • 微信素材管理中,获取微信永久素材和临时素材需要media_id参数,这个参数需要通过上传素材来实现。调试工具地址:微信公众平台接口调试工具步骤一 1:接口类型:基础支持 2:接口列表:多媒体文件上传接口/media...
  • 微信上传临时素材的坑

    万次阅读 2018-01-09 16:18:47
    其中有这么一个场景,把七鱼发到我们服务器上的图片,当作临时素材上传到微信服务器上,此时微信服务器给我们返回素材对应的media_id,使用这个media_id我们可以讲图片推送给用户。微信官方api如下:点击打开链接 ...
  • 微信开发中使用curl上传永久素材

    千次阅读 2017-01-03 10:36:46
    关键字:curl、微信开发、上传永久素材前言微信开发,需要使用的素材(如图片、视频)必须先上传到微信服务器,通过微信服务器返回的meida_id在腾讯系域名内使用。当然可以直接使用代码来实现上传请求,获取微信...
  • 微信公众号上传临时素材

    千次阅读 2020-05-21 20:54:25
    高级群发接口比较简单(但需要认证).分别可以发送给全部粉丝,或者发送给特定标签下的用户,或者发送给特定用户(根据OpenID列表群发).消息的类型可以是:图文消息,文本消息,语音消息,图片消息,视频消息,卡券消息....
  • 调用高级接口,主动发图文信息。里面做好用到素材接口。个人服务器主动送送请求,腾讯服务器接受请求,并向手机微信客户端发送信息。
  • 微信飞机大战素材

    千次下载 热门讨论 2020-07-30 23:32:25
    微信飞机大战素材,来自http://blog.csdn.net/daoqin121
  • 用java代码上传图片不知道怎么上传图片,有那位大神做过没有请指教小弟一下
  • 微信公众号编辑器哪个好

    万次阅读 2019-04-01 18:25:34
    微信公众号的文案编辑一定都有这样的感受:微信后台的编辑器功能太少了,想要做出一篇样式精美、内容丰富的文章,非常有必要找到一款好用的微信编辑器。 市面上的微信编辑器那么多,哪一款最好用呢?今天我们就一...
  • 我通过https://mp.weixin.qq.com后台上传了几个永久语音素材,在使用“获取素材列表”这个接口时总是报40004、invalid media type hint错。 “调用示例”是什么意思呢?是要在access_tolen参数后面再加上去吗? **...
  • 微信上传永久素材接口开发(一)

    千次阅读 2016-05-30 15:32:50
    看了一下微信的开发文档,发现微信对于上传永久素材这个接口,给出的文档太过简略,而且提供的样例也不是代码的方式,只给了一个curl的命令,用法倒是简单,但是用JAVA代码去掉用curl命令还是有诸多的不方便的。...
  • 微信公众平台升级后,预览图文消息时页面会显示如下信息: 经过一番努力,小编最终找到了方法: >打开自己的微信给公众号发送一条消息; >在公众平台打开消息管理,给微信回复一条图文消息(从素材库中...
  • 开发微信公众号的时候遇到了很多细节的问题,不多...上面的图片是调用的是微信接收消息群发接口的一个上传图文消息素材的api,这里必须使用的thumb_id是临时素材的media_id,如果你使用的是永久素材的media_id就会报错。
  • java向微信服务器上传永久图片素材

    千次阅读 2016-09-22 09:43:58
    java利用ajaxFileUpload向微信服务器上传永久图片素材
1 2 3 4 5 ... 20
收藏数 12,830
精华内容 5,132
关键字:

微信素材