新增永久素材
临时素材只能保存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)
要点说明与纠错:
- 接口混淆:章节标题为“获取永久素材”,但展示的接口是
add_material(新增永久素材)。而底部代码实际调用的是uploadimg(新增永久图片获取URL,见5-7节)且拼接了type参数(标准uploadimg无type,add_material才有)。实际开发需注意区分:- 临时素材上传:
/media/upload - 永久图片上传(返URL):
/media/uploadimg - 永久素材新增(图/音/视):
/material/add_material
- 临时素材上传:
- 报错解决:图中提到报
41005 media data missing错误,最终通过WebClient方式,显式添加Content-Disposition、name="media"、filename、Content-Type等 Headers 模拟 form-data 表单上传得以解决。 - 获取永久素材标准接口:实际获取永久素材的接口应为 POST
https://api.weixin.qq.com/cgi-bin/material/get_material,需传入media_idJSON 数据。