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

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

        最近应公司要求,对公司的微信公众号后台走升级,添加部分功能,其中就是需要在后台上传图片,而公众号回根据用户的按钮点击事件返回后台上传的图片。看着就是简单的需求,但是还是要先了解下微信开发文档,在来做开发微信开发文档
       看过文档后发现不是想象中的那么简单,这里涉及到三个系统的交互,一个是用户的收集,一个是自己的后台服务器,一个是微信服务器,做公众号的图片回复的时候,需要将图片上传到微信服务器,获取素材的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;
     }

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


发布了50 篇原创文章 · 获赞 27 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览