C#微信公众平台开发.docx

上传人:b****0 文档编号:16851901 上传时间:2023-07-19 格式:DOCX 页数:12 大小:17.24KB
下载 相关 举报
C#微信公众平台开发.docx_第1页
第1页 / 共12页
C#微信公众平台开发.docx_第2页
第2页 / 共12页
C#微信公众平台开发.docx_第3页
第3页 / 共12页
C#微信公众平台开发.docx_第4页
第4页 / 共12页
C#微信公众平台开发.docx_第5页
第5页 / 共12页
C#微信公众平台开发.docx_第6页
第6页 / 共12页
C#微信公众平台开发.docx_第7页
第7页 / 共12页
C#微信公众平台开发.docx_第8页
第8页 / 共12页
C#微信公众平台开发.docx_第9页
第9页 / 共12页
C#微信公众平台开发.docx_第10页
第10页 / 共12页
C#微信公众平台开发.docx_第11页
第11页 / 共12页
C#微信公众平台开发.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C#微信公众平台开发.docx

《C#微信公众平台开发.docx》由会员分享,可在线阅读,更多相关《C#微信公众平台开发.docx(12页珍藏版)》请在冰点文库上搜索。

C#微信公众平台开发.docx

C#微信公众平台开发

C#微信公众平台开发

涉及access_token的获取请参考《C#微信公众平台开发—access_token的获取存储与更新》

一、为了实现高级群发功能,需要解决的问题

1、通过微信接口上传图文消息素材时,Json中的图片不是url而是media_id,如何通过微信接口上传图片并获取图片的media_id?

2、图片存储在什么地方,如何获取?

二、实现步骤,以根据OpenID列表群发图文消息为例

1、准备数据

我把数据存储在数据库中,ImgUrl字段是图片在服务器上的相对路径(这里的服务器是自己的服务器,不是微信的哦)。

从数据库中获取数据放到DataTable中:

DataTabledt=ImgItemDal.GetImgItemTable(loginUser.OrgID,data);

2、通过微信接口上传图片,返回图片的media_id

取ImgUrl字段数据,通过MapPath方法获取图片在服务器上的物理地址,用FileStream类读取图片,并上传给微信

HTTP上传文件代码(HttpRequestUtil类):

///<summary>

///Http上传文件

///</summary>

publicstaticstringHttpUploadFile(stringurl,stringpath)

{

//设置参数

HttpWebRequestrequest=WebRequest.Create(url)asHttpWebRequest;

CookieContainercookieContainer=newCookieContainer();

request.CookieContainer=cookieContainer;

request.AllowAutoRedirect=true;

request.Method="POST";

stringboundary=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");

intpos=path.LastIndexOf("\\");

stringfileName=path.Substring(pos+1);

//请求头部信息

StringBuildersbHeader=newStringBuilder(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());

FileStreamfs=newFileStream(path,FileMode.Open,FileAccess.Read);

byte[]bArr=newbyte[fs.Length];

fs.Read(bArr,0,bArr.Length);

fs.Close();

StreampostStream=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();

//发送请求并获取相应回应数据

HttpWebResponseresponse=request.GetResponse()asHttpWebResponse;

//直到request.GetResponse()程序才开始向目标网页发送Post请求

Streaminstream=response.GetResponseStream();

StreamReadersr=newStreamReader(instream,Encoding.UTF8);

//返回结果网页(html)代码

stringcontent=sr.ReadToEnd();

returncontent;

}

请求微信接口,上传图片,返回media_id(WXApi类):

///<summary>

///上传媒体返回媒体ID

///</summary>

publicstaticstringUploadMedia(stringaccess_token,stringtype,stringpath)

