C#微信公众号,微信公众号接口开发文档,C#.net 微信公众账号接口开发

C#微信公众号,微信公众号接口开发文档,C#.net 微信公众账号接口开发

这篇文章主要介绍了C# .网微信公众账号接口开发,需要的朋友可以参考下

微信越来越火,微信公众平台成为开发成新宠,本文用C# .网开发微信公众信号接口。

微信接口地址代码:

weixin _ wx=new weixin();

字符串postStr=

如果(请求HttpMethod。ToLower()=='post ')

{

流s=系统web . com。httpcontext。当前。请求。inputstream

字节[] b=新字节[长度];

南Read(b,0,(int)s . Length);

postStr=编码10 . UTF8。GetString(b);

如果(!字符串IsNullOrEmpty(postStr)) //请求处理

{

_wx .handle(postStr);

}

}

其他

{

_wx .auth();

}

微信处理类:

公共课微信

{

私有字符串Token=' weixin _ token//换成自己的代币

公共void Auth()

{

string echoStr=System .网络。httpcontext。当前。请求。查询字符串[' echoStr '];

if (CheckSignature())

{

如果(!字符串IsNullOrEmpty(echoStr))

{

系统web . com。httpcontext。当前。回应。write(echoStr);

系统web . com。httpcontext。当前。回应。end();

}

}

}

公共空句柄(字符串postStr)

{

//封装请求类

XML文档doc=new XML document();

医生加载XML(postStr);

XmlElement rootElement=doc .DocumentElement

XmlNode MsgType=rootElement .SelectSingleNode(' msg type ');

请求XML请求XML=新请求XML();

请求XML .ToUserName=rootElement .SelectSingleNode('ToUserName ').内部文本

请求XML .FromUserName=rootElement .SelectSingleNode('FromUserName ').内部文本

请求XML .CreateTime=rootElement .SelectSingleNode('CreateTime ').内部文本

请求XML .MsgType=MsgType .内部文本

if (requestXML .MsgType=='text ')

{

请求XML .内容=根元素.SelectSingleNode('Content ').内部文本

}

else if (requestXML .MsgType=='location ')

{

请求XML .Location_X=rootElement .SelectSingleNode('Location_X ').内部文本

请求XML .Location_Y=rootElement .SelectSingleNode('Location_Y ').内部文本

请求XML .Scale=rootElement .SelectSingleNode('Scale ').内部文本

请求XML .Label=rootElement .SelectSingleNode('Label ').内部文本

}

else if (requestXML .MsgType=='image ')

{

请求XML .PicUrl=rootElement .SelectSingleNode('PicUrl ').内部文本

}

//回复消息

响应消息(请求XML);

}

///摘要

///验证微信签名

////摘要

///* 将令牌、时间戳、随机数三个参数进行字典序排序

///* 将三个参数字符串拼接成一个字符串进行sha1加密

///* 开发者获得加密后的字符串可与签名对比,标识该请求来源于微信。

///返回/返回

私有布尔校验签名()

{

字符串签名=系统web . com。httpcontext。当前。请求。查询字符串['签名'];

字符串时间戳=系统web . com。httpcontext。当前。请求。查询字符串[' timestamp '];

字符串nonce=系统.网络。httpcontext。当前。请求。查询字符串[' nonce '];

string[] ArrTmp={ Token,timestamp,nonce };

数组. sort(ArrTmp);//字典排序

string tmpStr=string .Join(',ArrTmp);

tmpStr=FormsAuthentication .hashpasswordforstoringconfigfile(tmpStr,“SHA1”);

tmpStr=tmpStr .降低();

if (tmpStr==签名)

{

返回真实的

}

其他

{

返回错误的

}

}

///摘要

///回复消息(微信信息返回)

////摘要

///param name='weixinXML'/param

私有void响应消息(请求XML请求XML)

{

尝试

{

字符串resxml=

mijiya mi=new mijiya(requestXML .内容,请求XML .来自用户名);

if (requestXML .MsgType=='text ')

{

//在这里执行一系列操作,从而实现自动回复内容。

string _reMsg=mi .getrmsg();

如果(mi。msgid类型==1)

{

resxml='xmlToUserName![CDATA[request XML .from username ']/to用户名from username![CDATA[request XML .to username ']/from username create time ' convertdatetimeint(datetime).now)'/createtimemsgid类型![CDATA[新闻]]/msgid类型内容![CDATA[]/内容文章数2/文章'中的内容;

resxml=mi .获取pic(请求XML).发件人用户名(发件人用户名):

resxml='/article sfuncflag 1/func flag/XML ';

}

其他语句

{

resxml='xmlToUserName![CDATA[request XML .from username ']/to用户名from username![CDATA[request XML .to username ']/from username create time ' convertdatetimeint(datetime).now)'/createtimemsgid类型![CDATA[文本]]/msgid类型内容![CDATA[' _ remsg ']/content func flag 1/func flag/XML ';

}

}

else if (requestXML).msgid type==location "

{

string city=getmapiinfo(request XML).Location_X,requestXML .位置_Y:

如果(城市='0')

{

resxml='xmlToUserName![CDATA[request XML .from username ']/to用户名from username![CDATA[request XML .to username ']/from username create time ' convertdatetimeint(datetime).now)'/createtimemsgid类型![CDATA[文本]]/msgid类型内容![CDATA[好啦,我们知道您的位置啦。您可以*我. get default()']/content func flag 1/func flag/XML ';

}

其他语句

{

resxml='xmlToUserName![CDATA[request XML .from username ']/to用户名from username![CDATA[request XML .to username ']/from username create time ' convertdatetimeint(datetime).now)'/createtimemsgid类型![CDATA[文本]]/msgid类型内容![CDATA[好啦,我们知道您的位置啦。您可以*我. get default()']/content func flag 1/func flag/XML ';

}

}

else if (requestXML).msgid type==image "

{

resxml='xmlToUserName![CDATA[request XML .from username ']/to用户名from username![CDATA[request XML .to username ']/from username create time ' convertdatetimeint(datetime).now)'/createtimemsgid类型![CDATA[文本]]/msgid类型内容![CDATA[亲,我没有看懂你的意思。您可以*我. get default()']/content func flag 1/func flag/XML ';

//返回10以内条

//int size=10;

//resxml='xmlToUserName![CDATA[request XML .from username ']/to用户名from username![CDATA[request XML .to username ']/from username create time ' convertdatetimeint(datetime).now)'/createtimemsgid类型![CDATA[新闻]]/msgid类型内容![CDATA[]/contentarticlecount ' size '/文章计数';

//list string list=new liststring();

////假如有20条查询的返回结果

//for(int I=0);i 20(一)

//

//列表.添加(' 1 ');

//}

//string[] piclist=新字串[]{ '/abstract _ pencil _ scribble _ background _ vector _ main。jpg ','/balloon_tree.jpg ','/bloom.jpg ','/colorful _ summer _ flowers。jpg ','/fall_tree.jpg ','/growing_flowers.jpg ','/shoes _ illustration。jpg ' };

//for(int I=0);我的名单。计数;(一)

//

//resxml='itemTitle![CDATA[沈阳-黑龙江]/TitleDescription![CDATA[元旦特价* 6550 300市场价* 6550 400]]/description picurl![CDATA[' ' http://www。后阁楼。com ' piclist[I]]/picurlurl![CDATA[http://www .后阁楼。com]]/URL/item ";

//}

//resxml='/article sfuncflag 1/func flag/XML ';

}

else if (wx_tmsg).GetMsgCount(requestXML).from用户名)==0)

