手机版

网微信公众号开发之公众号消息处理

时间:2021-09-09 来源:互联网 编辑:宝哥软件园 浏览:

一。前言

微信公众平台的消息处理还是比较完善的,有最基本的文本消息,到图文消息,到图片消息,语音消息,视频消息,音乐消息其基本原理都是一样的,只不过所邮政的可扩展标记语言数据有所差别,在处理消息之前,我们要认真阅读,官方给我们的文档:http://MP。微信。QQ。B3全民教育4 ada 8e 577d 45e。html。首先我们从最基本的文本消息处理开始。

xmlToUserName![CData[用户]]/用户名称用户名![CDATA[来自用户]]/来自usernamecreatetime 12345678/CreateTimeMsgType![CData[文本]]/MsgTypeContent![CDATA[你好]]/内容/xml我们可以看到这是消息处理的一个最基本的模式,有发送者,接受者,创建时间,类型,内容等等。

首先我们来创建一个消息处理的类,这个类用来捕获,所有的消息请求,根据不同的消息请求类型来处理不同的消息回复。

公共类WeinServiCe {///summary///TOKEN///summary private const字符串TOKEN=' finder///摘要///签名////摘要私有常量字符串SIGNATURE=' signature///摘要///时间戳////摘要私有常量字符串时间戳='时间戳;///摘要///随机数////摘要私有常量字符串NONCE=' nonce///摘要///随机字符串////摘要私有常量字符串ECHOSTR=' ECHOSTR////summary//////summary private http Request { get;设置;} ///摘要///构造函数////summary////param name=' request '/param public WeinServiCe(Httprequest request){ this .请求=请求;} ///摘要///处理请求,产生响应////摘要////返回/返回公共字符串响应(){字符串方法=请求.HttpMethod。toupper();//验证签名如果(方法==' GET '){ if(CheckSignature()){ return Request .查询字符串[ECHOSTR];} else { return ' error} } //处理消息if(method==' POST '){ return response msg();} else { return '无法处理;} } ///摘要///处理请求////summary ///returns/returns私有字符串响应消息(){字符串请求XML=常用微信.ReadRequest(这个。请求);IHandler处理程序=HandlerFactory .创建处理程序(RequestXML);if (handler!=null){ 0返回处理程序HandleRequest();}返回字符串。空的;} ///摘要///检查签名////summary////param name=' Request '/param////returns/returns private bool CheckSignature(){ string signature=Request .查询字符串[SIGNATION];字符串时间戳=请求查询字符串[时间戳];字符串随机数=请求查询字符串[NONCE];Liststring list=new Liststring();名单添加(TOKEN);名单。添加(时间戳);名单添加(nonce);//排序名单sort();//拼串字符串输入=字符串。空的;foreach(列表中的定义变量项目){输入=项目} //加密字符串new _ signature=安全实用程序.sha1加密(输入);//验证if(new _ signature==signature){ return true;} else {返回false} } }在来看看我们的首先是如何捕获消息的。首页Default.ashx的代码如下

公共无效进程请求(HttpContext上下文){上下文.响应。content TYPe=' text/html ';字符串postString=字符串.空的;if (HttpContext .当前。请求。httpmethod。toupper()==' POST '){//由微信服务接收请求,具体处理请求微信服务wxService=新的微信服务(上下文。请求);string responseMsg=wxService .response();语境。响应。clear();语境。响应。字符集=' UTF-8 ';语境。回应。写(response msg);语境。响应。end();} else {字符串标记=' Wei 2414201如果(字符串IsNullOrEmpty(token)){ return;}字符串echoString=HttpContext .当前。请求。查询字符串[' echoStr '];字符串签名=HttpContext .当前请求。QueryString['签名'];字符串时间戳=HttpContext .当前请求。QueryString['时间戳'];字符串nonce=HttpContext .当前请求。查询字符串[' nonce '];if(!字符串IsNullOrEmpty(echoString)){ HttpContext .当前。响应。写入(回声字符串);HttpContext .当前。响应。结束();} } }从上面的代码中我们可以看到WeiXinService.cs类中的消息相应至关重要。

///摘要///处理请求////summary ///returns/returns私有字符串响应消息(){字符串请求XML=常用微信.ReadRequest(这个。请求);IHandler处理程序=HandlerFactory .创建处理程序(RequestXML);if (handler!=null){ 0返回处理程序HandleRequest();}返回字符串。空的;}IHandler是一个消息处理接口,其下面有事件处理程序处理类实现这个接口。代码如下

///摘要///处理接口////摘要公共接口IHandler { ///摘要///处理请求////summary////returns/returns string HandleRequest();}EventHandler

类事件处理程序: I处理程序{///summary///请求的XML///摘要私有字符串RequestXml { get设置;} ///摘要///构造函数////summary////param name=' request XMl '/param public事件处理程序(string request XMl){ this .request XMl=RequestXMl }////摘要///处理请求////摘要////返回/返回公共字符串HandleRequest(){字符串响应=字符串.空的;事件消息em=事件消息LoadFromXMl(RequestXMl);if (em .事件。Equals('subscribe ',StringComparison).ordinalignorcase))//用来判断是不是首次关注{ Pictextmessage TM=new Pictextmessage();//我自己创建的一个图文消息处理类tm .ToUserName=em .从用户名;tm .FromUserName=em .ToUserNametm .CreateTime=CommonWeiXin .GetNowTime();响应=tm .生成内容();}返回响应;} }TextHandler

///摘要///文本信息处理类////摘要公共类TextHandler : IHandler { string open id { get;设置;}字符串access _ token { get设置;} ///摘要///请求的XML///摘要私有字符串RequestXml { get设置;} ///摘要///构造函数////summary////param name=' request XML '请求的xml/param公共TextHandler(字符串requestXml) { this .request XMl=RequestXMl }////摘要///处理请求////摘要////返回/返回公共字符串HandleRequest(){字符串响应=字符串.空的;文本消息tm=文本消息LoadFromXMl(RequestXMl);字符串内容=tm .内容。trim();如果(字符串IsNullOrEmpty(content)){ response='您什么都没输入,没法帮您啊。';} else {字符串用户名=系统配置。配置管理器。appsettings[' weixinid '].ToString();接入令牌=接入令牌获取(用户名);access _ token=令牌。access _ tokenopenid=tm .从用户名;响应=处理其他(内容);} tm .内容=响应;//进行发送者、接收者转换字符串温度=tm .ToUserNametm .ToUserName=tm .从用户名;tm .from用户名=临时响应=tm .生成内容();返回响应;} ///摘要///处理其他消息////summary////param name=' TM '/param////returns/returns私有字符串HandleOther(字符串请求内容){字符串响应=字符串.空的;if (requestContent .包含('你好)|| requestContent .包含('您好)){ response='您也好~';}else if (requestContent .包含(' openid') || requestContent .包含(' id') || requestContent .包含('标识')//用来匹配用户输入的关键字{响应='你的OpenID : ' OpenID } else if(request content .包含('标记)|| requestContent .包含(“access _ token”){ response='你的access _ token : ' access _ token;}else { response='试试其他关键字吧。';}返回响应;} }HandlerFactory

///摘要///处理器工厂类////摘要公共类HandlerFactory { ///摘要///创建处理器////summary////param name=' request XML '请求的xml/param ///returnsIHandler对象/返回公共静态IHandler CreateHandler(字符串请求XML){ IHandler处理程序=nullif(!字符串IsNullOrEmpty(requestXml)) { //解析数据文档文档=新系统XML。XMl文档();医生加载XMl(RequestXMl);XmlNode节点=doc .选择单个节点('/XML/MSgtype ');如果(节点!=null) { XmlCDataSection节=节点第一个孩子.作为XmlCDataSectionif(节!=null){ 0字符串msgType=截面.价值;switch(msgType){ case ' text ' :处理程序=新文本处理程序(请求XML);打破;案例'事件' :处理程序=新事件处理程序(RequestXML);打破;} } } }返回处理程序;} }在这里基本的一些类已经完成了,现在我们来完成,关注我们的微信公众号,我们就发送一条图文消息,同时输入我们的一些关键字,返回一些消息,比如输入编号返回用户的openid等等。

二。图片短信

公共类pictet Message : Message {///summary///模板静态字段////汇总私有静态字符串m _ Template///摘要///默认构造函数////摘要公共Pictextmessage(){ this .MsgType=' news} ///摘要///从可扩展标记语言数据加载文本消息////summary///param name=' XMl '/param public static Pictextmessage LoadFromXMl(字符串XMl){ Pictextmessage TM=null;if(!字符串IsNullOrEmpty(XML)){ xeElement元素=XElement .解析(XML);如果(元素!=null){ TM=new Pictextmessage();tm .FromUserName=元素。元素(常见微信.发件人_用户名)。价值;tm .ToUserName=元素。元素(常见微信.收件人_用户名)。价值;tm .CreateTime=元素。元素(常见微信.创建时间).价值;} } return tm} ///摘要///模板////汇总公共覆盖字符串模板{ get { if(字符串.IsNullOrEmpty(m _ Template)){ load Template();}返回m _ Template} } ///摘要///生成内容////summary////returns/returns public override string generate content(){ this .CreateTime=CommonWeiXin .GetNowTime();字符串字符串=字符串。格式(这个。模板这个。头儿,这个。从用户名,这个.创造时间);返回字符串;} ///摘要///加载模板////摘要私有静态void load Template(){ m _ Template=@ ' XML用户名称![CData[{ 0 }]/TouseName FrOm USername![CData[{ 1 }]/来自用户名创建时间{ 2 }/创建时间MsgType![CDATA[新闻]/MsgType文章计数1/文章计数文章项目标题![CDATA[有位停车欢迎你!]]/标题说明![CDATA[如有问题请致电400-6238-136或直接在微信留言,我们将第一时间为您服务!]]/描述PicUrl![CData[http://www .百度。com/Youwei。jpg]]/PiCurl URl![CData[http://www .百度。com]]/URl/item/Articles/XML ';} }最后我们的效果如下所示;

以上所述就是本文的全部内容了,希望大家能够喜欢

版权声明:网微信公众号开发之公众号消息处理是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。