微信公众后台开发之素材管理

来源:互联网 发布:mac os 10.12.6 降级 编辑:程序博客网 时间:2024/06/05 18:14

微信公众后台开发之素材管理

        最近应公司要求,对公司的微信公众号后台走升级,添加部分功能,其中就是需要在后台上传图片,而公众号回根据用户的按钮点击事件返回后台上传的图片。看着就是简单的需求,但是还是要先了解下微信开发文档,在来做开发微信开发文档。
       看过文档后发现不是想象中的那么简单,这里涉及到三个系统的交互,一个是用户的收集,一个是自己的后台服务器,一个是微信服务器,做公众号的图片回复的时候,需要将图片上传到微信服务器,获取素材的media_id,然后使用media_id组装成微信规定的XML信息模板,当用户点击按钮的时候,返回给用户上传的图片。
       微信对上传的素材做了区分,分别为:临时素材和永久素材,他们上传的方式也不一样,同时也会有要求。对于永久素材,需要做删除操作。我使用PHP做开发,首先看看上传临时素材,文档给了我们URL和请求的方法。然后做编程。编程先把请求的方法包装下:
protected static function https_request($url, $data = null){ //创建一个新cURL资源 $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;}
上包装了对请求的操作,接下来就是做上传素材了,微信不接受网络素材,只好是自己的本地图片做上传,这里写了一个方法来做上传临时素材:
//获取上传图片的medioId 添加临时素材public function get_media_id($imgUrl){     $TOKEN="idtbxhOnI4YZ8gFRHeUEU-MYk4T3XxVndEZKvx2jlx3dGteEWEyG6Twck9MTgsyXRl_MqyBhgYa4w73mjGnvXH17Nguhqs7Z2QCpCu7SvzUYIWjAHALVJ";      $URL ='http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token='.$TOKEN.'&type=image';    $filedata = array("media"  => "@".$imgUrl);   $result =$this->https_request($URL,$filedata);   echo var_dump($result).'<br>';   $res = json_decode($result,true);    return $res;}
上面的TOKEN是微信自己公众号的accessToken,可以通过文档网页测试来获取做测试,也可以自己写方法获取,这里就不写了,通过给参数$imageUrl就可以获得media_id,在使用media_id就可以在公众号显示了,上传永久素材和上传临时素材是一样的,只是链接不一样:
 //添加永久素材    public function uploadImg($imgUrl){        $TOKEN="7ZT1cX_zIh0PFJnINPPaVew5yIDAU9N0umuwt5kmyuMwGVW2LCCTmokixxt99Rix0NixyKiQP-kB-T8KxYNllkRz7pZ7znWfIKOkK8bYUmsCFIgAFAFIL";        $url = 'https://api.weixin.qq.com/cgi-bin/material/add_material?access_token='.$TOKEN.'&type=image';//         $URL ='http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token='.$TOKEN.'&type=image';        $data = array('media'=>'@'.$imgUrl);        $result = $this->https_request($url,$data);        $data = @json_decode($result,true);        return $data['media_id'];//         return $data;    }

这是不是很简单,现在看看如何删永久素材,删除素材,首先要获取素材的media_id,在通过media_id来删除素材,这就需要我们自己先保存上传后的素材media_id,方便我们做删除操作。这里直接给出代码:
   public function del_media($media_id){         $TOKEN="7ZT1cX_zIh0PFJnINPPaVew5yIDAU9N0umuwt5kmyuMwGVW2LCCTmokixxt99Rix0NixyKiQP-kB-T8KxYNllkRz7pZ7znWfIKOkK8bYUmsCFIgAFAFIL";         $media_id = 'b6geinBHCE6Z3WrilwK0NEeVU4JZDlcdebGYQrYOy-k';//          $media_id = 'b6geinBHCE6Z3WrilwK0NBO88W4Q5nNrhWQOiUKQouA';         $url = 'https://api.weixin.qq.com/cgi-bin/material/del_material?access_token='.$TOKEN;         $data = '{"media_id":"%s"}';         $data = sprintf($data,$media_id);         $result = $this->https_request($url,$data);         $res = json_decode($result,true);         return $res;     }

这里要注意下请求的参数的格式一定要多注意,否则会报错。


1 0
原创粉丝点击