{

//设置参数

stringurl=string.Format("access_token,type);

returnHttpRequestUtil.HttpUploadFile(url,path);

}

stringmsg=WXApi.UploadMedia(access_token,"image",path);//上图片返回媒体ID

stringmedia_id=Tools.GetJsonValue(msg,"media_id");

传入的path(aspx.cs文件中的代码):

stringpath=MapPath(data);

一个图文消息由若干条图文组成,每条图文有标题、内容、链接、图片等

遍历每条图文数据,分别请求微信接口,上传图片,获取media_id

3、上传图文消息素材

拼接图文消息素材Json字符串(ImgItemDal类(操作图文消息表的类)):

///<summary>

///拼接图文消息素材Json字符串

///</summary>

publicstaticstringGetArticlesJsonStr(PageBasepage,stringaccess_token,DataTabledt)

{

StringBuildersbArticlesJson=newStringBuilder();

sbArticlesJson.Append("{\"articles\":

[");

inti=0;

foreach(DataRowdrindt.Rows)

{

stringpath=page.MapPath(dr["ImgUrl"].ToString());

if(!

File.Exists(path))

{

return"{\"code\":

0,\"msg\":

\"要发送的图片不存在\"}";

}

stringmsg=WXApi.UploadMedia(access_token,"image",path);//上图片返回媒体ID

stringmedia_id=Tools.GetJsonValue(msg,"media_id");

sbArticlesJson.Append("{");

sbArticlesJson.Append("\"thumb_media_id\":

\""+media_id+"\",");

sbArticlesJson.Append("\"author\":

\""+dr["Author"].ToString()+"\",");

sbArticlesJson.Append("\"title\":

\""+dr["Title"].ToString()+"\",");

sbArticlesJson.Append("\"content_source_url\":

\""+dr["TextUrl"].ToString()+"\",");

sbArticlesJson.Append("\"content\":

\""+dr["Content"].ToString()+"\",");

sbArticlesJson.Append("\"digest\":

\""+dr["Content"].ToString()+"\",");

if(i==dt.Rows.Count-1)

{

sbArticlesJson.Append("\"show_cover_pic\":

\"1\"}");

}

else

{

sbArticlesJson.Append("\"show_cover_pic\":

\"1\"},");

}

i++;

}

sbArticlesJson.Append("]}");

returnsbArticlesJson.ToString();

}

上传图文消息素材,获取图文消息的media_id:

///<summary>

///请求Url,发送数据

///</summary>

publicstaticstringPostUrl(stringurl,stringpostData)

{

byte[]data=Encoding.UTF8.GetBytes(postData);

//设置参数

HttpWebRequestrequest=WebRequest.Create(url)asHttpWebRequest;

CookieContainercookieContainer=newCookieContainer();

request.CookieContainer=cookieContainer;

request.AllowAutoRedirect=true;

request.Method="POST";

request.ContentType="application/x-www-form-urlencoded";

request.ContentLength=data.Length;

Streamoutstream=request.GetRequestStream();

outstream.Write(data,0,data.Length);

outstream.Close();

//发送请求并获取相应回应数据

HttpWebResponseresponse=request.GetResponse()asHttpWebResponse;

//直到request.GetResponse()程序才开始向目标网页发送Post请求

Streaminstream=response.GetResponseStream();

StreamReadersr=newStreamReader(instream,Encoding.UTF8);

//返回结果网页(html)代码

stringcontent=sr.ReadToEnd();

returncontent;

}

///<summary>

///上传图文消息素材返回media_id

///</summary>

publicstaticstringUploadNews(stringaccess_token,stringpostData)

{

returnHttpRequestUtil.PostUrl(string.Format("access_token),postData);

}

stringarticlesJson=ImgItemDal.GetArticlesJsonStr(this,access_token,dt);

stringnewsMsg=WXApi.UploadNews(access_token,articlesJson);

stringnewsid=Tools.GetJsonValue(newsMsg,"media_id")

4、群发图文消息

获取全部关注者OpenID集合(WXApi类):

///<summary>

///获取关注者OpenID集合

///</summary>

publicstaticList<string>GetOpenIDs(stringaccess_token)

{

List<string>result=newList<string>();

List<string>openidList=GetOpenIDs(access_token,null);

result.AddRange(openidList);

while(openidList.Count>0)

{

openidList=GetOpenIDs(access_token,openidList[openidList.Count-1]);

result.AddRange(openidList);

}

returnresult;

}

///<summary>

///获取关注者OpenID集合

///</summary>

publicstaticList<string>GetOpenIDs(stringaccess_token,stringnext_openid)

{

//设置参数

stringurl=string.Format("access_token,string.IsNullOrWhiteSpace(next_openid)?

"":

next_openid);

stringreturnStr=HttpRequestUtil.RequestUrl(url);

intcount=int.Parse(Tools.GetJsonValue(returnStr,"count"));

if(count>0)

{

stringstartFlg="\"openid\":

[";

intstart=returnStr.IndexOf(startFlg)+startFlg.Length;

intend=returnStr.IndexOf("]",start);

stringopenids=returnStr.Substring(start,end-start).Replace("\"","");

returnopenids.Split(',').ToList<string>();

}

else

{

returnnewList<string>();

}

}

List<string>openidList=WXApi.GetOpenIDs(access_token);//获取关注者OpenID列表

拼接图文消息Json(WXMsgUtil类):

///<summary>

///图文消息json

///</summary>

publicstaticstringCreateNewsJson(stringmedia_id,List<string>openidList)

{

StringBuildersb=newStringBuilder();

sb.Append("{\"touser\":

[");

sb.Append(string.Join(",",openidList.ConvertAll<string>(a=>"\""+a+"\"").ToArray()));

sb.Append("],");

sb.Append("\"msgtype\":

\"mpnews\",");

sb.Append("\"mpnews\":

{\"media_id\":

\""+media_id+"\"}");

sb.Append("}");

returnsb.ToString();

}

群发代码:

resultMsg=WXApi.Send(access_token,WXMsgUtil.CreateNewsJson(newsid,openidList));

///<summary>

///根据OpenID列表群发

///</summary>

publicstaticstringSend(stringaccess_token,stringpostData)

{

returnHttpRequestUtil.PostUrl(string.Format("access_token),postData);

}

供群发按钮调用的方法(data是传到页面的id,根据它从数据库中取数据):

///<summary>

///群发

///</summary>

publicstringSend()

{

stringtype=Request["type"];

stringdata=Request["data"];

stringaccess_token=AdminUtil.GetAccessToken(this);//获取access_token

List<string>openidList=WXApi.GetOpenIDs(access_token);//获取关注者OpenID列表

UserInfologinUser=AdminUtil.GetLoginUser(this);//当前登录用户

stringresultMsg=null;

//发送文本

if(type=="1")

{

resultMsg=WXApi.Send(access_token,WXMsgUtil.CreateTextJson(data,openidList));

}

//发送图片

if(type=="2")

{

stringpath=MapPath(data);

if(!

File.Exists(path))

{

return"{\"code\":

0,\"msg\":

\"要发送的图片不存在\"}";

}

stringmsg=WXApi.UploadMedia(access_token,"image",path);

stringmedia_id=Tools.GetJsonValue(msg,"media_id");

resultMsg=WXApi.Send(access_token,WXMsgUtil.CreateImageJson(media_id,openidList));

}

//发送图文消息

if(type=="3")

{

DataTabledt=ImgItemDal.GetImgItemTable(loginUser.OrgID,data);

stringarticlesJson=ImgItemDal.GetArticlesJsonStr(this,access_token,dt);

stringnewsMsg=WXApi.UploadNews(access_token,articlesJson);

stringnewsid=Tools.GetJsonValue(newsMsg,"media_id");

resultMsg=WXApi.Send(access_token,WXMsgUtil.CreateNewsJson(newsid,openidList));

}

//结果处理

if(!

string.IsNullOrWhiteSpace(resultMsg))

{

stringerrcode=Tools.GetJsonValue(resultMsg,"errcode");

stringerrmsg=Tools.GetJsonValue(resultMsg,"errmsg");

if(errcode=="0")

{

return"{\"code\":

1,\"msg\":

\"\"}";

}

else

{

return"{\"code\":

0,\"msg\":

\"errcode:

"

+errcode+",errmsg:

"

+errmsg+"\"}";

}

}

else

{

return"{\"code\":

0,\"msg\":

\"type参数错误\"}";

}

}

源代码下载

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2