微信公众号开发(六)素材管理
微信公众号在使用的接口的时候是通过media_id来进行的,所以在使用的接口的时候我们往往需要先上传素材,支持上传素材的格式和限制如下
- 图片(image): 2M,支持PNG\JPEG\JPG\GIF格式。
- 语音(voice):2M,播放长度不超过60s,支持AMR\MP3格式。
- 视频(video):10MB,支持MP4格式。
- 缩略图(thumb):64KB,支持JPG格式。
1、上传临时素材
媒体文件在微信后台保存时间为3天,即3天后media_id失效。详细文档请查看上传临时文件素材文档。 请求接口:https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE add_tmp_media.php,这里要注意PHP各版本间上传文件的差异。<?php
require_once("Utils.php");
if (class_exists('CURLFile')) {
//PHP5.5及以上
//realpath返回绝对路径
$filedata = array('media' => new CURLFile(realpath("images/img1.jpg")));
} else {
//PHP5.4及以下
$filedata = array('media' => '@'.realpath("images/img1.jpg"));
}
$url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=".Utils::get_access_token()."&type=image";
$result = Utils::https_request($url, $filedata);
echo $result;
返回结果如下:
2、获取临时素材消息 请求接口:https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID 视频文件不能直接使用本接口下载。 get_tmp_media.php
<?php返回的响应头如下:
@header('Content-type: text/plain;charset=UTF-8');
require_once("Utils.php");
$media_id = "F11GfZC5zzC5XjJ3v1ORqay5pMrrtzv5bREF7-7f_ohjwxfXAZ-vjO3VRaEaOu0f";
$url = "https://api.weixin.qq.com/cgi-bin/media/get?access_token="
.Utils::get_access_token()."&media_id=".$media_id;
$fileInfo = https_request($url);
$filename = "gg.jpg";
//$fileInfo["body"]保存了图片的内容
save_weixin_file($filename, $fileInfo["body"]);
var_dump($fileInfo);
//保存图片到本地
function save_weixin_file($filename, $fileConent)
{
$local_file = fopen($filename, "w");
if (false !== $local_file){
if (false !== fwrite($local_file, $fileConent)){
fclose($local_file);
}
}
}
function https_request($url)
{
$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是返回的图片
$package = curl_exec($ch);
//$httpinfo 响应头
$httpinfo = curl_getinfo($ch);
curl_close($ch);
//将body和响应头合并到一个数组
$imageAll = array_merge(array("header"=>$httpinfo), array("body"=> $package));
return $imageAll;
}
访问服务器上下载的文件,结果如下:
3、新增永久素材
对于常用的素材,开发者可通过本接口上传到微信服务器,永久使用。新增的永久素材也可以在公众平台官网素材管理模块中查询管理。除了可以上传以上提到的4种素材外,还可以上传图文素材。 以下是一些说明:
- 公众号的素材库保存总数量有上限:图文消息素材、图片素材上限为5000,其他类型为1000。
- 图文消息的具体内容中,微信后台将过滤外部的图片链接,图片url需通过"上传图文消息内的图片获取URL"接口上传图片获取。
- "上传图文消息内的图片获取URL"接口所上传的图片,不占用公众号的素材库中图片数量的5000个的限制,图片仅支持jpg/png格式,大小必须在1MB以下。
- 图文消息支持正文中插入自己帐号和其他公众号已群发文章链接的能力。
上传图文消息内的图片
本接口所上传的图片不占用公众号的素材库中图片数量的5000个的限制。图片仅支持jpg/png格式,大小必须在1MB以下。这里的图片是在图文消息的content字段里面使用的。接口:https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN add_news_img.php
<?php
require_once("Utils.php");
$url= "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=".Utils::get_access_token();
$pathArr = array("images/img1.jpg", "images/img2.jpg", "images/img3.jpg");
$result = uploa_imgs($url, $pathArr);
var_dump($result);
//上传多张图片
function uploa_imgs($url, $pathArr)
{
$resultArr = array();
forEach ($pathArr as $path)
{
if (class_exists('CURLFile')) {
//PHP5.5及以上
//realpath返回绝对路径
$filedata = array('media' => new CURLFile(realpath($path)));
} else {
//PHP5.4及以下
$filedata = array('media' => '@'.realpath($path));
}
$result = Utils::https_request($url, $filedata);
array_push($resultArr, $result);
}
return $resultArr;
}
返回结果如下: array(3) { [0]=> string(138) "{"url":"http:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/rE2vM1t75APxcWy4fPrtqYxJfTKgnQkoql6CW1Mp9kN0ARibjyWGqCD6w8AgcHUcN7iaRKmEIcVMBXzcicibEzw31w\/0"}" [1]=> string(135) "{"url":"http:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/rE2vM1t75APxcWy4fPrtqYxJfTKgnQkoK46dGsp7SJbWnDlrhaSC9ogrTC88KbXuibO8MEhCHwbxd006OmYQUxg\/0"}" [2]=> string(138) "{"url":"http:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/rE2vM1t75APxcWy4fPrtqYxJfTKgnQkoSzCu2VqqL6icnbf5Uq2b86wLOzUJCO9oyOYsyh2lnEzgicibHUdeicMGoQ\/0"}" }
上传图文消息
上传图文消息的接口是:https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=ACCESS_TOKEN。有关字段含义可以参考新增永久图文消息素材,此接口在测试号中一天只能调用10次。 add_news.php<?php返回如下: {"media_id":"FrsRJ3g3BHR-pIkuFLARnAwGsFjf8Rckbd63rFBsE4o"}
//<img src=\"http:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/rE2vM1t75APxcWy4fPrtqYxJfTKgnQkoql6CW1Mp9kN0ARibjyWGqCD6w8AgcHUcN7iaRKmEIcVMBXzcicibEzw31w\/0\"/>
require_once("Utils.php");
$newsjson = '{
"articles": [
{
"title": "第一个图文永久素材",
"thumb_media_id": "FrsRJ3g3BHR-pIkuFLARnHjI9Cq9lDFas4Kp8otlAUQ",
"author": "Perter",
"digest": "第一个图文永久素材摘要",
"show_cover_pic": 1,
"content": "123",
"content_source_url": "http://www.baidu.com"
}
]
}';
$url = "https://api.weixin.qq.com/cgi-bin/material/add_news?"
."access_token=".Utils::get_access_token();
Utils::logger($url);
$result = Utils::https_request($url, $newsjson);
echo $result;
注意这里的thumb_media_id要使用永久素材接口上传接口获得,并将type设为thumb,,有时可能会返回{"errcode":40007,"errmsg":"invalid media_id hint: [UNi0871e541]"} 网上有一些解决方案是换成临时素材接口,但是这在最新版中是不正确的,原因是永久图文的json字符串错误,找到就可以了。
上传其他素材消息
其他素材包括图片(image)、语音(voice)、视频(video)和缩略图(thumb),图片素材将进入公众平台官网素材管理模块中的默认分组。视频消息还要多post一个description表单过去,description格式如下:{
"title":VIDEO_TITLE,
"introduction":INTRODUCTION
}
发送图片 add_material.php
<?php
require_once("Utils.php");
$url= "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=".Utils::get_access_token()."&type=image";
$pathArr = array("images/img1.jpg", "images/img2.jpg", "images/img3.jpg");
$result = uploa_imgs($url, $pathArr);
var_dump($result);
//上传多张图片
function uploa_imgs($url, $pathArr)
{
$resultArr = array();
forEach ($pathArr as $path)
{
if (class_exists('CURLFile')) {
//PHP5.5及以上
//realpath返回绝对路径
$filedata = array('media' => new CURLFile(realpath($path)));
} else {
//PHP5.4及以下
$filedata = array('media' => '@'.realpath($path));
}
$result = Utils::https_request($url, $filedata);
array_push($resultArr, $result);
}
return $resultArr;
}
结果如下,仅图片才有url字段返回。
array(3) { [0]=> string(210) "{"media_id":"FrsRJ3g3BHR-pIkuFLARnPz6IegQ220nYBKW4KIjzWo","url":"http:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/rE2vM1t75APxcWy4fPrtqYxJfTKgnQkoUPZ1Bdf9W7ncib8AB0AQaa0LUibWYicLJ1ZbiacUdDQian9us7E5p2Rxiaiaw\/0?wx_fmt=jpeg"}" [1]=> string(205) "{"media_id":"FrsRJ3g3BHR-pIkuFLARnAte6HkrmV3Ll7zhmoGyZwE","url":"http:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/rE2vM1t75APxcWy4fPrtqYxJfTKgnQkolMOlXOZazUNdDXaxTiabEB8xHDBa3lfjupHWn2vxicToxEVcfk5vRmxg\/0?wx_fmt=jpeg"}" [2]=> string(204) "{"media_id":"FrsRJ3g3BHR-pIkuFLARnDyvPgsg0lz6TKJvRMCaIhg","url":"http:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/rE2vM1t75APxcWy4fPrtqYxJfTKgnQkoEXUXh2653R0tIZCdsoMq2KPvENbOGWAt0qUL9LzyqsWR2TibjKB9vVA\/0?wx_fmt=jpeg"}" }
发送视频 修改add_material.php如下:
<?php
require_once("Utils.php");
$url= "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=".Utils::get_access_token()."&type=video";
$pathArr = array("movie/aa.mp4");
$result = uploa_imgs($url, $pathArr);
var_dump($result);
//上传多张图片
function uploa_imgs($url, $pathArr)
{
$resultArr = array();
forEach ($pathArr as $path)
{
if (class_exists('CURLFile')) {
//PHP5.5及以上
//realpath返回绝对路径
//$filedata = array('media' => new CURLFile(realpath($path)));
$filedata = array('media' => new CURLFile(realpath($path)),
"description"=>'{"title": "111", "introduction":INTRODUCTION}');
} else {
//PHP5.4及以下
//$filedata = array('media' => '@'.realpath($path));
$filedata = array('media' => '@'.realpath($path)
,"description"=>'{"title": "111", "introduction":INTRODUCTION}');
}
$result = Utils::https_request($url, $filedata);
array_push($resultArr, $result);
}
return $resultArr;
}
返回结果如下: array(1) { [0]=> string(58) "{"media_id":"FrsRJ3g3BHR-pIkuFLARnMPNEDjZn0upTAeXrqBGP5k"}" }
4、获取永久素材
在新增了永久素材后,开发者可以根据media_id通过本接口下载永久素材。公众号在公众平台官网素材管理模块中新建的永久素材,可通过"获取素材列表"获知素材的media_id。此接口不能获取临时素材。
接口:https://api.weixin.qq.com/cgi-bin/material/get_material?access_token=ACCESS_TOKEN
get_material.php
<?php
@header('Content-type: text/plain;charset=UTF-8');
require_once("Utils.php");
$mediaId = '{"media_id": "FrsRJ3g3BHR-pIkuFLARnAwGsFjf8Rckbd63rFBsE4o"}';
$url = "https://api.weixin.qq.com/cgi-bin/material/get_material?"
."access_token=".Utils::get_access_token();
$result = Utils::https_request($url, $mediaId);
echo $result;
返回永久图文素材如下:
{返回永久视频素材如下:
"news_item": [
{
"title": "第一个图文永久素材",
"author": "Perter",
"digest": "第一个图文永久素材摘要",
"content": "123",
"content_source_url": "http://www.baidu.com",
"thumb_media_id": "FrsRJ3g3BHR-pIkuFLARnHjI9Cq9lDFas4Kp8otlAUQ",
"show_cover_pic": 1,
"url": "http://mp.weixin.qq.com/s?__biz=MzUzMzI2OTQ3Mw==&mid=100000013&idx=1&sn=a6d09fe2e87c320b69a284b1dee01c4b&chksm=7aa7df834dd05695e0dfa4108fee82f8734d52430f93f4e24b0077de2e1712345e7d87f25fda#rd",
"thumb_url": "http://mmbiz.qpic.cn/mmbiz_jpg/rE2vM1t75ANDqb5Ud7WdHqo3oWodmOtCBPxaicWWs4Gg7kwmqx2vb3NkkuzM8iczib4qltC8GQYib4xHqXu7SwZRrw/0?wx_fmt=jpeg",
"need_open_comment": 0,
"only_fans_can_comment": 0
}
],
"create_time": 1505139219,
"update_time": 1505139219
}
{返回永久图片素材如下,直接返回图片:
"title": "111",
"description": "",
"down_url": "http://125.39.7.29/vweixinp.tc.qq.com/1007_12f949a80e4e4271bd6763dd76d00931.f10.mp4?vkey=4C0541D9528CE21BACCE2CE8ED46405ABBE24922EBCF5CB40682B1DB1923DD2F103E6C8C4BB2E364191CE9E338874FC69ADB754B69944E03F66B5FC423F228FEB7F7FA42CF83C94EBEDB0ECE1C58C0ADA32497EA2308510B&sha=0&save=1"
}
5、删除永久素材
在新增了永久素材后,开发者可以根据本接口来删除不再需要的永久素材,节省空间。请谨慎操作本接口,因为它可以删除公众号在公众平台官网素材管理模块中新建的图文消息、语音、视频等素材(但需要先通过获取素材列表来获知素材的media_id)。临时素材无法通过本接口删除。删除接口:https://api.weixin.qq.com/cgi-bin/material/del_material?access_token=ACCESS_TOKEN del_material.php
<?php返回接口如下:
@header('Content-type: text/plain;charset=UTF-8');
require_once("Utils.php");
$mediaId = '{"media_id": "FrsRJ3g3BHR-pIkuFLARnDyvPgsg0lz6TKJvRMCaIhg"}';
$url = "https://api.weixin.qq.com/cgi-bin/material/del_material?"
."access_token=".Utils::get_access_token();
$result = Utils::https_request($url, $mediaId);
echo $result;
{"errcode":0,"errmsg":"ok"}
6、修改永久图文素材
开发者可以通过本接口对永久图文素材进行修改。也可以修改在公众平台官网素材管理模块中保存的图文消息(永久图文素材)。接口:https://api.weixin.qq.com/cgi-bin/material/update_news?access_token=ACCESS_TOKENupdate_news.php
<?php返回结果如下:
//<img src=\"http:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/rE2vM1t75APxcWy4fPrtqYxJfTKgnQkoql6CW1Mp9kN0ARibjyWGqCD6w8AgcHUcN7iaRKmEIcVMBXzcicibEzw31w\/0\"/>
require_once("Utils.php");
$newsjson = '{
"media_id": "FrsRJ3g3BHR-pIkuFLARnAwGsFjf8Rckbd63rFBsE4o",
"index": 0,
"articles":
{
"title": "第一个图文永久素材",
"thumb_media_id": "FrsRJ3g3BHR-pIkuFLARnHjI9Cq9lDFas4Kp8otlAUQ",
"author": "Perter",
"digest": "第一个图文永久素材摘要",
"show_cover_pic": 1,
"content": "123",
"content_source_url": "http://www.baidu.com"
}
}';
$url = "https://api.weixin.qq.com/cgi-bin/material/update_news?"
."access_token=".Utils::get_access_token();
$result = Utils::https_request($url, $newsjson);
echo $result;
{"errcode":0,"errmsg":"ok"}
7、获取素材总数
开发者可以根据本接口来获取永久素材的列表,需要时也可保存到本地,永久素材的总数,也会计算公众平台官网素材管理中的素材,图片和图文消息素材(包括单图文和多图文)的总数上限为5000,其他素材的总数上限为1000。接口:https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token=ACCESS_TOKENget_materialcount.php<?php返回结果如下:
@header('Content-type: text/plain;charset=UTF-8');
require_once("Utils.php");
$url = "https://api.weixin.qq.com/cgi-bin/material/get_materialcount?"
."access_token=".Utils::get_access_token();
$result = Utils::https_request($url);
echo $result;
{
"voice_count": 0,
"video_count": 1,
"image_count": 9,
"news_count": 1
}
8、获取素材列表
在新增了永久素材后,开发者可以分类型获取永久素材的列表。获取永久素材的列表,也包含公众号在公众平台官网素材管理模块中新建的图文消息、语音、视频等素材。临时素材无法通过本接口获取。接口:https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=ACCESS_TOKENbatchget_material.php
<?php
@header('Content-type: text/plain;charset=UTF-8');
require_once("Utils.php");
$data = '{
"type":"news",
"offset":0,
"count":10
}';
$url = "https://api.weixin.qq.com/cgi-bin/material/batchget_material?"
."access_token=".Utils::get_access_token();
Utils::logger($url);
$result = Utils::https_request($url, $data);
echo $result;
返回图片结果如下:
{返回图文结果如下:
"item": [
{
"media_id": "FrsRJ3g3BHR-pIkuFLARnHjI9Cq9lDFas4Kp8otlAUQ",
"name": "/home/bae/app/images/img1.jpg",
"update_time": 1505139076,
"url": "http://mmbiz.qpic.cn/mmbiz_jpg/rE2vM1t75ANDqb5Ud7WdHqo3oWodmOtCBPxaicWWs4Gg7kwmqx2vb3NkkuzM8iczib4qltC8GQYib4xHqXu7SwZRrw/0?wx_fmt=jpeg"
},
{
"media_id": "FrsRJ3g3BHR-pIkuFLARnPV3S3ztUJSSA5BTlACflIw",
"name": "/home/bae/app/images/img3.jpg",
"update_time": 1505034665,
"url": "http://mmbiz.qpic.cn/mmbiz_jpg/rE2vM1t75APxcWy4fPrtqYxJfTKgnQkoEXUXh2653R0tIZCdsoMq2KPvENbOGWAt0qUL9LzyqsWR2TibjKB9vVA/0?wx_fmt=jpeg"
},
{
"media_id": "FrsRJ3g3BHR-pIkuFLARnGfOKWyYscHpu4GuP6zrbxM",
"name": "/home/bae/app/images/img2.jpg",
"update_time": 1505034663,
"url": "http://mmbiz.qpic.cn/mmbiz_jpg/rE2vM1t75APxcWy4fPrtqYxJfTKgnQkolMOlXOZazUNdDXaxTiabEB8xHDBa3lfjupHWn2vxicToxEVcfk5vRmxg/0?wx_fmt=jpeg"
},
{
"media_id": "FrsRJ3g3BHR-pIkuFLARnFQDGg4wLF0SE78VErWMwoU",
"name": "/home/bae/app/images/img1.jpg",
"update_time": 1505034662,
"url": "http://mmbiz.qpic.cn/mmbiz_jpg/rE2vM1t75APxcWy4fPrtqYxJfTKgnQkoUPZ1Bdf9W7ncib8AB0AQaa0LUibWYicLJ1ZbiacUdDQian9us7E5p2Rxiaiaw/0?wx_fmt=jpeg"
},
{
"media_id": "FrsRJ3g3BHR-pIkuFLARnGmjlQO3rC7Wg4qXVzYDydY",
"name": "/home/bae/app/images/img3.jpg",
"update_time": 1505034395,
"url": "http://mmbiz.qpic.cn/mmbiz_jpg/rE2vM1t75APxcWy4fPrtqYxJfTKgnQkoEXUXh2653R0tIZCdsoMq2KPvENbOGWAt0qUL9LzyqsWR2TibjKB9vVA/0?wx_fmt=jpeg"
},
{
"media_id": "FrsRJ3g3BHR-pIkuFLARnBQJiN0m3xA7G6AvPfrPmHg",
"name": "/home/bae/app/images/img2.jpg",
"update_time": 1505034394,
"url": "http://mmbiz.qpic.cn/mmbiz_jpg/rE2vM1t75APxcWy4fPrtqYxJfTKgnQkolMOlXOZazUNdDXaxTiabEB8xHDBa3lfjupHWn2vxicToxEVcfk5vRmxg/0?wx_fmt=jpeg"
},
{
"media_id": "FrsRJ3g3BHR-pIkuFLARnHxkKn2u0OoAYlg7eXiUbVI",
"name": "/home/bae/app/images/img1.jpg",
"update_time": 1505034392,
"url": "http://mmbiz.qpic.cn/mmbiz_jpg/rE2vM1t75APxcWy4fPrtqYxJfTKgnQkoUPZ1Bdf9W7ncib8AB0AQaa0LUibWYicLJ1ZbiacUdDQian9us7E5p2Rxiaiaw/0?wx_fmt=jpeg"
},
{
"media_id": "FrsRJ3g3BHR-pIkuFLARnAte6HkrmV3Ll7zhmoGyZwE",
"name": "/home/bae/app/images/img2.jpg",
"update_time": 1505031096,
"url": "http://mmbiz.qpic.cn/mmbiz_jpg/rE2vM1t75APxcWy4fPrtqYxJfTKgnQkolMOlXOZazUNdDXaxTiabEB8xHDBa3lfjupHWn2vxicToxEVcfk5vRmxg/0?wx_fmt=jpeg"
},
{
"media_id": "FrsRJ3g3BHR-pIkuFLARnPz6IegQ220nYBKW4KIjzWo",
"name": "/home/bae/app/images/img1.jpg",
"update_time": 1505031094,
"url": "http://mmbiz.qpic.cn/mmbiz_jpg/rE2vM1t75APxcWy4fPrtqYxJfTKgnQkoUPZ1Bdf9W7ncib8AB0AQaa0LUibWYicLJ1ZbiacUdDQian9us7E5p2Rxiaiaw/0?wx_fmt=jpeg"
}
],
"total_count": 9,
"item_count": 9
}
{
"item": [
{
"media_id": "FrsRJ3g3BHR-pIkuFLARnAwGsFjf8Rckbd63rFBsE4o",
"content": {
"news_item": [
{
"title": "第一个图文永久素材",
"author": "Perter",
"digest": "第一个图文永久素材摘要",
"content": "123",
"content_source_url": "http://www.baidu.com",
"thumb_media_id": "FrsRJ3g3BHR-pIkuFLARnHjI9Cq9lDFas4Kp8otlAUQ",
"show_cover_pic": 1,
"url": "http://mp.weixin.qq.com/s?__biz=MzUzMzI2OTQ3Mw==&mid=100000013&idx=1&sn=a6d09fe2e87c320b69a284b1dee01c4b&chksm=7aa7df834dd05695e0dfa4108fee82f8734d52430f93f4e24b0077de2e1712345e7d87f25fda#rd",
"thumb_url": "http://mmbiz.qpic.cn/mmbiz_jpg/rE2vM1t75ANDqb5Ud7WdHqo3oWodmOtCBPxaicWWs4Gg7kwmqx2vb3NkkuzM8iczib4qltC8GQYib4xHqXu7SwZRrw/0?wx_fmt=jpeg",
"need_open_comment": 0,
"only_fans_can_comment": 0
}
],
"create_time": 1505139219,
"update_time": 1505142464
},
"update_time": 1505142464
}
],
"total_count": 1,
"item_count": 1
}