微信公众号开发(二)添加永久的素材
今天继续微信公众号的开发,上次我们说了获取accesstoken的方法。
这次我们来处理素材。在微信里面最重要的就是素材,我们作为服务器端,需要把文章,内容,图片先通过接口传到微信的服务器上,继而服务器会传给我们一个media_id,然后在才能达到通过media_id来处理推送消息什么的操作。
所以这次就需要把素材的管理来处理一下,首先就是添加图文素材,微信公众号写的很清楚,要处理图文素材的添加,需要传递以下参数。
title | 是 | 标题 |
thumb_media_id | 是 | 图文消息的封面图片素材id(必须是永久mediaID) |
author | 否 | 作者 |
digest | 否 | 图文消息的摘要,仅有单图文消息才有摘要,多图文此处为空。如果本字段为没有填写,则默认抓取正文前64个字。 |
show_cover_pic | 是 | 是否显示封面,0为false,即不显示,1为true,即显示 |
content | 是 | 图文消息的具体内容,支持HTML标签,必须少于2万字符,小于1M,且此处会去除JS,涉及图片url必须来源 "上传图文消息内的图片获取URL"接口获取。外部图片url将被过滤。 |
content_source_url | 是 | 图文消息的原文地址,即点击“阅读原文”后的URL |
没错,这个必须有,那么我们希望通过后台直接像发文章那样去直接推送信息的可能性没有了。(当然你可以直接通过接口的各种骚操作不断地存读数据库,来完成)
那么接下来我们就来上传一个图片的永久素材,然后通过后来的展示,来获取这个mediaid,然后使用它。
-----------------------------------------------------
新增其他类型永久素材、
我们看到文档的这个,ok来进行处理。
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
type | 是 | 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb) |
media | 是 | form-data中媒体文件标识,有filename、filelength、content-type等信息 |
type和access_token是你要处理的,另外就是用crul的post方法进行数据的传递。
由于使用的是CI框架,那么我做了一个model
起一个高大上的名字叫做wechat_model,里面有一个上传其他素材的方法(这个素材就是非图文的)
public function addMaterialOthers($type,$arr) { // var_dump($type);exit; $token = $this->getAccessToken(); $url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={$token}&type={$type}"; // $result = $this->https_request($url,$arr); $result=$this->https_request( $url, $arr); return $result; }
$token = $this->getAccessToken();
这个就是上次的微信公众平台的获取token的方法。
url是官方的url,arr是你的数组,这里注意是数组,不是json
然后是https_request方法
private 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); curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); $output = curl_exec($curl); // throw new Exception(curl_error($curl), curl_errno($curl)); curl_close($curl); return $output; }
这里有一点要注意,如果你的curl返回值是false,那么你需要打印下,看看是什么问题,就需要取消上面的注释
throw new Exception(curl_error($curl), curl_errno($curl));
说完这个model,我们去说前台的控制器。
首先是html
ajax传递的表单,我就不说了,不会也自求多福吧。
function add_material_others() { $pic_url = $this->input->post('pic_url',true); $title = $this->input->post('title',true); $des = $this->input->post('des',true); $type = $this->input->post('type',true); $arr = array('media'=> "@/data/public_html/uploads/article/2018/05/4e437e511fdf12452e402055135ac3f2.png"); $res = $this->Wechat_model->addMaterialOthers($type,$arr); var_dump($res); }
注意一下这里
$arr = array('media'=> "@/data/public_html/uploads/article/2018/05/4e437e511fdf12452e402055135ac3f2.png");
我们不用去管他官方的信息;form-data中媒体文件标识,有filename、filelength、content-type等信息
我们只需要把你的上传图片的绝对地址放进去即可。
我的是linux的,所以需要从根目录“/”算起。
记得前面加上@
获取绝对地址可以这样来写,通过当前目录的绝对地址来写
dirname(__FILE__);
然后如果增加成功就会返回这个神秘的mediaID了
如果失败,请先对照 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433747234
然后再看看vardump出来的结果,继续排查。
有了这个id,就可以为所欲为了。
这次学习的是微信公众号开发,其中的微信上传永久图片素材的方法。