公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来进行的。
注意点:
public function addImg()
{
if (!cache('app_access_token')) {
$this->cacha_token();
}
$access_token = cache('app_access_token');
$data = array('media' => new \CURLFile(realpath("./static/img/2000780.jpg")));
$url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token={$access_token}&type=image";
$res = $this->curl_post($url, $data);
$res_json = json_decode($res, true);
return json($res_json);
}
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
type | 是 | 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb) |
media | 是 | form-data中媒体文件标识,有filename、filelength、content-type等信息 |
{
"type": "image",
"media_id": "fB1uPlJK0IhNmSCCG5nSivPp5Air6aPIsGHHER_2EWMTRsSeMswyLTLjNbb29ovS",
"created_at": 1621494788,
"item": []
}
公众号可以使用本接口获取临时素材(即下载临时的多媒体文件)。
本接口即为原“下载多媒体文件”接口。
public function getImg()
{
if (!cache('app_access_token')) {
$this->cacha_token();
}
$access_token = cache('app_access_token');
$url = "https://api.weixin.qq.com/cgi-bin/media/get?access_token={$access_token}&media_id=fB1uPlJK0IhNmSCCG5nSivPp5Air6aPIsGHHER_2EWMTRsSeMswyLTLjNbb29ovS";
$res = $this->baseHttpGet($url);
list($header, $body) = explode("\r\n\r\n", $res, 2);
var_dump($header);die;
}
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
media_id | 是 | 媒体文件ID |
返回说明
正确情况下的返回HTTP头如下:
string(277) "HTTP/1.0 200 OK
Connection: close
Cache-Control: no-cache, must-revalidate
Date: Thu, 20 May 2021 07:30:19 GMT
Content-disposition: attachment; filename="fB1uPlJK0IhNmSCCG5nSivPp5Air6aPIsGHHER_2EWMTRsSeMswyLTLjNbb29ovS.jpg"
Content-Type: image/jpeg
Content-Length: 593137"
对于常用的素材,开发者可通过本接口上传到微信服务器,永久使用。新增的永久素材也可以在公众平台官网素材管理模块中查询管理。
请注意:
1、最近更新:永久图片素材新增后,将带有URL返回给开发者,开发者可以在腾讯系域名内使用(腾讯系域名外使用,图片将被屏蔽)。
2、公众号的素材库保存总数量有上限:图文消息素材、图片素材上限为100000,其他类型为1000。
3、素材的格式大小等要求与公众平台官网一致:
图片(image): 10M,支持bmp/png/jpeg/jpg/gif格式
语音(voice):2M,播放长度不超过60s,mp3/wma/wav/amr格式
视频(video):10MB,支持MP4格式
缩略图(thumb):64KB,支持JPG格式
4、图文消息的具体内容中,微信后台将过滤外部的图片链接,图片url需通过"上传图文消息内的图片获取URL"接口上传图片获取。
5、"上传图文消息内的图片获取URL"接口所上传的图片,不占用公众号的素材库中图片数量的100000个的限制,图片仅支持jpg/png格式,大小必须在1MB以下。
6、图文消息支持正文中插入自己帐号和其他公众号已群发文章链接的能力。
public function addImgNews()
{
if (!cache('app_access_token')) {
$this->cacha_token();
}
$access_token = cache('app_access_token');
$data = '{
"articles": [
{
"title": "测试标题",
"thumb_media_id": "FruPwspVpkbz0g_HlTm2WgYccsNvPXMgam_69ZJioV0",
"author": "新新",
"digest": "测试新增永久图文素材",
"show_cover_pic": 0,
"content": "肖战,1991年10月5日出生于重庆市,中国内地男演员、歌手。
",
"content_source_url": "https://baike.baidu.com/item/%E8%82%96%E6%88%98/18866899?fr=aladdin",
"need_open_comment":1,
"only_fans_can_comment":1
}
]
}';
$url = "https://api.weixin.qq.com/cgi-bin/material/add_news?access_token={$access_token}";
$res = $this->curl_post($url, $data);
$res_json = json_decode($res, true);
return json($res_json);
}
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
title | 是 | 标题 |
thumb_media_id | 是 | 图文消息的封面图片素材id(必须是永久mediaID) |
author | 否 | 作者 |
digest | 否 | 图文消息的摘要,仅有单图文消息才有摘要,多图文此处为空。如果本字段为没有填写,则默认抓取正文前54个字。 |
show_cover_pic | 是 | 是否显示封面,0为false,即不显示,1为true,即显示 |
content | 是 | 图文消息的具体内容,支持HTML标签,必须少于2万字符,小于1M,且此处会去除JS,涉及图片url必须来源 "上传图文消息内的图片获取URL"接口获取。外部图片url将被过滤。 |
content_source_url | 是 | 图文消息的原文地址,即点击“阅读原文”后的URL |
need_open_comment | 否 | Uint32 是否打开评论,0不打开,1打开 |
only_fans_can_comment | 否 | Uint32 是否粉丝才可评论,0所有人可评论,1粉丝才可评论 |
返回说明
{
"media_id": "FruPwspVpkbz0g_HlTm2WmU927-CfVmiVLrMvgBadbU",
"item": []
}
本接口所上传的图片不占用公众号的素材库中图片数量的100000个的限制。图片仅支持jpg/png格式,大小必须在1MB以下。
接口调用请求说明
http请求方式: POST,https协议 https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN 调用示例(使用curl命令,用FORM表单方式上传一个图片): curl -F [email protected] "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN"
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
media | 是 | form-data中媒体文件标识,有filename、filelength、content-type等信息 |
返回说明 正常情况下的返回结果为:
{
"url": "http://mmbiz.qpic.cn/mmbiz/gLO17UPS6FS2xsypf378iaNhWacZ1G1UplZYWEYfwvuU6Ont96b1roYs CNFwaRrSaKTPCUdBK9DgEHicsKwWCBRQ/0"
}
接口调用请求说明
通过POST表单来调用接口,表单id为media,包含需要上传的素材内容,有filename、filelength、content-type等信息。请注意:图片素材将进入公众平台官网素材管理模块中的默认分组。
http请求方式: POST,需使用https https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE 调用示例(使用curl命令,用FORM表单方式新增一个其他类型的永久素材,curl命令的使用请自行查阅资料)
public function addImg()
{
if (!cache('app_access_token')) {
$this->cacha_token();
}
$access_token = cache('app_access_token');
$data = array('media' => new \CURLFile(realpath("./static/img/2001551.jpg")));
$url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={$access_token}&type=image";
$res = $this->curl_post($url, $data);
$res_json = json_decode($res, true);
return json($res_json);
}
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
type | 是 | 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb) |
media | 是 | form-data中媒体文件标识,有filename、filelength、content-type等信息 |
{
"media_id": "FruPwspVpkbz0g_HlTm2WgYccsNvPXMgam_69ZJioV0",
"url": "http://mmbiz.qpic.cn/mmbiz_jpg/Z5VAQrUGHMh1JGSZwoLgpiaMMiceosQ54r3BEAiazqDDqecEicJaNGlx6WpD3cgmAMs2GWlk1p1C34BJUSO5PKSzTA/0?wx_fmt=jpeg",
"item": []
}
新增永久视频素材需特别注意
在上传视频素材时需要POST另一个表单,id为description,包含素材的描述信息,内容格式为JSON,格式如下:
{
"title":VIDEO_TITLE,
"introduction":INTRODUCTION
}
在新增了永久素材后,开发者可以根据media_id通过本接口下载永久素材。公众号在公众平台官网素材管理模块中新建的永久素材,可通过"获取素材列表"获知素材的media_id。
请注意:临时素材无法通过本接口获取
接口请求说明
http请求方式: POST,https协议 https://api.weixin.qq.com/cgi-bin/material/get_material?access_token=ACCESS_TOKEN
调用示例
public function getImgNever()
{
if (!cache('app_access_token')) {
$this->cacha_token();
}
$access_token = cache('app_access_token');
$data = '{
"media_id":"FruPwspVpkbz0g_HlTm2WmU927-CfVmiVLrMvgBadbU"
}';
$url = "https://api.weixin.qq.com/cgi-bin/material/get_material?access_token={$access_token}";
$res = $this->baseHttpPost($url,$data);
$res_json = json_decode($res, true);
return json($res_json);
}
调用参数说明
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
media_id | 是 | 要获取的素材的media_id |
接口返回说明
图文素材:
{
"news_item": [
{
"title": "测试标题",
"author": "新新",
"digest": "测试新增永久图文素材",
"content": "肖战,1991年10月5日出生于重庆市,中国内地男演员、歌手。
",
"content_source_url": "https://baike.baidu.com/item/%E8%82%96%E6%88%98/18866899?fr=aladdin",
"thumb_media_id": "FruPwspVpkbz0g_HlTm2WgYccsNvPXMgam_69ZJioV0",
"show_cover_pic": 0,
"url": "http://mp.weixin.qq.com/s?__biz=Mzg5OTYyMjY5OQ==&mid=100000006&idx=1&sn=9fc2499375bc380bc5d2dd6931deb1e9&chksm=405133427726ba54fc2ef5e17c7a948190e24456e21faa80bcdddf8e248bc534941fa7116d50#rd",
"thumb_url": "http://mmbiz.qpic.cn/mmbiz_jpg/Z5VAQrUGHMh1JGSZwoLgpiaMMiceosQ54r3BEAiazqDDqecEicJaNGlx6WpD3cgmAMs2GWlk1p1C34BJUSO5PKSzTA/0?wx_fmt=jpeg",
"need_open_comment": 1,
"only_fans_can_comment": 1
}
],
"create_time": 1621497117,
"update_time": 1621497117
}
视频消息素材:
{
"title":TITLE,
"description":DESCRIPTION,
"down_url":DOWN_URL,
}
其他类型的素材消息,则响应的直接为素材的内容,开发者可以自行保存为文件。例如:
示例 curl "https://api.weixin.qq.com/cgi-bin/material/get_material?access_token=ACCESS_TOKEN" -d '{"media_id":"61224425"}' > file
返回参数说明
参数 | 描述 |
---|---|
title | 图文消息的标题 |
thumb_media_id | 图文消息的封面图片素材id(必须是永久mediaID) |
show_cover_pic | 是否显示封面,0为false,即不显示,1为true,即显示 |
author | 作者 |
digest | 图文消息的摘要,仅有单图文消息才有摘要,多图文此处为空 |
content | 图文消息的具体内容,支持HTML标签,必须少于2万字符,小于1M,且此处会去除JS |
url | 图文页的URL |
content_source_url | 图文消息的原文地址,即点击“阅读原文”后的URL |
在新增了永久素材后,开发者可以根据本接口来删除不再需要的永久素材,节省空间。
请注意:
1、请谨慎操作本接口,因为它可以删除公众号在公众平台官网素材管理模块中新建的图文消息、语音、视频等素材(但需要先通过获取素材列表来获知素材的media_id) 2、临时素材无法通过本接口删除 3、调用该接口需https协议
接口调用请求说明
http请求方式: POST https://api.weixin.qq.com/cgi-bin/material/del_material?access_token=ACCESS_TOKEN
调用示例
{
"media_id":MEDIA_ID
}
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
media_id | 是 | 要获取的素材的media_id |
返回说明
{
"errcode":ERRCODE,
"errmsg":ERRMSG
}
正常情况下调用成功时,errcode将为0。
开发者可以通过本接口对永久图文素材进行修改。
请注意:
1、也可以在公众平台官网素材管理模块中保存的图文消息(永久图文素材) 2、调用该接口需https协议
接口调用请求说明
http请求方式: POST https://api.weixin.qq.com/cgi-bin/material/update_news?access_token=ACCESS_TOKEN
调用示例
public function updateImgNews()
{
if (!cache('app_access_token')) {
$this->cacha_token();
}
$access_token = cache('app_access_token');
$data = '{
"media_id":"FruPwspVpkbz0g_HlTm2WmU927-CfVmiVLrMvgBadbU",
"articles": {
"title": "测试标题",
"thumb_media_id": "FruPwspVpkbz0g_HlTm2WgYccsNvPXMgam_69ZJioV0",
"author": "新新",
"digest": "测试新增永久图文素材",
"show_cover_pic": 0,
"content": "肖战,1991年10月5日出生于重庆市,中国内地男演员、歌手。
",
"content_source_url": "https://baike.baidu.com/item/%E8%82%96%E6%88%98/18866899?fr=aladdin"
}
}';
$url = "https://api.weixin.qq.com/cgi-bin/material/update_news?access_token={$access_token}";
$res = $this->curl_post($url, $data);
$res_json = json_decode($res, true);
return json($res_json);
}
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
media_id | 是 | 要修改的图文消息的id |
index | 是 | 要更新的文章在图文消息中的位置(多图文消息时,此字段才有意义),第一篇为0 |
title | 是 | 标题 |
thumb_media_id | 是 | 图文消息的封面图片素材id(必须是永久mediaID) |
author | 是 | 作者 |
digest | 是 | 图文消息的摘要,仅有单图文消息才有摘要,多图文此处为空 |
show_cover_pic | 是 | 文章内是否显示封面,0为false,即不显示,1为true,即显示 |
content | 是 | 图文消息的具体内容,支持HTML标签,必须少于2万字符,小于1M,且此处会去除JS |
content_source_url | 是 | 图文消息的原文地址,即点击“阅读原文”后的URL |
返回说明
{
"errcode": ERRCODE,
"errmsg": ERRMSG
}
正确时errcode的值应为0。
开发者可以根据本接口来获取永久素材的列表,需要时也可保存到本地。
请注意:
1.永久素材的总数,也会计算公众平台官网素材管理中的素材 2.图片和图文消息素材(包括单图文和多图文)的总数上限为100000,其他素材的总数上限为1000 3.调用该接口需https协议
接口调用请求说明
http请求方式: GET https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token=ACCESS_TOKEN
public function getCount()
{
if (!cache('app_access_token')) {
$this->cacha_token();
}
$access_token = cache('app_access_token');
$url = "https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token={$access_token}";
$res = $this->baseHttpGet($url);
$res_json = json_decode($res, true);
return json($res_json);
}
返回说明
{
"voice_count": 0,
"video_count": 0,
"image_count": 3,
"news_count": 2
}
返回参数说明
参数 | 描述 |
---|---|
voice_count | 语音总数量 |
video_count | 视频总数量 |
image_count | 图片总数量 |
news_count | 图文总数量 |
在新增了永久素材后,开发者可以分类型获取永久素材的列表。
请注意:
1、获取永久素材的列表,也包含公众号在公众平台官网素材管理模块中新建的图文消息、语音、视频等素材 2、临时素材无法通过本接口获取 3、调用该接口需https协议
接口调用请求说明
http请求方式: POST https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=ACCESS_TOKEN
调用示例
public function getImgList()
{
if (!cache('app_access_token')) {
$this->cacha_token();
}
$access_token = cache('app_access_token');
$data = '{"type":"news","offset":"0","count":"5"}';
$url = "https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token={$access_token}";
$res = $this->curl_post($url, $data);
$res_json = json_decode($res, true);
return $res;
}
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
type | 是 | 素材的类型,图片(image)、视频(video)、语音 (voice)、图文(news) |
offset | 是 | 从全部素材的该偏移位置开始返回,0表示从第一个素材 返回 |
count | 是 | 返回素材的数量,取值在1到20之间 |
返回说明
永久图文消息素材列表的响应如下:
{
"total_count": TOTAL_COUNT,
"item_count": ITEM_COUNT,
"item": [{
"media_id": MEDIA_ID,
"content": {
"news_item": [{
"title": TITLE,
"thumb_media_id": THUMB_MEDIA_ID,
"show_cover_pic": SHOW_COVER_PIC(0 / 1),
"author": AUTHOR,
"digest": DIGEST,
"content": CONTENT,
"url": URL,
"content_source_url": CONTETN_SOURCE_URL
},
//多图文消息会在此处有多篇文章
]
},
"update_time": UPDATE_TIME
},
//可能有多个图文消息item结构
]
}
其他类型(图片、语音、视频)的返回如下:
{
"total_count": TOTAL_COUNT,
"item_count": ITEM_COUNT,
"item": [{
"media_id": MEDIA_ID,
"name": NAME,
"update_time": UPDATE_TIME,
"url":URL
},
//可能会有多个素材
]
}
返回参数说明
参数 | 描述 |
---|---|
total_count | 该类型的素材的总数 |
item_count | 本次调用获取的素材的数量 |
title | 图文消息的标题 |
thumb_media_id | 图文消息的封面图片素材id(必须是永久mediaID) |
show_cover_pic | 是否显示封面,0为false,即不显示,1为true,即显示 |
author | 作者 |
digest | 图文消息的摘要,仅有单图文消息才有摘要,多图文此处为空 |
content | 图文消息的具体内容,支持HTML标签,必须少于2万字符,小于1M,且此处会去除JS |
url | 图文页的URL,或者,当获取的列表是图片素材列表时,该字段是图片的URL |
content_source_url | 图文消息的原文地址,即点击“阅读原文”后的URL |
update_time | 这篇图文消息素材的最后更新时间 |
name | 文件名称 |
错误情况下的返回JSON数据包示例如下(示例为无效媒体类型错误):
{"errcode":40007,"errmsg":"invalid media_id"}