/// <summary> /// XML字符串转成接收消息对象 /// </summary> /// <param name="msg"></param> /// <returns></returns> public static ReceiveMsg XmlToReceiveMsg(string msg) { ReceiveMsg retVal = null; //封装请求类 XmlDocument doc = new XmlDocument(); doc.LoadXml(msg); XmlElement rootElement = doc.DocumentElement; //MsgType XmlNode MsgType = rootElement.SelectSingleNode("MsgType"); switch (MsgType.InnerText) { case ReceiveMsg.TYPE_TEXT: //文本消息 retVal = new ReceiveTextMsg() { MsgId = rootElement.SelectSingleNode("MsgId").InnerText, Content = rootElement.SelectSingleNode("Content").InnerText }; break; case ReceiveMsg.TYPE_IMAGE: //图片 retVal = new ReceiveImageMsg() { MsgId = rootElement.SelectSingleNode("MsgId").InnerText, PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText, MediaId = rootElement.SelectSingleNode("MediaId").InnerText }; break; case ReceiveMsg.TYPE_VOICE: retVal = new ReceiveVoiceMsg() { MsgId = rootElement.SelectSingleNode("MsgId").InnerText, Format = rootElement.SelectSingleNode("Format").InnerText, MediaId = rootElement.SelectSingleNode("MediaId").InnerText }; break; case ReceiveMsg.TYPE_LOCATION: //位置 break; case ReceiveMsg.TYPE_LINK: //链接 break; case ReceiveMsg.TYPE_EVENT: //事件推送 支持V4.5+ retVal = new ReceiveEventMsg() { Event = rootElement.SelectSingleNode("Event").InnerText, EventKey = rootElement.SelectSingleNode("EventKey").InnerText }; break; } //接收的值--->接收消息类(也称为消息推送) retVal.ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText; retVal.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText; int ct = int.Parse(rootElement.SelectSingleNode("CreateTime").InnerText); retVal.CreateTime = SecondToDateTime(ct); // retVal.MsgType = MsgType.InnerText; return(retVal); }
/// <summary> /// 添加文本消息 /// </summary> /// <param name="info"></param> public void Insert(ReceiveTextMsg info) { Dictionary <string, object> data = new Dictionary <string, object>(); data.Add("ID", info.ID); data.Add("WXConfigID", info.WXConfigID); data.Add("ToUserName", info.ToUserName); data.Add("FromUserName", info.FromUserName); data.Add("CreateTime", info.CreateTime); data.Add("MsgType", info.MsgType); data.Add("Content", info.Content); data.Add("AddTime", info.AddTime); data.Add("MsgId", info.MsgId); SQLHelperExt.Insert(TABLE_NAME, data); }
/// <summary> /// 接收消息时,记录消息信息 /// </summary> /// <param name="doc"></param> public void MsgReceiving(XmlDocument doc) { if (doc != null) { ReceiveMsgDAL dal = new ReceiveMsgDAL(); ReceiveMsg info = new ReceiveMsg() { WXConfigID = wxConfig.ID, CreateTime = doc.DocumentElement.SelectSingleNode("CreateTime").InnerText, FromUserName = doc.DocumentElement.SelectSingleNode("FromUserName").InnerText, ToUserName = doc.DocumentElement.SelectSingleNode("ToUserName").InnerText, MsgType = doc.DocumentElement.SelectSingleNode("MsgType").InnerText, MsgBody = doc.InnerXml }; dal.InsertInfo(info); string msgType = doc.DocumentElement.SelectSingleNode("MsgType").InnerText; if (msgType.ToLower() == "text") { ReceiveTextMsgDAL receiveTextMsgDAL = new ReceiveTextMsgDAL(); ReceiveTextMsg receiveTextMsg = new ReceiveTextMsg() { WXConfigID = wxConfig.ID, CreateTime = doc.DocumentElement.SelectSingleNode("CreateTime").InnerText, FromUserName = doc.DocumentElement.SelectSingleNode("FromUserName").InnerText, ToUserName = doc.DocumentElement.SelectSingleNode("ToUserName").InnerText, MsgType = doc.DocumentElement.SelectSingleNode("MsgType").InnerText, Content = doc.DocumentElement.SelectSingleNode("Content").InnerText, }; receiveTextMsgDAL.Insert(receiveTextMsg); } string msgcontent = string.Empty; string openid = string.Empty; DAL.CR.ChatRoomDAL roomdal = new DAL.CR.ChatRoomDAL(); DAL.CR.ChatUsersDAL userdal = new DAL.CR.ChatUsersDAL(); Model.CR.ChatUsers usermodel = new Model.CR.ChatUsers(); DAL.CR.ChatMessageDAL msgdal = new DAL.CR.ChatMessageDAL(); Model.CR.ChatMessage msgmodel = new Model.CR.ChatMessage(); UserDAL wx_userdal = new UserDAL(); User wx_usermodel = new User(); openid = doc.DocumentElement.SelectSingleNode("FromUserName").InnerText; string ChatUserName = string.Empty; if (openid != null && openid != "") { if (!wx_userdal.ExistUserByOpenID(openid)) { UserInfo userinfo = weixin.GetUserInfo(openid);//获取用户信息 wx_usermodel.ID = Guid.NewGuid().ToString("N").ToUpper(); wx_usermodel.City = userinfo.City; wx_usermodel.Country = userinfo.Country; wx_usermodel.HeadImgUrl = userinfo.Headimgurl; wx_usermodel.Language = userinfo.Language; wx_usermodel.NickName = userinfo.NickName; wx_usermodel.OpenID = userinfo.OpenId; wx_usermodel.Province = userinfo.Province; wx_usermodel.Sex = userinfo.Sex; wx_usermodel.Subscribe = userinfo.Subscribe; wx_usermodel.SubscribeTime = userinfo.Subscribe_Time; ChatUserName = userinfo.NickName; if (null != wx_usermodel.ID) { wx_userdal.Insert(wx_usermodel); } } else { ChatUserName = wx_userdal.GetUserValueByOpenID("NickName", openid).ToString(); } } else////OpenID为空 { } int strRoomID = 1; #region 墙信息 if (msgType.ToLower() == "text") { msgcontent = doc.DocumentElement.SelectSingleNode("Content").InnerText; if (msgcontent.Contains("#")) { if (openid != null && openid != "") { #region 务号取用户加入信息 if (msgcontent.Length <= 1) //判断是否单独发送 # { if (userdal.ExistChatUser(Convert.ToInt32(msgcontent), openid)) //如果存在该用户 { string uid = userdal.GetChatUserValueByOpenID("ID", openid, Convert.ToInt32(msgcontent)).ToString(); if (uid.Trim() != null && uid.Trim() != "") { userdal.UpdateChatUserIsDel(uid);//更新用户状态 提示表示用户离开房间 } } } else { msgcontent = msgcontent.Substring(1); if (Regex.IsMatch(msgcontent, @"^\d+$"))//判断是否为数字 { string roomsitecode = roomdal.GetChatRoomValueByID("SiteCode", Convert.ToInt32(msgcontent)).ToString(); if (roomsitecode.Trim() != null && roomsitecode.Trim() != "") { if (roomdal.ExistChatRoomNum(roomsitecode, Convert.ToInt32(msgcontent))) { //提示房间存在 if (userdal.ExistChatUser(Convert.ToInt32(msgcontent), openid)) { //提示该用户已进入该房间 } else { usermodel.ID = Guid.NewGuid().ToString("N").ToUpper(); usermodel.OpenID = openid; usermodel.RoomID = Convert.ToInt32(msgcontent); usermodel.IsDel = 0; usermodel.IsWin = 0; userdal.AddChatUsers(usermodel); } } } } } #endregion } else { #region 订阅号获取上墙信息 string[] sArray = msgcontent.Split('#'); string username = string.Empty; string msginfo = string.Empty; try { username = sArray[0].ToString(); } catch (Exception) { } try { msginfo = sArray[1].ToString(); } catch (Exception) { } if (username.Trim() != null && username.Trim() != "") { if (userdal.ExistChatUser(username))//判断用户名是否已存在 { //已存在用户 if (msginfo.Trim() == null || msginfo.Trim() == "") { userdal.UpdateChatUserIsDel(username);//删除用户 } } else { usermodel.ID = Guid.NewGuid().ToString("N").ToUpper(); usermodel.OpenID = username; usermodel.RoomID = strRoomID; usermodel.IsDel = 0; usermodel.IsWin = 0; userdal.AddChatUsers(usermodel); } if (msginfo.Trim() != null && msginfo.Trim() != "") { msgmodel.ID = Guid.NewGuid().ToString("N").ToUpper(); msgmodel.UserID = username; msgmodel.RoomID = strRoomID; msgmodel.MsgType = "text"; msgmodel.MsgText = msginfo; msgmodel.MsgState = 0;//1表示通过 0表示不通过 msgmodel.IsDel = 0; msgdal.AddChatMessage(msgmodel); } } #endregion } } else { #region 务号取上墙信息 if (userdal.ExistChatUser(strRoomID, openid)) { //提示已经存在该用户 string userid = userdal.GetChatUserValueByOpenID("ID", openid, strRoomID).ToString(); msgmodel.ID = Guid.NewGuid().ToString("N").ToUpper(); msgmodel.UserID = userid; msgmodel.RoomID = strRoomID; msgmodel.MsgType = "text"; msgmodel.MsgText = msgcontent; msgmodel.MsgState = 0;//1表示通过 0表示不通过 msgmodel.IsDel = 0; msgdal.AddChatMessage(msgmodel); } #endregion } } else if (msgType.ToLower() == "image") { #region 务号取上墙信息 if (userdal.ExistChatUser(strRoomID, openid)) { //提示已经存在该用户 string userid = userdal.GetChatUserValueByOpenID("ID", openid, strRoomID).ToString(); msgmodel.ID = Guid.NewGuid().ToString("N").ToUpper(); msgmodel.UserID = userid; msgmodel.RoomID = strRoomID; msgmodel.MsgType = "image"; msgmodel.MsgText = msgcontent; msgmodel.MsgState = 0;//1表示通过 0表示不通过 msgmodel.IsDel = 0; msgdal.AddChatMessage(msgmodel); } #endregion } #endregion } }