微信公众平台开发 --添加素材

关于微信公众号素材管理,我们可以通过接口文档,了解基本详情:
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, , 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 + ); //组织表单数据
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, , itemBoundaryBytes.Length);
postStream.Write(postHeaderBytes, , postHeaderBytes.Length);
postStream.Write(bArr, , bArr.Length);
postStream.Write(endBoundaryBytes, , 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;
}

返回说明

{ "media_id":MEDIA_ID, "url":URL }

返回参数说明

参数 描述
media_id 新增的永久素材的media_id
url 新增的图片素材的图片URL(仅新增图片素材时会返回该字段)

错误情况下的返回JSON数据包示例如下(示例为无效媒体类型错误):

{"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 哈哈

												

C# 微信公众平台开发(5)--添加图文素材的更多相关文章

  1. 微信公众号开发上传图文素材带有卡片小程序报错:errcode=45166,errmsg = invalid content hint

    微信公众号开发自从支持允许在群发图文中插入小程序,方便了小程序的运营及推广.最近在三方服务开发中,要支持图文素材插入小程序遇到了一个很是棘手的问题.官方给出的插入小程序的示例支持文字.图片.卡片.如下 ...

  2. Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler

    上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK>我们讲述了如何使用Senparc.Weixin.MP SDK ...

  3. Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明

    上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>介绍了如何通过通用接口获取AccessToken,有了AccessToken,我们就可以来操作 ...

  4. 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单

    我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...

  5. 转载收藏之用 - 微信公众平台开发教程(六):了解MessageHandler

    上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK>我们讲述了如何使用Senparc.Weixin.MP SDK ...

  6. 微信公众平台开发接口PHP SDK

    以前没接触过微信公众平台开发,前几天刚找到实习公司就要求我做一个微信公众平台的应用,于是乎开始学习微信公众平台开发接口的调用,看开发文档之后还是不知道从何入手,只好上网找入门资料,终于在方倍工作室找到 ...

  7. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十):使用菜单消息功能

    在<Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明>教程中,我们介绍了如何使用“客服接口”,即在服务器后台,在任意时间向微信发送文本.图文.图片等不 ...

  8. NodeJS微信公众平台开发

    微信是手机用户必备的App,微信最开始只是作为社交通讯应用供用户使用,但随着用户量不断的增加,微信的公众号在微信上表现出来了它强大的一面,微信公众平台具有四大优势:1.平台更加稳固:2.用户关系更加平 ...

  9. php 微信公众平台开发之微信群发信息

    这篇文章主要为大家详细介绍了php微信公众平台开发之微信群发信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.目的 完成在微信公众号中群发消息.这里只是完成简单的文字发送.也可以发送语音图片 ...

随机推荐

  1. python 携程asyncio 实现高并发示例2

    https://www.bilibili.com/video/BV1g7411k7MD?from=search&seid=13649975876676293013 import asyncio ...

  2. PyTorch中在反向传播前为什么要手动将梯度清零?

    对于torch中训练时,反向传播前将梯度手动清零的理解 简单的理由是因为PyTorch默认会对梯度进行累加.至于为什么PyTorch有这样的特点,在网上找到的解释是说由于PyTorch的动态图和aut ...

  3. Nginx(1)---安装及基础命令

    一.简述 Nginx是一个高性能WEB服务器,除它之外Apache.Tomcat.Jetty.IIS,它们都是Web服务器 Nginx  相对基它WEB服务有什么优势:Tomcat.Jetty 面向j ...

  4. tp5--路由的使用(初级)

    在配置文件夹下的route.php文件配置路由: 控制器: 运行结果:

  5. [Inno Setup] 退出安装程序的两种方式

    1. 完全静默的退出 procedure ExitProcess(exitCode:integer); external 'ExitProcess@kernel32.dll stdcall'; ... ...

  6. zookeeper笔记(二)

    title: zookeeper笔记(二) zookeeper ALC权限控制 getAcl path 可以查看某个node的权限 设置权限: 2. world方式 setAcl <path&g ...

  7. GitHub 被指审查内容,著名“换脸”开源项目 deepfake 遭限制访问

    开发四年只会写业务代码,分布式高并发都不会还做程序员? >>>   昨天 Hacker News 上一条关于 deepfake 开源项目的帖子(https://news.ycombi ...

  8. 打造livecd的注意事项

    一:在CentOS.ks的定制脚本中,删除syslinux组件:出错提示: /usr/lib/python2.6/site-packages/imgcreate/errors.py:45: Depre ...

  9. apache、nginx配置自签名证书

    一.apache: 安装apache.ssl.openssl yum -y install httpd httpd-pear mod_ssl openssl 生成证书文件 openssl genrsa ...

  10. 前端程序员难翻身,没有好的学习方法,你永远无法成功,vue.js专题

    学习vue正确思路,是先学vue-cli,再学vue.js单文件引用的用法,这样会在极短时间内撤底撑握vue, 如果先学vue.js单文件用法,再去学vue-cli4,可以说是重新学vue,,,,难处 ...