微信公众号--素材管理

六、素材管理

1. 新增临时素材

公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来进行的。

注意点:

  • 1、临时素材media_id是可复用的。
  • 2、媒体文件在微信后台保存时间为3天,即3天后media_id失效。
  • 3、上传临时素材的格式、大小限制与公众平台官网一致。
    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": []
}

2.获取临时素材

公众号可以使用本接口获取临时素材(即下载临时的多媒体文件)。

本接口即为原“下载多媒体文件”接口。

    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"

3.新增永久素材

对于常用的素材,开发者可通过本接口上传到微信服务器,永久使用。新增的永久素材也可以在公众平台官网素材管理模块中查询管理。

请注意:

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、图文消息支持正文中插入自己帐号和其他公众号已群发文章链接的能力。

(1)新增永久图文素材

    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": []
}

(2)上传图文消息内的图片获取URL

本接口所上传的图片不占用公众号的素材库中图片数量的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"

}

(3)新增其他类型永久素材

接口调用请求说明

通过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
}

4.获取永久素材

在新增了永久素材后,开发者可以根据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

5.删除永久素材

在新增了永久素材后,开发者可以根据本接口来删除不再需要的永久素材,节省空间。

请注意:

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。

6.修改永久图文素材

开发者可以通过本接口对永久图文素材进行修改。

请注意:

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。

7.获取素材总数

开发者可以根据本接口来获取永久素材的列表,需要时也可保存到本地。

请注意:

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 图文总数量

8.获取素材列表

在新增了永久素材后,开发者可以分类型获取永久素材的列表。

请注意:

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"}

 

你可能感兴趣的:(笔记)