新增永久素材

新增永久素材

临时素材只能保存3天,但是其实我们还可以新增一些永久的素材

永久素材保存后,如果是图片素材,则会返回图片URL

永久素材可以在公众平台后台素材管理哪里看到

图文消息和图文素材最多5000,其他的1000

图片不超过2MB 支持bmp/png/jpeg/jpg/gif格式,

语音大小不超过5MB 长度不超过一分钟 支持mp3/wma/wav/amr格式

新增永久图片素材

其中上面的Conent的内容如果包含图片,则不能使用外部链接的图片,要使用内部的图片地址

我们可以调用下面接口将图片Post到微信服务器,服务器会返回图片地址

上面的方式发送的图片不受5000的限制,并且仅支持jpg/png格式,大小也不能超过1MB

方法是Post到下面地址

https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN

下面我们先来实验发送图片得到图片地址的功能

和之前上传临时图片的接口一样 只是这次是uploadimg 之前是upload

成功返回

{"url":"http:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/ygWL2F9vQfjJfHEz1UGib1mWzvLWqnGyCianLdfl9qxAUw8SSicMdqxzrghRKiaBlBaTBI7n7wGhdibrU7icSyAhTCHA\/0"}

当然我们可以使用异步post的方式

新增永久图文素材

调用 https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=ACCESS_TOKEN

{
"articles": [{
"title": TITLE,
"thumb_media_id": THUMB_MEDIA_ID,
"author": AUTHOR,
"digest": DIGEST,
"show_cover_pic": SHOW_COVER_PIC(0 / 1),
"content": CONTENT,
"content_source_url": CONTENT_SOURCE_URL
//若新增的是多图文素材,则此处应还有几段articles结构
}]
}Code language: JSON / JSON with Comments (json)
  • title:标题
  • thumb_media_id:图文消息的封面图片素材id(必须是永久mediaID)
  • author:作者
  • digest:图文消息的摘要,仅有单图文消息才有摘要,多图文此处为空
  • show_cover_pic:是否显示封面,0为false,即不显示,1为true,即显示

示例:

{
"articles": [{
"title": "标题标题",
"thumb_media_id": "YPXCzz8NyGZkupjcrsj1iDX-qmxLNRPx24o_jAbDWZ5jriYkVVzSmil5PlraAq_",
"author": "bamn",
"digest": "摘要摘要",
"show_cover_pic": SHOW_COVER_PIC(1),
"content": "内容内容",
"content_source_url": "http://localhost:6583/AddNews.aspx"
}
]
}Code language: JSON / JSON with Comments (json)

获取永久素材-幅面素材

http请求方式: POST,需使用https

https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE

其中这个type类型是这几类

媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)

报:41005,”errmsg”:”media data missing hint错误

最后解决办法

使用webclient的方式上传临时图片

Access_token_info obj = GetTokenInfo();
WebClient wxUpload = new WebClient();
string uploadPath = "~/Images/";
string folder = Server.MapPath(uploadPath);
//自动创建目录
if (!Directory.Exists(folder))
{
    Directory.CreateDirectory(folder);
}
HttpPostedFile file = Request.Files.Get(0);
string filename = folder + file.FileName;
file.SaveAs(filename);
//API所需的媒体信息
wxUpload.Headers.Add("Content-Disposition", "form-data");
wxUpload.Headers.Add("name", "media");
wxUpload.Headers.Add("filename", file.FileName);
wxUpload.Headers.Add("Content-Type", file.ContentType);
wxUpload.Headers.Add("filelength", file.ContentLength.ToString());
byte[] result = 
wxUpload.UploadFile(
    new Uri(string.Format(
        "https://api.weixin.qq.com/cgi-bin/material/uploadimg?access_token={0}&type={1}", 
        obj.access_token, "image")), filename);
string resultjson = Encoding.UTF8.GetString(result); //在这里获取json数据,获得图片URLCode language: JavaScript (javascript)

要点说明与纠错:

  1. 接口混淆:章节标题为“获取永久素材”,但展示的接口是 add_material(新增永久素材)。而底部代码实际调用的是 uploadimg(新增永久图片获取URL,见5-7节)且拼接了 type 参数(标准 uploadimgtypeadd_material 才有)。实际开发需注意区分:
    • 临时素材上传:/media/upload
    • 永久图片上传(返URL):/media/uploadimg
    • 永久素材新增(图/音/视):/material/add_material
  2. 报错解决:图中提到报 41005 media data missing 错误,最终通过 WebClient 方式,显式添加 Content-Dispositionname="media"filenameContent-Type 等 Headers 模拟 form-data 表单上传得以解决。
  3. 获取永久素材标准接口:实际获取永久素材的接口应为 POST https://api.weixin.qq.com/cgi-bin/material/get_material,需传入 media_id JSON 数据。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注