{

resxml='xmlToUserName![CDATA[request XML .from username ']/to用户名from username![CDATA[request XML .to username ']/from username create time ' convertdatetimeint(datetime).now)'/createtimemsgid类型![CDATA[文本]]/msgid类型内容!CDATA[mi .get first()']/content func lag 1/func lag/XML ';

}

其他

{

resxml='xmlToUserName![CDATA[request XML .from username ']]/tousernamefromsusername![CDATA[request XML .to用户名']]/from用户名创建时间' ConvertDateTimeInt(DateTime .Now) '/CreateTimeMsgType![CDATA[text]]/MsgTypeContent![CDATA[亲,我没有看懂你的意思。您可以:'米. get default()']]/content func flag 1/func flag/XML ';

}

//写txt(resxml);

系统web . com。httpcontext。当前。回应。write(resxml);

WriteToDB(requestXML,resxml,mi。PID);

}

接住(例外ex)

{

//WriteTxt('异常:'例如."信息"被删除:"例如堆栈跟踪。ToString());

wx_logs .我的插入('异常:'例如."信息"被删除:"例如堆栈跟踪。ToString());

}

}

///摘要

///unix时间转换为日期时间

////摘要

///param name='timeStamp'/param

///返回/返回

私有DateTime UnixTimeToTime(字符串时间戳)

