微信公众平台-接收消息与发送被动消息
来源:互联网 发布:热门交友软件排行 编辑:程序博客网 时间:2024/04/29 07:12
接收消息代码如下(包含回复消息调用):
/// <summary> /// 接收用户消息 /// iftrue /// 2014-07-08 /// </summary> public class Receive { public delegate Models.Send_Msg delegate_SendMsg(string msgType); public delegate void delegate_RececiveHandler(Models.Receive_Msg model,ref string msg); /// <summary> /// 获取消息对象并且回复消息(需要根据MsgType强制转换成需要的实体类) /// </summary> /// <param name="context">上下文</param> /// <param name="getSendMsg">获取回复消息的方法</param> /// <param name="receiveHandler">处理接收消息的方法(如:持久化数据库)</param> /// <param name="msg">错误信息</param> /// <returns></returns> public Models.Receive_Msg GetReceiveMsgAndReply(HttpContext context, delegate_SendMsg getSendMsg,delegate_RececiveHandler receiveHandler, ref string msg) { if (context == null) return null; try { string _xml = new HttpHelper().PostInput(context.Request); if (string.IsNullOrEmpty(_xml)) return null; XmlDocument doc = new XmlDocument(); doc.LoadXml(_xml); XmlElement element = doc.DocumentElement; Models.Receive_Msg model = GetReceiveModel(element); //发送被动响应消息 Models.Send_Msg sendModel = getSendMsg(model.MsgType); if (sendModel != null) { sendModel.ToUserName = model.FromUserName; sendModel.FromUserName = model.ToUserName; Send send = new Send(); string strSend = send.Send_Msg<Models.Send_Msg>(sendModel, ref msg); if (!string.IsNullOrEmpty(strSend)) { context.Response.Output.Write(strSend); } } //调用消息处理方法 try { receiveHandler(model, ref msg); } catch (Exception ex) { msg = "receiveHandler异常:" + ex.Message; } return model; } catch (Exception ex) { msg = ex.Message; return null; } } /// <summary> /// 获取消息对象直接回复空串(需要根据MsgType强制转换成需要的实体类) /// </summary> /// <param name="context">上下文</param> /// <param name="getSendMsg">获取回复消息的方法</param> /// <param name="receiveHandler">处理接收消息的方法(如:持久化数据库)</param> /// <param name="msg">错误信息</param> /// <returns></returns> public Models.Receive_Msg GetReceiveMsg(HttpContext context, delegate_RececiveHandler receiveHandler, ref string msg) { if (context == null) return null; try { //直接回复空串,避免腾讯重复发送 context.Response.Output.Write(""); string _xml = new HttpHelper().PostInput(context.Request); if (string.IsNullOrEmpty(_xml)) return null; XmlDocument doc = new XmlDocument(); doc.LoadXml(_xml); XmlElement element = doc.DocumentElement; Models.Receive_Msg model = GetReceiveModel(element); //调用消息处理方法 try { receiveHandler(model, ref msg); } catch (Exception ex) { msg = "receiveHandler异常:" + ex.Message; } return model; } catch (Exception ex) { msg = ex.Message; return null; } } /// <summary> /// 解析XML,转换为实体 /// </summary> /// <param name="element"></param> /// <returns></returns> private Models.Receive_Msg GetReceiveModel(XmlElement element) { Models.Receive_Msg model = null; string msgType = element.SelectSingleNode("MsgType").InnerText; switch (msgType) { case MsgType.text: model = new Models.Receive_Text(); break; case MsgType.image: model = new Models.Receive_Image(); break; case MsgType.voice: model = new Models.Receive_Voice(); break; case MsgType.video: model = new Models.Receive_Video(); break; case MsgType.location: model = new Models.Receive_Location(); break; case MsgType.link: model = new Models.Receive_Link(); break; case MsgType.events: model = GetEventModel(element.SelectSingleNode("Event").InnerText, element.SelectSingleNode("EventKey") == null ? "" : element.SelectSingleNode("EventKey").InnerText); break; } try { foreach (System.Reflection.PropertyInfo p in model.GetType().GetProperties()) { if (p.Name != "Xml") { p.SetValue(model, element.SelectSingleNode(p.Name).InnerText, null); } else { p.SetValue(model, element.OuterXml, null); } } } catch (Exception ex) { throw ex; } return model; } /// <summary> /// 获取事件对象 /// </summary> /// <param name="evt">事件类型</param> /// <param name="eventKey">事件KEY值</param> /// <returns></returns> private Models.Receive_Msg GetEventModel(string evt, string eventKey) { Models.Receive_Msg model = null; switch (evt) { case Event.subscribe: if (string.IsNullOrEmpty(eventKey)) { model = new Models.Receive_Event(); } else { model = new Models.Receive_Event_Scan(); } break; case Event.unsubscribe: model = new Models.Receive_Event(); break; case Event.scan: model = new Models.Receive_Event_Scan(); break; case Event.location: model = new Models.Receive_Event_Location(); break; case Event.click: model = new Models.Receive_Event_Click(); break; case Event.view: model = new Models.Receive_Event_View(); break; } return model; } }
发送消息代码:
/// <summary> /// 发送微信 /// 2014-07-15 /// iftrue /// </summary> public class Send { public string Send_Msg<T>(T t, ref string msg) { if (t == null) return ""; StringBuilder strB = new StringBuilder(); strB.Append("<xml>"); foreach (System.Reflection.PropertyInfo p in t.GetType().GetProperties()) { strB.Append(string.Format("<{0}>{1}</{0}>", p.Name, p.GetValue(t, null).ToString())); } strB.Append("</xml>"); return strB.ToString(); } }
初始化参数代码:
/// <summary> /// 初始化参数 /// 2014-07-03 /// iftrue /// </summary> public class Init { /// <summary> /// 微信公众平台-开发者中心-服务器配置 中的Token /// </summary> public static string Token; /// <summary> /// 静态构造 /// </summary> static Init() { string _token = ConfigurationManager.AppSettings["weixin_token"]; if (!string.IsNullOrEmpty(_token)) Token = _token; } } /// <summary> /// 消息类型 /// </summary> public class MsgType { public const string text="text"; public const string image = "image"; public const string voice = "voice"; public const string video = "video"; public const string location = "location"; public const string link = "link"; public const string events = "event"; } /// <summary> /// 事件类型 /// </summary> public class Event { public const string subscribe = "subscribe"; public const string unsubscribe = "unsubscribe"; public const string scan = "SCAN"; public const string location = "LOCATION"; public const string click = "CLICK"; public const string view = "VIEW"; }
代码中还使用到实体类,为方便修改,使用了T4模板。
原码下载:微信公众平台接收(回复)消息C#版
2 0
- 微信公众平台-接收消息与发送被动消息
- 微信公众平台开发【发送消息】被动回复消息
- 微信公众平台-接收发送被动响应消息-PHP示例
- 微信公众号开发--消息的接收与被动回复消息
- 微信公众平台--接收普通消息与事件
- 微信公众平台开发【接收消息】接收普通消息
- 微信公众平台发送模板消息
- 微信公众平台发送模板消息
- 微信公众平台 发送模板消息
- 微信公众平台发送模板消息
- cgi程序读取post发送的特殊字符,尤其适合于微信公众平台开发中发送被动消息
- 微信公众平台开发-消息管理-发送客服消息
- 微信公众平台开发-消息管理-发送模板消息
- 微信公众平台开发教程Java版(三) 消息接收和发送
- 微信公众平台开发教程Java版(3) 消息接收和发送
- 微信公众平台开发教程Java版(三) 消息接收和发送
- PHP微信公众平台接口(四)——消息的接收和发送
- 微信公众平台_发送被动响应消息接口 实体类转换为xml工具类
- velocity里面前置js不执行解决方案
- 利用SecureCRT上传、下载文件(使用sz与rz命令),超实用!
- 如何选择开源许可证?
- python 实现发送手机短信验证码后台方法
- struts2.3.16+spring4.0.6+hibernate4.3.5整合出现的No Session found for current thread
- 微信公众平台-接收消息与发送被动消息
- 一个Navi过程下多个DocumentCompleted事件问题的解决办法
- 【读书笔记】STM32 命名规则
- 太原市中医治疗湿疣
- 字典树 + 深搜 之 hdu 1298
- 分段函数求值2.1
- 可以让你少奋斗十年的工作经验
- 句柄和指针的区别和联系
- 儿子种瓜受伤面临截肢 九旬老父卖瓜养家