/// <summary> /// 处理文本消息 /// </summary> /// <param name="msg">消息对象</param> /// <param name="args">参数(用于具体业务传递参数用)</param> /// <returns>是否处理成功</returns> public bool ProcessTextMessage(TextReceiveMessage msg, params object[] args) { if (msg.Content.StartsWith("#ly#")) { var usermodel = WeiXin.GetUserInfo(msg.FromUserName); if (usermodel != null) { new Eyousoft_yhq.BLL.BCustomMsg().Add(new Eyousoft_yhq.Model.CustomMsg() { OpenId = msg.FromUserName, NickName = usermodel.NickName, Sex = usermodel.Sex, CommendInfo = msg.Content, IssueTime = DateTime.Now }); MessageHandler.SendTextReplyMessage(msg.ToUserName, msg.FromUserName, "留言成功!"); } else { MessageHandler.SendTextReplyMessage(msg.ToUserName, msg.FromUserName, "获取用户信息失败!" + msg.FromUserName); } } return(true); }
/// /// 处理文本消息 /// ///消息对象 ///参数(用于具体业务传递参数用) ///是否处理成功 public bool ProcessTextMessage(TextReceiveMessage msg, params object[] args) { string response_msg = new Utility.SiteConfig().WechatAutoResponseMsg; MessageHandler.SendTextReplyMessage(msg.ToUserName, msg.FromUserName, response_msg); return(true); }
/// <summary> /// 自动根据“名称 金额”保存记账记录 /// </summary> /// <param name="trm"></param> /// <returns></returns> private string SaveOutBill(TextReceiveMessage trm) { string _result = string.Empty; string _content = trm.Content; if (string.IsNullOrEmpty(_content)) { return(_result); } string[] _jzs = new string[] { _content }; if (_content.Contains("\r\n")) { _jzs = _content.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); } foreach (string _jz in _jzs) { string _jzcontent = MatchMoney(_jz); if (string.IsNullOrEmpty(_jzcontent)) { continue; } char _char = _jzcontent.Contains(" ") ? ' ' : '='; string[] _jzvals = _jzcontent.Split(_char); bool _is = DataAgent.OutBill.SaveOutBill(trm.FromUserName, _jzvals[0], _jzvals[1]); if (!_is) { return(_jzcontent + " 保存失败,请进入查看记账记录!"); } _result = ResultStr(trm, WxResource.InterWxReport, "保存成功,请进入查看记账记录!"); } return(_result); }
public static void Process(HttpContext context) { string _postString = string.Empty; if (context.Request.HttpMethod.ToUpper() == "POST") { string _result = string.Empty; ReceiveMessageBase _rmb = MessageHandler.ConvertMsgToObject(WxResource.Token); if (_rmb is TextReceiveMessage) { TextReceiveMessage _trm = _rmb as TextReceiveMessage; _postString = WxFactory.WxTextFactory(_trm); if (string.IsNullOrEmpty(_postString)) { context.Response.Write("success"); return; } Logger.WriteTxtLog(_trm.ToUserName + "|" + _trm.FromUserName + "|" + _trm.Content); MessageHandler.SendTextReplyMessage(_rmb.ToUserName, _rmb.FromUserName, _postString); } else if (_rmb is VoiceReceiveMessage) //语音 { MessageHandler.DownloadMediaFileS(_rmb); } } else //获取开发者身份 { GetInterfaceRole(context); } }
/// <summary> /// 用户注册 /// </summary> /// <param name="trm"></param> /// <returns></returns> private string RegUser(TextReceiveMessage trm) { bool _result = DataAgent.WxUser.SaveWxUser(trm.FromUserName, trm.Content.Replace("注册 ", "")); if (_result) { LoadUsers(); return("注册成功!"); } return("注册失败!"); }
/// <summary> /// 产品码查询 /// </summary> /// <param name="ToUserName">请求人</param> /// <param name="FromUserName">服务号OpenId</param> /// <returns></returns> private bool NewsList(TextReceiveMessage msg, params object[] args) { string msgWord = msg.Content.ToLower(); if (msgWord.StartsWith("h")) { var usermodel = WeiXin.GetUserInfo(msg.FromUserName); if (usermodel != null) { List <NewsReplyMessageItem> items = new List <NewsReplyMessageItem>(); int rowsCount = 0; string wxm = msgWord.Substring(1); var list = new Eyousoft_yhq.BLL.Product().GetList(1, 1, ref rowsCount, new Eyousoft_yhq.Model.SerProduct() { FavourCode = wxm }); NewsReplyMessageItem NewsPicHeader = new NewsReplyMessageItem(); if (list != null && list.Count > 0) { NewsPicHeader.Description = EyouSoft.Common.Utils.GetText2(list[0].ProductDis, 50, true); NewsPicHeader.Url = "http://www.4008005216.com/AppPage/weixin/ProductInfo.aspx?id=" + list[0].ProductID; NewsPicHeader.PicUrl = (list[0].AttachList != null && list[0].AttachList.Count > 0) ? list[0].AttachList[0].FilePath : ""; NewsPicHeader.Title = list[0].ProductName; } ; items.Add(NewsPicHeader); NewsReplyMessage replyMsg = new NewsReplyMessage() { CreateTime = Tools.ConvertDateTimeInt(DateTime.Now), FromUserName = msg.ToUserName, ToUserName = msg.FromUserName, Articles = items }; if (list == null || list.Count == 0) { MessageHandler.SendTextReplyMessage(msg.ToUserName, msg.FromUserName, "查询产品不存在!"); return(true); } MessageHandler.SendReplyMessage(replyMsg); } else { MessageHandler.SendTextReplyMessage(msg.ToUserName, msg.FromUserName, "获取用户信息失败!" + msg.FromUserName); } } else { MessageHandler.SendTextReplyMessage(msg.ToUserName, msg.FromUserName, "亲!您的问题我不明白,要不您换个问法再试试,我这里只要输入5位产品码就行了。或者您可以进入\"旅游超市\"按分类查询。!"); } return(true); }
/// <summary> /// 返回的链接字符串 /// </summary> /// <param name="trm"></param> /// <param name="url"></param> /// <param name="content"></param> /// <returns></returns> private string ResultStr(TextReceiveMessage trm, string url, string content) { string _nickName = string.Empty; if (WxResource.Users != null) { var _query = WxResource.Users.FirstOrDefault(r => r.OpenId == trm.FromUserName); if (_query != null) { _nickName = _query.NickName; } } string _reurl = string.Format(url, trm.FromUserName, _nickName); return(string.Format(WxResource.PostInterString, _reurl, content)); }
private void RoomMessageTextReceived(TextReceiveMessage message) { if (_sendEcho || message.Sender != SessionId) { using (var memoryStream = new MemoryStream()) { new BinaryFormatter().Serialize(memoryStream, new TextMessage() { Text = message.Text, From = _nickName }); _buffer.SendMessageQueue.Enqueue(new NetworkMessage() { Type = MessageType.Text, Data = memoryStream.ToArray() }); } } }
/// <summary> /// 将公众平台POST过来的数据转化成实体对象 /// </summary> /// <param name="token"></param> /// <returns></returns> public static ReceiveMessageBase ConvertMsgToObject(string token) { if (!CheckSignature(token)) { return(null); } string msgBody = string.Empty; Stream s = System.Web.HttpContext.Current.Request.InputStream; byte[] b = new byte[s.Length]; s.Read(b, 0, (int)s.Length); msgBody = Encoding.UTF8.GetString(b); if (string.IsNullOrWhiteSpace(msgBody)) { return(null); } XmlDocument doc = null; MsgType msgType = MsgType.UnKnown; EventType eventType = EventType.UnKnown; ReceiveMessageBase msg = new ReceiveMessageBase(); msg.MsgType = msgType; msg.MessageBody = msgBody; XmlNode node = null; XmlNode tmpNode = null; try { doc = new XmlDocument(); doc.LoadXml(msgBody); //读取XML字符串 XmlElement rootElement = doc.DocumentElement; XmlNode msgTypeNode = rootElement.SelectSingleNode("MsgType"); //获取字符串中的消息类型 node = rootElement.SelectSingleNode("FromUserName"); if (node != null) { msg.FromUserName = node.InnerText; } node = rootElement.SelectSingleNode("ToUserName"); if (node != null) { msg.ToUserName = node.InnerText; } node = rootElement.SelectSingleNode("CreateTime"); if (node != null) { msg.CreateTime = Convert.ToInt64(node.InnerText); } #region 获取具体的消息对象 string strMsgType = msgTypeNode.InnerText; string msgId = string.Empty; string content = string.Empty; tmpNode = rootElement.SelectSingleNode("MsgId"); if (tmpNode != null) { msgId = tmpNode.InnerText.Trim(); } switch (strMsgType) { case "text": msgType = MsgType.Text; tmpNode = rootElement.SelectSingleNode("Content"); if (tmpNode != null) { content = tmpNode.InnerText.Trim(); } TextReceiveMessage txtMsg = new TextReceiveMessage() { CreateTime = msg.CreateTime, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, ToUserName = msg.ToUserName, MsgId = Convert.ToInt64(msgId), Content = content }; return(txtMsg); case "image": msgType = MsgType.Image; ImageReceiveMessage imgMsg = new ImageReceiveMessage() { CreateTime = msg.CreateTime, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgId = Convert.ToInt64(msgId), MsgType = msgType, ToUserName = msg.ToUserName, MediaId = rootElement.SelectSingleNode("MediaId").InnerText, PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText }; return(imgMsg); case "voice": msgType = MsgType.Voice; XmlNode node1 = rootElement.SelectSingleNode("Recognition"); if (node1 != null) { msgType = MsgType.VoiceResult; } VoiceReceiveMessage voiceMsg = new VoiceReceiveMessage() { CreateTime = msg.CreateTime, FromUserName = msg.FromUserName, ToUserName = msg.ToUserName, MessageBody = msg.MessageBody, MsgId = Convert.ToInt64(msgId), MsgType = msgType, Recognition = node1 == null ? string.Empty : node1.InnerText.Trim(), Format = rootElement.SelectSingleNode("Format").InnerText, MediaId = rootElement.SelectSingleNode("MediaId").InnerText }; return(voiceMsg); case "video": msgType = MsgType.Video; VideoReceiveMessage videoMsg = new VideoReceiveMessage() { CreateTime = msg.CreateTime, FromUserName = msg.FromUserName, MediaId = rootElement.SelectSingleNode("MediaId").InnerText, MessageBody = msg.MessageBody, MsgId = Convert.ToInt64(msgId), MsgType = msgType, ToUserName = msg.ToUserName, ThumbMediaId = rootElement.SelectSingleNode("ThumbMediaId").InnerText }; return(videoMsg); case "location": msgType = MsgType.Location; LocationReceiveMessage locationMsg = new LocationReceiveMessage() { CreateTime = msg.CreateTime, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgId = Convert.ToInt64(msgId), MsgType = msgType, ToUserName = msg.ToUserName, Label = rootElement.SelectSingleNode("Label").InnerText, Location_X = rootElement.SelectSingleNode("Location_X").InnerText, Location_Y = rootElement.SelectSingleNode("Location_Y ").InnerText, Scale = rootElement.SelectSingleNode("Scale").InnerText }; return(locationMsg); case "link": msgType = MsgType.Link; LinkReceiveMessage linkMsg = new LinkReceiveMessage() { CreateTime = msg.CreateTime, Description = rootElement.SelectSingleNode("Description").InnerText, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgId = Convert.ToInt64(msgId), MsgType = msgType, Title = rootElement.SelectSingleNode("Title").InnerText, ToUserName = msg.ToUserName, Url = rootElement.SelectSingleNode("Url ").InnerText }; return(linkMsg); case "event": msgType = MsgType.Event; eventType = EventType.UnKnown; msg.MsgType = msgType; XmlNode eventNode = rootElement.SelectSingleNode("Event"); if (eventNode != null) { switch (eventNode.InnerText) { case "subscribe": eventType = EventType.Subscribe; tmpNode = rootElement.SelectSingleNode("EventKey"); if (tmpNode != null) // && (!string.IsNullOrWhiteSpace(tmpNode.InnerText))) //&& tmpNode.InnerText.StartsWith("qrscene_") { //扫描二维码关注事件 ScanSubscribeEventMessage scanSubEvt = new ScanSubscribeEventMessage() { CreateTime = msg.CreateTime, EventKey = rootElement.SelectSingleNode("EventKey").InnerText, EventType = EventType.Subscribe, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, ToUserName = msg.ToUserName, Ticket = rootElement.SelectSingleNode("Ticket").InnerText }; return(scanSubEvt); } else { //普通关注事件 SubscribeEventMessage subEvt = new SubscribeEventMessage() { CreateTime = msg.CreateTime, EventType = EventType.Subscribe, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, ToUserName = msg.ToUserName }; return(subEvt); } case "unsubscribe": eventType = EventType.UnSubscribe; UnSubscribeEventMessage unSubEvt = new UnSubscribeEventMessage() { CreateTime = msg.CreateTime, EventType = eventType, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, ToUserName = msg.ToUserName }; return(unSubEvt); case "scan": eventType = EventType.Scan; ScanEventMessage scanEvt = new ScanEventMessage() { CreateTime = msg.CreateTime, EventKey = rootElement.SelectSingleNode("EventKey").InnerText, EventType = eventType, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, Ticket = rootElement.SelectSingleNode("Ticket").InnerText, ToUserName = msg.ToUserName }; return(scanEvt); case "LOCATION": eventType = EventType.Location; UploadLocationEventMessage locationEvt = new UploadLocationEventMessage() { CreateTime = msg.CreateTime, EventType = eventType, FromUserName = msg.FromUserName, Latitude = rootElement.SelectSingleNode("Latitude").InnerText, Longitude = rootElement.SelectSingleNode("Longitude").InnerText, MessageBody = msg.MessageBody, MsgType = msgType, Precision = rootElement.SelectSingleNode("Precision").InnerText, ToUserName = msg.ToUserName }; return(locationEvt); case "CLICK": eventType = EventType.Click; MenuEventMessage menuEvt = new MenuEventMessage() { CreateTime = msg.CreateTime, EventKey = rootElement.SelectSingleNode("EventKey").InnerText, EventType = eventType, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, ToUserName = msg.ToUserName }; return(menuEvt); default: EventMessage evtMsg = new EventMessage() { CreateTime = msg.CreateTime, EventType = EventType.UnKnown, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = MsgType.Event, ToUserName = msg.ToUserName }; return(evtMsg); } } break; } msg.MsgType = msgType; #endregion } finally { if (doc != null) { doc = null; } } msg.MsgType = msgType; return(msg); }
/// <summary> /// 将公众平台POST过来的数据转化成实体对象 /// </summary> /// <param name="token">用户在公众平台填写的token</param> /// <returns>消息处理的基类</returns> public static ReceiveMessageBase ConvertMsgToObject(string token) { if (!CheckSignature(token)) { return(null); } //获取传入的HTTP消息 var s = HttpContext.Current.Request.InputStream; var b = new byte[s.Length]; s.Read(b, 0, (int)s.Length); var msgBody = Encoding.UTF8.GetString(b); if (string.IsNullOrWhiteSpace(msgBody)) { return(null); } var msgType = MsgType.UnKnown; //获取消息主体和设置消息类型枚举 var msg = new ReceiveMessageBase { MsgType = msgType, MessageBody = msgBody }; try { //读取XML字符串,返回消息为xml文档类型 var doc = new XmlDocument(); doc.LoadXml(msgBody); //获取xml根节点 var rootElement = doc.DocumentElement; if (rootElement != null) { //获取字符串中的消息类型,搜索xml消息节点信息 var msgTypeNode = rootElement.SelectSingleNode("MsgType"); var node = rootElement.SelectSingleNode("FromUserName"); if (node != null) { msg.FromUserName = node.InnerText; } node = rootElement.SelectSingleNode("ToUserName"); if (node != null) { msg.ToUserName = node.InnerText; } node = rootElement.SelectSingleNode("CreateTime"); if (node != null) { msg.CreateTime = Convert.ToInt64(node.InnerText); } //根据获取传入的消息主体数据,判断消息类型,获取具体的消息对象 if (msgTypeNode != null) { var strMsgType = msgTypeNode.InnerText; var msgId = string.Empty; var content = string.Empty; var tmpNode = rootElement.SelectSingleNode("MsgId"); if (tmpNode != null) { msgId = tmpNode.InnerText.Trim(); } switch (strMsgType) { case "text": msgType = MsgType.Text; //获取文本消息内容 tmpNode = rootElement.SelectSingleNode("Content"); if (tmpNode != null) { content = tmpNode.InnerText.Trim(); } var txtMsg = new TextReceiveMessage() { CreateTime = msg.CreateTime, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, ToUserName = msg.ToUserName, MsgId = Convert.ToInt64(msgId), Content = content }; return(txtMsg); case "image": msgType = MsgType.Image; ImageReceiveMessage imgMsg = null; var selectSingleNode = rootElement.SelectSingleNode("MediaId"); if (selectSingleNode != null) { var singleNode = rootElement.SelectSingleNode("PicUrl"); if (singleNode != null) { imgMsg = new ImageReceiveMessage() { CreateTime = msg.CreateTime, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgId = Convert.ToInt64(msgId), MsgType = msgType, ToUserName = msg.ToUserName, MediaId = selectSingleNode.InnerText, PicUrl = singleNode.InnerText } } ; } return(imgMsg); case "voice": msgType = MsgType.Voice; VoiceReceiveMessage voiceMsg = null; var node1 = rootElement.SelectSingleNode("Recognition"); if (node1 != null) { msgType = MsgType.VoiceResult; } var xmlNode = rootElement.SelectSingleNode("Format"); if (xmlNode != null) { var selectSingleNode1 = rootElement.SelectSingleNode("MediaId"); if (selectSingleNode1 != null) { voiceMsg = new VoiceReceiveMessage() { CreateTime = msg.CreateTime, FromUserName = msg.FromUserName, ToUserName = msg.ToUserName, MessageBody = msg.MessageBody, MsgId = Convert.ToInt64(msgId), MsgType = msgType, Recognition = node1?.InnerText.Trim() ?? string.Empty, Format = xmlNode.InnerText, MediaId = selectSingleNode1.InnerText } } ; } return(voiceMsg); case "video": msgType = MsgType.Video; VideoReceiveMessage videoMsg = null; var singleNode1 = rootElement.SelectSingleNode("MediaId"); if (singleNode1 != null) { var singleNode = rootElement.SelectSingleNode("ThumbMediaId"); if (singleNode != null) { videoMsg = new VideoReceiveMessage() { CreateTime = msg.CreateTime, FromUserName = msg.FromUserName, MediaId = singleNode1.InnerText, MessageBody = msg.MessageBody, MsgId = Convert.ToInt64(msgId), MsgType = msgType, ToUserName = msg.ToUserName, ThumbMediaId = singleNode.InnerText }; } } return(videoMsg); case "location": msgType = MsgType.Location; LocationReceiveMessage locationMsg = null; var xmlNode1 = rootElement.SelectSingleNode("Label"); if (xmlNode1 != null) { var selectSingleNode2 = rootElement.SelectSingleNode("Location_X"); if (selectSingleNode2 == null) { return(null); } var singleNode = rootElement.SelectSingleNode("Location_Y "); if (singleNode == null) { return(null); } var selectSingleNode1 = rootElement.SelectSingleNode("Scale"); if (selectSingleNode1 != null) { locationMsg = new LocationReceiveMessage() { CreateTime = msg.CreateTime, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgId = Convert.ToInt64(msgId), MsgType = msgType, ToUserName = msg.ToUserName, Label = xmlNode1.InnerText, LocationX = selectSingleNode2.InnerText, LocationY = singleNode.InnerText, Scale = selectSingleNode1.InnerText } } ; } return(locationMsg); case "link": msgType = MsgType.Link; LinkReceiveMessage linkMsg = null; var singleNode2 = rootElement.SelectSingleNode("Description"); if (singleNode2 != null) { var xmlNode2 = rootElement.SelectSingleNode("Title"); if (xmlNode2 == null) { return((LinkReceiveMessage)null); } var singleNode = rootElement.SelectSingleNode("Url "); if (singleNode != null) { linkMsg = new LinkReceiveMessage() { CreateTime = msg.CreateTime, Description = singleNode2.InnerText, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgId = Convert.ToInt64(msgId), MsgType = msgType, Title = xmlNode2.InnerText, ToUserName = msg.ToUserName, Url = singleNode.InnerText } } ; } return(linkMsg); case "event": msgType = MsgType.Event; msg.MsgType = msgType; ScanSubscribeEventMessage scanSubEvt = null; var eventNode = rootElement.SelectSingleNode("Event"); if (eventNode != null) { EventType eventType; switch (eventNode.InnerText) { case "subscribe": tmpNode = rootElement.SelectSingleNode("EventKey"); if (tmpNode != null) // && (!string.IsNullOrWhiteSpace(tmpNode.InnerText))) //&& tmpNode.InnerText.StartsWith("qrscene_") { //扫描二维码关注事件 var singleNode = rootElement.SelectSingleNode("EventKey"); if (singleNode == null) { return(null); } var selectSingleNode1 = rootElement.SelectSingleNode("Ticket"); if (selectSingleNode1 != null) { scanSubEvt = new ScanSubscribeEventMessage() { CreateTime = msg.CreateTime, EventKey = singleNode.InnerText, EventType = EventType.Subscribe, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, ToUserName = msg.ToUserName, Ticket = selectSingleNode1.InnerText } } ; return(scanSubEvt); } else { //普通关注事件 var subEvt = new SubscribeEventMessage() { CreateTime = msg.CreateTime, EventType = EventType.Subscribe, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, ToUserName = msg.ToUserName }; return(subEvt); } case "unsubscribe": eventType = EventType.UnSubscribe; var unSubEvt = new UnSubscribeEventMessage() { CreateTime = msg.CreateTime, EventType = eventType, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, ToUserName = msg.ToUserName }; return(unSubEvt); case "scan": eventType = EventType.Scan; ScanEventMessage scanEvt = null; var selectSingleNode2 = rootElement.SelectSingleNode("EventKey"); if (selectSingleNode2 != null) { var xmlNode2 = rootElement.SelectSingleNode("Ticket"); if (xmlNode2 != null) { scanEvt = new ScanEventMessage() { CreateTime = msg.CreateTime, EventKey = selectSingleNode2.InnerText, EventType = eventType, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, Ticket = xmlNode2.InnerText, ToUserName = msg.ToUserName } } ; } return(scanEvt); case "LOCATION": eventType = EventType.Location; UploadLocationEventMessage locationEvt = null; var node2 = rootElement.SelectSingleNode("Latitude"); if (node2 != null) { var selectSingleNode3 = rootElement.SelectSingleNode("Longitude"); if (selectSingleNode3 == null) { return(null); } var singleNode = rootElement.SelectSingleNode("Precision"); if (singleNode != null) { locationEvt = new UploadLocationEventMessage() { CreateTime = msg.CreateTime, EventType = eventType, FromUserName = msg.FromUserName, Latitude = node2.InnerText, Longitude = selectSingleNode3.InnerText, MessageBody = msg.MessageBody, MsgType = msgType, Precision = singleNode.InnerText, ToUserName = msg.ToUserName } } ; } return(locationEvt); case "CLICK": eventType = EventType.Click; MenuEventMessage menuEvt = null; var singleNode3 = rootElement.SelectSingleNode("EventKey"); if (singleNode3 != null) { menuEvt = new MenuEventMessage() { CreateTime = msg.CreateTime, EventKey = singleNode3.InnerText, EventType = eventType, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, ToUserName = msg.ToUserName } } ; return(menuEvt); default: var evtMsg = new EventMessage() { CreateTime = msg.CreateTime, EventType = EventType.UnKnown, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = MsgType.Event, ToUserName = msg.ToUserName }; return(evtMsg); } } break; } } } msg.MsgType = msgType; } finally { msg.MsgType = msgType; } return(msg); }
public static string WxTextFactory(TextReceiveMessage trm) { return(new WxFactory().WxTextBranchFactory(trm)); }
public string WxTextBranchFactory(TextReceiveMessage trm) { string _result = string.Empty; switch (trm.Content) { case "1": _result = ResultStr(trm, WxResource.InterWxAccBill, "随手记"); break; case "2": _result = ResultStr(trm, WxResource.InterWxAccount, "记一笔"); break; case "3": _result = ResultStr(trm, WxResource.InterWxIncome, "收一笔"); break; case "4": _result = ResultStr(trm, WxResource.InterWxReport, "报一报"); break; case "5": _result = ResultStr(trm, WxResource.InterWxQues, "答答题,提提高"); break; case "11": _result = ResultStr(trm, WxResource.InterWxSms, "查短信"); break; case "12": _result = ResultStr(trm, WxResource.InterWpCode, "电子码"); break; case "IP": _result = Tools.GetExtenalIpAddress(); break; case "0": _result = ResultStr(trm, WxResource.InterWxSchool, "汐汐学习"); break; case "a": case "00": _result = ResultStr(trm, WxResource.InterWxHisInfo, "客户信息"); break; } if (!string.IsNullOrEmpty(_result)) { return(_result); } if (trm.Content.IndexOf("注册 ") == 0) { _result = RegUser(trm); } else { //直接记账处理 _result = SaveOutBill(trm); if (_result != string.Empty) { return(_result); } } return(_result); }
/// <summary> /// 将公众平台POST过来的数据转化成实体对象 /// </summary> /// <param name="token"></param> /// <returns></returns> public static ReceiveMessageBase ConvertMsgToObject(string token) { //if (!CheckSignature(token)) //{ // return null; //} try { string msgBody = string.Empty; Stream s = System.Web.HttpContext.Current.Request.InputStream; byte[] b = new byte[s.Length]; s.Read(b, 0, (int)s.Length); msgBody = Encoding.UTF8.GetString(b); //Utility.LogHelper.WriteDebug("Foresight.Winxin_消息内容", msgBody); if (WebUtils.IsNullOrWhiteSpace(msgBody)) { return(null); } XmlDocument doc = null; MsgType msgType = MsgType.UnKnown; EventType eventType = EventType.UnKnown; ReceiveMessageBase msg = new ReceiveMessageBase(); msg.MsgType = msgType; msg.MessageBody = msgBody; XmlNode node = null; XmlNode tmpNode = null; try { doc = new XmlDocument(); doc.LoadXml(msgBody); //读取XML字符串 XmlElement rootElement = doc.DocumentElement; XmlNode msgTypeNode = rootElement.SelectSingleNode("MsgType"); //获取字符串中的消息类型 node = rootElement.SelectSingleNode("FromUserName"); if (node != null) { msg.FromUserName = node.InnerText; } node = rootElement.SelectSingleNode("ToUserName"); if (node != null) { msg.ToUserName = node.InnerText; } node = rootElement.SelectSingleNode("CreateTime"); if (node != null) { msg.CreateTime = Convert.ToInt64(node.InnerText); } #region 获取具体的消息对象 string strMsgType = msgTypeNode.InnerText; string msgId = string.Empty; string content = string.Empty; tmpNode = rootElement.SelectSingleNode("MsgId"); if (tmpNode != null) { msgId = tmpNode.InnerText.Trim(); } switch (strMsgType) { case "text": msgType = MsgType.Text; tmpNode = rootElement.SelectSingleNode("Content"); if (tmpNode != null) { content = tmpNode.InnerText.Trim(); } TextReceiveMessage txtMsg = new TextReceiveMessage() { CreateTime = msg.CreateTime, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, ToUserName = msg.ToUserName, MsgId = Convert.ToInt64(msgId), Content = content }; return(txtMsg); case "image": msgType = MsgType.Image; ImageReceiveMessage imgMsg = new ImageReceiveMessage() { CreateTime = msg.CreateTime, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgId = Convert.ToInt64(msgId), MsgType = msgType, ToUserName = msg.ToUserName, MediaId = rootElement.SelectSingleNode("MediaId").InnerText, PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText }; return(imgMsg); case "voice": msgType = MsgType.Voice; XmlNode node1 = rootElement.SelectSingleNode("Recognition"); if (node1 != null) { msgType = MsgType.VoiceResult; } VoiceReceiveMessage voiceMsg = new VoiceReceiveMessage() { CreateTime = msg.CreateTime, FromUserName = msg.FromUserName, ToUserName = msg.ToUserName, MessageBody = msg.MessageBody, MsgId = Convert.ToInt64(msgId), MsgType = msgType, Recognition = node1 == null ? string.Empty : node1.InnerText.Trim(), Format = rootElement.SelectSingleNode("Format").InnerText, MediaId = rootElement.SelectSingleNode("MediaId").InnerText }; return(voiceMsg); case "video": msgType = MsgType.Video; VideoReceiveMessage videoMsg = new VideoReceiveMessage() { CreateTime = msg.CreateTime, FromUserName = msg.FromUserName, MediaId = rootElement.SelectSingleNode("MediaId").InnerText, MessageBody = msg.MessageBody, MsgId = Convert.ToInt64(msgId), MsgType = msgType, ToUserName = msg.ToUserName, ThumbMediaId = rootElement.SelectSingleNode("ThumbMediaId").InnerText }; return(videoMsg); case "location": msgType = MsgType.Location; LocationReceiveMessage locationMsg = new LocationReceiveMessage() { CreateTime = msg.CreateTime, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgId = Convert.ToInt64(msgId), MsgType = msgType, ToUserName = msg.ToUserName, Label = rootElement.SelectSingleNode("Label").InnerText, Location_X = rootElement.SelectSingleNode("Location_X").InnerText, Location_Y = rootElement.SelectSingleNode("Location_Y ").InnerText, Scale = rootElement.SelectSingleNode("Scale").InnerText }; return(locationMsg); case "link": msgType = MsgType.Link; LinkReceiveMessage linkMsg = new LinkReceiveMessage() { CreateTime = msg.CreateTime, Description = rootElement.SelectSingleNode("Description").InnerText, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgId = Convert.ToInt64(msgId), MsgType = msgType, Title = rootElement.SelectSingleNode("Title").InnerText, ToUserName = msg.ToUserName, Url = rootElement.SelectSingleNode("Url ").InnerText }; return(linkMsg); case "event": msgType = MsgType.Event; eventType = EventType.UnKnown; msg.MsgType = msgType; XmlNode eventNode = rootElement.SelectSingleNode("Event"); if (eventNode != null) { switch (eventNode.InnerText.ToLower()) { case "subscribe": { eventType = EventType.Subscribe; var node_EventKey = rootElement.SelectSingleNode("EventKey"); var node_Ticket = rootElement.SelectSingleNode("Ticket"); //普通关注事件 SubscribeEventMessage subEvt = new SubscribeEventMessage() { CreateTime = msg.CreateTime, EventType = EventType.Subscribe, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, ToUserName = msg.ToUserName, EventKey = (node_EventKey != null && !string.IsNullOrEmpty(node_EventKey.InnerText) && node_EventKey.InnerText.StartsWith("qrscene_")) ? node_EventKey.InnerText : null, Ticket = (node_Ticket != null && !string.IsNullOrEmpty(node_Ticket.InnerText) && node_Ticket.InnerText.StartsWith("qrscene_")) ? node_Ticket.InnerText : null, }; return(subEvt); } case "unsubscribe": { eventType = EventType.UnSubscribe; UnSubscribeEventMessage unSubEvt = new UnSubscribeEventMessage() { CreateTime = msg.CreateTime, EventType = eventType, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, ToUserName = msg.ToUserName }; return(unSubEvt); } case "scan": { eventType = EventType.Scan; var node_Ticket = rootElement.SelectSingleNode("Ticket"); ScanEventMessage scanEvt = new ScanEventMessage() { CreateTime = msg.CreateTime, EventKey = rootElement.SelectSingleNode("EventKey").InnerText, EventType = eventType, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, Ticket = (node_Ticket != null && !string.IsNullOrEmpty(node_Ticket.InnerText) && node_Ticket.InnerText.StartsWith("qrscene_")) ? node_Ticket.InnerText : null, ToUserName = msg.ToUserName }; return(scanEvt); } case "location": { eventType = EventType.Location; UploadLocationEventMessage locationEvt = new UploadLocationEventMessage() { CreateTime = msg.CreateTime, EventType = eventType, FromUserName = msg.FromUserName, Latitude = rootElement.SelectSingleNode("Latitude").InnerText, Longitude = rootElement.SelectSingleNode("Longitude").InnerText, MessageBody = msg.MessageBody, MsgType = msgType, Precision = rootElement.SelectSingleNode("Precision").InnerText, ToUserName = msg.ToUserName }; return(locationEvt); } case "click": { eventType = EventType.Click; MenuEventMessage menuEvt = new MenuEventMessage() { CreateTime = msg.CreateTime, EventKey = rootElement.SelectSingleNode("EventKey").InnerText, EventType = eventType, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, ToUserName = msg.ToUserName }; return(menuEvt); } case "wificonnected": { eventType = EventType.WifiConnected; WifiConnectedEventMessage menuEvt = new WifiConnectedEventMessage() { CreateTime = msg.CreateTime, EventType = eventType, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = msgType, ToUserName = msg.ToUserName, ConnectTime = Convert.ToInt32(rootElement.SelectSingleNode("ConnectTime").InnerText), ExpireTime = Convert.ToInt32(rootElement.SelectSingleNode("ExpireTime").InnerText), VendorId = rootElement.SelectSingleNode("VendorId").InnerText, ShopId = rootElement.SelectSingleNode("ShopId").InnerText, DeviceNo = rootElement.SelectSingleNode("DeviceNo").InnerText, }; return(menuEvt); } default: { EventMessage evtMsg = new EventMessage() { CreateTime = msg.CreateTime, EventType = EventType.UnKnown, FromUserName = msg.FromUserName, MessageBody = msg.MessageBody, MsgType = MsgType.Event, ToUserName = msg.ToUserName }; return(evtMsg); } } } break; } msg.MsgType = msgType; #endregion } finally { if (doc != null) { doc = null; } } msg.MsgType = msgType; return(msg); } catch (Exception ex) { Utility.LogHelper.WriteError("Foresight.Winxin", "转化消息出错", ex); return(null); } }
// HANDLERS /////////////////////////////////////////////////////////////////////////////// private void RoomMessageTextReceived(TextReceiveMessage obj) { LastActivityDate = DateTime.UtcNow; }