{

日期时间dtStart=时区CurrentTimeZone。ToLocalTime(新日期时间(1970,1,1));

长时间=长解析(时间戳"0000000");

TimeSpan to now=new TimeSpan(lTime);

返回dtStart .添加(toNow);

}

///摘要

///日期时间转换为统一时间

////摘要

///param name='time'/param

///返回/返回

private int ConvertDateTimeInt(System .日期时间)

{

系统。日期时间开始时间=时区CurrentTimeZone。ToLocalTime(新系统DateTime(1970,1,1));

return (int)(time - startTime).总秒数;

}

///摘要

///调用百度地图,返回坐标信息

////摘要

///param name='y '经度/param

///param name='x '纬度/param

///返回/返回

公共字符串GetMapInfo(字符串x,字符串y)

{

尝试

{

字符串分辨率=字符串。空的;

字符串参数=字符串。空的;

字符串URL='http://maps.googleapis.com/maps/api/geocode/xml';

parame='latlng=' x ',' y ' language=zh-cn sensor=false//此键为个人申请

res=webRequestPost(url,parame);

XML文档doc=new XML document();

医生加载XML(RES);

XmlElement rootElement=doc .DocumentElement

字符串状态=rootElement .SelectSingleNode('status ').内部文本

if (Status=='OK ')

{

//仅获取城市

XML模型列表XML结果=根元素.SelectSingleNode('/GeocodeResponse ').子节点;

for(int I=0;我xmlResults .数数;我)

{

XmlNode子节点=XML results[I];

if (childNode .Name=='status ')

{

继续;

}

字符串city=" 0

for(int w=0;w子节点ChildNodes。Countw)

{

for(int q=0;q子节点子节点[w]。子节点。数数;问)

{

XmlNode childeTwo=childNode .子节点[医]医.子节点[q];

如果(孩子二.Name=='long_name ')

{

city=childeTwo .内部文本

}

else if(孩子二.InnerText=='locality ')

{

返回城市;

}

}

}

返回城市;

}

}

}

接住(例外ex)

{

//WriteTxt('map异常:'例如.消息。ToString()' strike:'例如.堆栈跟踪。ToString());

返回"0";

}

返回"0";

}

///摘要

///发布提交调用抓取

////摘要

///param name='url '提交地址/param

///param name='param '参数/param

///returnsstring/returns

公共字符串webRequestPost(字符串url,字符串参数)

{

字节[] bs=系统正文。编码。utf8。getbytes(param);

http webrequest req=(http webrequest)http webrequest .创建(网址'?'param);

请求. method=" Post

请求。超时=120 * 1000;

请求content type=' application/x-www-form-urlencoded;';

请求。内容长度=bs .长度;

使用(流请求流=请求.GetRequestStream())

{

请求流。写(废话,0,废话.长度);

请求流flush();

}

使用(WebResponse wr=req .GetResponse())

{

//在这里对接收到的页面内容进行处理

Stream strm=wr .GetResponseStream();

StreamReader sr=新的StreamReader(strm,System .文字。编码。utf8);

弦线;

系统正文。StringBuilder sb=新系统正文。StringBuilder();

while ((line=sr.ReadLine())!=空)

{

某人(有人的简写)追加(行系统。环境。换行符);

}

Sr . Close();

strm .close();

归还某人ToString();

}

}

