C# 微信公众平台开发(5)--添加图文素材
2016-01-26 16:55
886 查看
微信公众平台开发 --添加素材
返回说明{ "media_id":MEDIA_ID, "url":URL }返回参数说明
错误情况下的返回JSON数据包示例如下(示例为无效媒体类型错误):
调用示例
关于微信公众号素材管理,我们可以通过接口文档,了解基本详情: http://mp.weixin.qq.com/wiki/10/10ea5a44870f53d79449290dfd43d006.html eg:发布图文素材 1.上传封面图片 >>新增其他类型永久素材 接口调用请求说明 通过POST表单来调用接口,表单id为media,包含需要上传的素材内容,有filename、filelength、content-type等信息。请注意:图片素材将进入公众平台官网素材管理模块中的默认分组。 http请求方式: POST,需使用https https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN 调用示例(使用curl命令,用FORM表单方式新增一个其他类型的永久素材,curl命令的使用请自行查阅资料)
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
type | 是 | 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb) |
media | 是 | form-data中媒体文件标识,有filename、filelength、content-type等信息 |
上传图片: string filename = Server.MapPath(model.ImgUrl); string url = string.Format("https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={0}&type={1}", access_token, "image"); string resultJson = HttpHelper.UploadFile(url, filename, "image/jpeg"); filename = Server.MapPath(ImgUrl) ImgUrl=‘~\UploadFile\20160126\656495cd9ce3417282df4c859c36b9e1.jpg’ 上传永久图片为表单上传,跟以前的请求方式不同:
/// <summary> /// 服务号:上传多媒体文件 /// </summary> /// <param name="accesstoken">调用接口凭据</param> /// <param name="filename">文件路径</param> /// <param name="contenttype">文件Content-Type类型(例如:image/jpeg、audio/mpeg)</param> /// <returns></returns> public static string UploadFile(string url, string path, string contenttype) { FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); byte[] bArr = new byte[fs.Length]; fs.Read(bArr, 0, bArr.Length); // 设置参数 HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; CookieContainer cookieContainer = new CookieContainer(); request.CookieContainer = cookieContainer; request.AllowAutoRedirect = true; request.Method = "POST"; string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线 request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary; byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n"); byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); int pos = path.LastIndexOf("\\"); string fileName = path.Substring(pos + 1); //组织表单数据 StringBuilder sbHeader = new StringBuilder(); sbHeader.Append("--" + boundary + "\r\n"); sbHeader.Append("Content-Disposition: form-data; name=\"media\"; filename=\"" + path + "\"; filelength=\"" + fs.Length + "\""); sbHeader.Append("\r\n"); sbHeader.Append("Content-Type: " + contenttype); sbHeader.Append("\r\n\r\n"); //请求头部信息 //StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name=\"file\";filename=\"{0}\"\r\nContent-Type:application/octet-stream\r\n\r\n", fileName)); byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString()); Stream postStream = request.GetRequestStream(); postStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length); postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); postStream.Write(bArr, 0, bArr.Length); postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length); postStream.Close(); fs.Close(); fs.Dispose(); //发送请求并获取相应回应数据 HttpWebResponse response = request.GetResponse() as HttpWebResponse; //直到request.GetResponse()程序才开始向目标网页发送Post请求 Stream instream = response.GetResponseStream(); StreamReader sr = new StreamReader(instream, Encoding.UTF8); //返回结果网页(html)代码 string content = sr.ReadToEnd(); return content; }View Code
返回说明{ "media_id":MEDIA_ID, "url":URL }返回参数说明
参数 | 描述 |
---|---|
media_id | 新增的永久素材的media_id |
url | 新增的图片素材的图片URL(仅新增图片素材时会返回该字段) |
{"errcode":40007,"errmsg":"invalid media_id"} 2.上传图文消息内容 string strUploadNewsUrl = string.Format("https://api.weixin.qq.com/cgi-bin/material/add_news?access_token={0}", access_token); string newsJson = HttpHelper.PostHttpResponse(strUploadNewsUrl, str);
str 就是我们拼接的素材内容 官网的例子:
{ "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结构,最多8段 ] } 注意一:上面示例 "title": TITLE 但实际写的时候后面 也需要加上双引号,否则会报错; builder.Append("\"title\":\"" + list[i].Title + "\",");
注意二:{"errcode":40007,"errmsg":"invalid media_id"},出现这个问题很有可能就是 在上传图片的时候 用的是临时的上传接口,导致出现40007错误; 注意三: "content": CONTENT;本人在项目中,发现的一个问题,由于本人是在后台拼接的内容 ,出现一个问题就是内容中的图片上传后发现, builder.Append("\"content\":\"" + list[i].Content + "\",");, 在微信中显示不出来,只能显示文字; 通过上传成功后返回的media_id返回的数据,content中关于img标签是剩下<img>了,最后发现是因为双引号引起的问题
list[i].Content = <p>Test</p><p><img alt="测试.jpg" src="http://mmbiz.qpic.cn/mmbiz/IcV3dMDKQT6xeeWETz43mpMYfHR7jjoxr6g0HDuYH7QDYr7hUQnl44664Tiaib6liaaybAwjhViafHHNHTHU6xX8ww/0"/></p>
所以builder.Append("\"content\":\"" + list[i].Content + "\",") 就会出现问题 改成 builder.Append("\"content\":\"" + list[i].Content.Replace("\"", "'") + "\","); 注意以上问题,基本上可以正确结果 最后 返回结果 { "media_id":MEDIA_ID }
通过Media_id,可以进行删除、查看操作; 3.修改永久图文素材
http请求方式: POST https://api.weixin.qq.com/cgi-bin/material/update_news?access_token=ACCESS_TOKEN
调用示例
{ "media_id":MEDIA_ID, "index":INDEX, "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 } } 参数说明
参数 | 是否必须 | 说明 |
---|---|---|
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 |
修改素材的时候 ,每次只能修改某一素材的其中一条,如果我要删除或者添加一天呢? 是否觉得很蛋疼; 本人直接根据上传的获取的MEDIA_ID 进行删除,然后重新添加一次! ---------------------------------------------------------------------------------------------------- 如果你觉得有帮助 请关注我的微信公众号,没有帮助你也可以添加哟!o(∩_∩)o 哈哈
相关文章推荐
- [置顶] 微信支付提示:同一笔交易不能多次提交
- 逆向推演【微信消息列表】交互步骤细节+新手扫盲
- Android仿微信群聊头像
- 微信编辑器新手入门必读
- Android 仿秒拍,微信录制短视频
- 微信公众平台开发自定义菜单
- Android GridView仿微信朋友圈显示图片
- 微信公众平台开发资源
- 微信JSSDK分享功能详解
- OneAlert 入门(四)——事件分派和通知必达
- 史上最简单查看微信被哪些好友删除,不用群发
- 微信全局获取并缓存Accesstoken的值
- 微信公众号申请页面获取验证码BUG
- 微信上传图片问题
- php 简单判断是否微信浏览器
- PHP微信开发代码
- Android RichText 让Textview轻松的支持富文本(图像ImageSpan、点击效果等等类似QQ微信聊天)
- 【解决方案】谈公众号红包的正确打开方式--传奇创世
- 微信扫码支付 curl出错,错误码:28
- 1秒被抢完的那3000个QQ公众号,这四个月发展得怎样