php 微信新增永久素材

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

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

猜你喜欢

转载自blog.csdn.net/benli8541/article/details/112914109