私有void写入到数据库(请求XML请求XML,string _xml,int _pid)

{

wx _ tmsg wx=new wx _ tmsg();

wx .add new();

wx .从用户名=requestXML .从用户名;

wx .ToUserName=requestXML .ToUserName

wx .MsgType=requestXML .MsgType

wx .Msg=requestXML .内容;

wx .Creatime=requestXML .创建时间

wx .location _ X=requestXMLlocation _ X;

wx .location _ Y=requestXMLlocation _ Y;

wx .Label=requestXML .标签;

wx .Scale=requestXML .规模;

wx .PicUrl=requestXML .皮库尔

wx.reply=_ xml

wx.pid=_ pid

尝试

{

wx .update();

}

接住(例外ex)

{

wx_logs .我的插件(例如消息);

//ex。消息;

}

}

}

//微信请求类

公共类RequestXML

{

私有字符串到sername=

///摘要

///消息接收方微信号,一般为公众平台账号微信号

////摘要

公共字符串到用户名

{

获取{返回用户名}

设置{ toUserName=value}

}

用户名=" "中的私有字符串;

///摘要

///消息发送方微信号

////摘要

用户名中的公共字符串

{

获取{ return用户名;}

设置{ fromUserName=value}

}

私有字符串创建时间=" ";

///摘要

///创建时间

////摘要

公共字符串创建时间

{

获取{ return createTime}

设置{ createTime=value}

}

私有字符串msgType=

///摘要

///信息类型地理位置:位置,文本消息:文本,消息类型:图像

////摘要

公共字符串MsgType

{

获取{ return msgType}

设置{ msgType=value}

}

私有字符串内容="";

///摘要

///信息内容

////摘要

公共字符串内容

{

获取{返回内容;}

设置{ content=value}

}

私有字符串location _ X=

///摘要

///地理位置纬度

////摘要

公共字符串位置_X

{

get { return location _ X;}

设置{ location _ X=value}

}

私有字符串location _ Y=

///摘要

///地理位置经度

////摘要

公共字符串位置_Y

{

get { return location _ Y;}

设置{ location _ Y=value}

}

私有字符串小数位数="";

///摘要

///地图缩放大小

////摘要

公共弦音阶

{

获取{返回比例}

设置{ scale=value}

}

私有字符串标签="";

///摘要

///地理位置信息

////摘要

公共字符串标签

{

获取{退货标签}

设置{ label=value}

}

私有字符串pic URL=

///摘要

///图片链接,开发者可以用HTTP GET获取

////摘要

公共字符串图片

{

获取{ return picUrl}

设置{ picUrl=value}

}

}

说明:其中用到的米吉亚类,主要是调用数据库进行关键词匹配自动回复内容,可以根据自己的业务情况编写。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 微信读书做笔记主页有显示吗,微信读书做笔记赚钱
  • 微信如何建群详细步骤,怎么建群微信怎么建群呢
  • 微信拍一拍怎么拍肩膀好看,微信如何拍一拍肩膀
  • 微信如何转发给qq,怎么从QQ转发到微信
  • 微信表情含义图解大全2022吃西瓜,微信表情含义图解大全2020高清
  • 微信网页版文件传输助手的文件在哪里,微信文件传输助手怎么批量保存
  • ,,详解微信小程序开发之formId使用(模板消息)
  • ,,最详细的ASP.NET微信JS-SDK支付代码
  • ,,微信小程序视图容器(swiper)组件创建轮播图
  • ,,微信小程序自定义toast弹窗效果的实现代码
  • ,,微信小程序的WXSS和全局、页面配置详细讲解
  • ,,微信小程序左右滚动公告栏效果代码实例
  • ,,微信小程序实现简易table表格
  • ,,微信小程序实现二维码签到考勤系统
  • ,,微信小程序中wxs文件的一些妙用分享
  • 留言与评论(共有 条评论)
       
    验证码: