大家好,欢迎来到IT知识分享网。
C#新增永久图文素材
新增永久图文素材
接口调用请求说明
http请求方式: POST,https协议 https://api.weixin..com/cgi-bin/material/add_news?access_token=ACCESS_TOKEN
//同步公众号素材
JavaScriptSerializer Jss = new JavaScriptSerializer();
string respText = cwebcms.Web.user.BasicApi.WebRequestPostOrGet(string.Format("https://api.weixin..com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", AppID, AppSecret), "");
Dictionary<string, object> respDic = (Dictionary<string, object>)Jss.DeserializeObject(respText);
string accessToken = respDic["access_token"].ToString();
//上传封面图片获取media_id
string ssPath = Server.MapPath(uc.PicURL);
string re = cwebcms.Common.Public.add_material("image/jpeg", ssPath, accessToken);
string thumb_media_id = "";
respDic = (Dictionary<string, object>)Jss.DeserializeObject(re);
if (respDic.ContainsKey("media_id"))
{
thumb_media_id = respDic["media_id"].ToString();
}
cwebcms.Common.Public.saveLogFiles(5, "re" + re, "errmsg:", "thumb_media_id:" + thumb_media_id);
//上传图文消息内的图片获取URL
//替换内容区的所有图片为素材中的图片
string content = uc.Content;
string pattern = "\\<img\\ [\\s\\S]*?src=['\"]?(?<f>[^'\"\\>\\ ]+)['\"\\>\\ ]";
Regex reg = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
Match match = reg.Match(content);
string gPicURL = "", img_url = "";
int Picnumj = 1;
while (match.Success)
{
gPicURL = match.Groups["f"].Value;
ssPath = Server.MapPath(gPicURL);
re = cwebcms.Common.Public.uploadimg(ssPath, accessToken);
respDic = (Dictionary<string, object>)Jss.DeserializeObject(re);
if (respDic.ContainsKey("url"))
{
img_url = respDic["url"].ToString();
}
content = content.Replace(gPicURL, img_url);
Picnumj++;
match = match.NextMatch();
}
string url = "https://api.weixin..com/cgi-bin/material/add_news?access_token=" + accessToken;
string str = "{" +
"\"articles\": [{" +
"\"title\": \"" + uc.NewsTitle + "\"," +
"\"thumb_media_id\": \"" + thumb_media_id + "\"," +
"\"author\": \"" + uc.Author + "\"," +
"\"digest\": \"" + uc.naviContent + "\"," +
"\"show_cover_pic\": 1," +
"\"content\": \"" + content.Replace("\"", "\'") + "\"," +
"\"content_source_url\": \"https://ft.cwebcrm.cn/mmg/user/view_detail.html?companyid=gzh&id=" + uc.ID + "\"," +
"\"need_open_comment\":1," +
"\"only_fans_can_comment\":1" +
"\"}," +
//若新增的是多图文素材,则此处应还有几段articles结构
"\"]" +
"\"} ";
cwebcms.Common.Public.saveLogFiles(5, "@url" + url, "errmsg:", "str:" + str);核心代码
string media_id = "";
string strReturn = cwebcms.Common.Public.PostUrl(@url, str);
cwebcms.Common.Public.saveLogFiles(5, "n", "", "strReturn:" + strReturn);
respDic = (Dictionary<string, object>)Jss.DeserializeObject(strReturn);
if (respDic.ContainsKey("media_id"))
{
media_id = respDic["media_id"].ToString();
}
string sql = "update cwebcms_news set media_id='" + media_id + "' where NewsID='" + uc.NewsID + "'";
int n = sd.updatesql(sql);
//上传封面图片
上传图文消息内的图片获取URL
本接口所上传的图片不占用公众号的素材库中图片数量的100000个的限制。图片仅支持jpg/png格式,大小必须在1MB以下。
接口调用请求说明
http请求方式: POST,https协议 https://api.weixin..com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN 调用示例(使用curl命令,用FORM表单方式上传一个图片): curl -F media=@test.jpg "https://api.weixin..com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN"
public static string uploadimg(string file,string accessToken)
{
string fileName = file;
string url = string.Format("https://api.weixin..com/cgi-bin/media/uploadimg?access_token={0}", accessToken);
FileStream fs = new FileStream(file, FileMode.OpenOrCreate, FileAccess.Read);
byte[] fileByte = new byte[fs.Length];
fs.Read(fileByte, 0, fileByte.Length);
fs.Close();
// 设置参数
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");
//请求头部信息
StringBuilder sbHeader =
new StringBuilder(
string.Format(
"Content-Disposition:form-data;name=\"media\";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(fileByte, 0, fileByte.Length);
postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
postStream.Close();
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream instream = response.GetResponseStream();
StreamReader sr = new StreamReader(instream, Encoding.UTF8);
string content = sr.ReadToEnd();
return content;
}
新增其他类型永久素材(注意视频接口不可用,上传也不审核)
接口调用请求说明
通过POST表单来调用接口,表单id为media,包含需要上传的素材内容,有filename、filelength、content-type等信息。请注意:图片素材将进入公众平台官网素材管理模块中的默认分组。
http请求方式: POST,需使用https https://api.weixin..com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE 调用示例(使用curl命令,用FORM表单方式新增一个其他类型的永久素材,curl命令的使用请自行查阅资料)
public static string add_material(string type, string file, string accessToken)
{
string fileName = file;
string url = string.Format("https://api.weixin..com/cgi-bin/material/add_material?access_token={0}&type={1}", accessToken, type);
FileStream fs = new FileStream(file, FileMode.OpenOrCreate, FileAccess.Read);
byte[] fileByte = new byte[fs.Length];
fs.Read(fileByte, 0, fileByte.Length);
fs.Close();
// 设置参数
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");
//请求头部信息
StringBuilder sbHeader =
new StringBuilder(
string.Format(
"Content-Disposition:form-data;name=\"media\";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(fileByte, 0, fileByte.Length);
postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
postStream.Close();
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream instream = response.GetResponseStream();
StreamReader sr = new StreamReader(instream, Encoding.UTF8);
string content = sr.ReadToEnd();
return content;
}
//
public static string PostUrl(string url, string postData)
{
string result = "";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.Timeout = 5000;//设置请求超时时间,单位为毫秒
req.ContentType = "application/json";
byte[] data = Encoding.UTF8.GetBytes(postData);
req.ContentLength = data.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
reqStream.Close();
}
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
//获取响应内容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
}
return result;
}
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/50550.html