Example #1
0
 public static void InsertUserSubcribeLog(UserSubscribeLog userlog)
 {
     using (WeChatDbContext entity = new WeChatDbContext())
     {
         entity.UserSubscribeLogs.Add(userlog);
         entity.SaveChanges();
     }
 }
Example #2
0
        public void Weixin()
        {
            string weChat = ConfigurationManager.AppSettings["WeChatId"].ToString();
            string templateId = ConfigurationManager.AppSettings["TemplateId"].ToString();
            WeChatUser user = new WeChatUser();
            UserSubscribeLog userlog = new UserSubscribeLog();
            string accessToken = WeChatHelper.GetAccessToken();
            StreamReader stream = new StreamReader(Request.InputStream);
            XElement xml = XElement.Load(stream);
            // 发送方帐号(open_id)    
            string fromUserName = GetXmlNodeValue(xml, "FromUserName");
            // 公众帐号    
            string toUserName = GetXmlNodeValue(xml, "ToUserName");
            // 消息类型    
            string msgType = GetXmlNodeValue(xml, "MsgType");
            string eventKey = String.Empty;
            string MsgId = String.Empty;
            if (GetXmlNodeValue(xml, "EventKey") != "")
            {
                eventKey = GetXmlNodeValue(xml, "EventKey");
            }
            if (GetXmlNodeValue(xml, "MsgId") != "")
            {
                MsgId = GetXmlNodeValue(xml, "MsgId");
            }
            user.OpenId = fromUserName;
            userlog.OpenId = fromUserName;
            XDocument xdoc = new XDocument();
            try
            {
                #region Event
                if (msgType == "event")
                {
                    string eventType = GetXmlNodeValue(xml, "Event");
                    if (eventType == "subscribe")
                    {
                        user.OpenId = fromUserName;
                        user.Subscribe = 1;
                        user.SubscribeTime = DateTime.Now;
                        user.LastUpdateStateTime = DateTime.Now;
                        user = WeChatHelper.GetSubscirbeUserInfo(accessToken, fromUserName);
                        userlog.LastUpdateTime = DateTime.Now;
                        userlog.Subcribe = 1;
                        try
                        {
                            if ((eventKey != null) && (eventKey != ""))
                            {
                                if (eventKey.StartsWith("qrscene_"))
                                {
                                    user.LastSubscribeChannel = Int32.Parse(eventKey.Split('_')[1].ToString());
                                    userlog.Channel = user.LastSubscribeChannel;
                                }
                            }
                        }
                        catch
                        { }
                        DbServices.InsertUserSubcribeLog(userlog);
                        DbServices.InsertNewSubscribeUser(user);
                        List<Message> msglist = DbServices.GetMessage("subscribe");
                        YACHelper.SetYACUserOpenId(user.OpenId, user.LastSubscribeChannel);
                        string returnXml = WeChatHelper.ResponseMessage(msglist, user.OpenId);
                        Response.Write(returnXml);
                    }
                    if (eventType == "unsubscribe")
                    {
                        user.OpenId = fromUserName;
                        user.Subscribe = 0;
                        user.LastUpdateStateTime = DateTime.Now;
                        //WeChatHelper.GetSubscirbeUserInfo(accessToken, fromUserName);
                        userlog.Subcribe = 0;
                        userlog.Channel = 0;
                        userlog.LastUpdateTime = DateTime.Now;
                        DbServices.InsertUserSubcribeLog(userlog);
                        DbServices.UpdateUser(user);
                        YACHelper.SetYACCancelUserOpenId(user.OpenId, user.LastSubscribeChannel);
                    }
                    if (eventType == "LOCATION")
                    {
                    }
                    if (eventType == "CLICK")
                    {
                        if (eventKey != "")
                        {
                            List<Message> msglist = DbServices.GetMessage(eventKey);
                            if ((msglist != null) && (msglist.Count > 0))
                            {
                                string returnXml = WeChatHelper.ResponseMessage(msglist, user.OpenId);
                                Response.Write(returnXml);
                            }
                        }
                    }
                    if (eventType == "VIEW")
                    { }
                }
                #endregion
                #region Text
                if (msgType == "text")
                {
                    //Response.Write("");
                    string content = GetXmlNodeValue(xml, "Content");
                    UserMessage um = new UserMessage();
                    um.Content = content;
                    um.OpenId = user.OpenId;
                    um.MsgId = MsgId;
                    um.MessageType = "text";
                    //string withoutTrim = content.Trim();
                    #region 正常消息反馈机制

                    int start = Int32.Parse(ConfigurationManager.AppSettings["WorkStart"].ToString());
                    int end = Int32.Parse(ConfigurationManager.AppSettings["WorkEnd"].ToString());

                    if ((DateTime.Now.Hour > end) || (DateTime.Now.Hour < start))//晚上9点以后,早上8点以前,自动回复
                    {
                        um.ResponseType = "AutoMsg";
                        DbServices.InsertUserMessage(um);
                        StringBuilder message = new StringBuilder();
                        string words = ConfigurationManager.AppSettings["NightWords"].ToString();
                        message.Append(words);
                        string returnMsg = WeChatHelper.ResponseMessage(message.ToString(), user.OpenId, weChat);
                        Response.Write(returnMsg);
                    }
                    else
                    {
                        if (content == "养爱车求")//特殊关键字
                        {
                            um.ResponseType = "AutoMsg";
                            DbServices.InsertUserMessage(um);
                            StringBuilder message = new StringBuilder();
                            message.Append("后台地址:http://120.132.59.94/bk/");
                            message.Append("公司电话:400 0102 766");
                            message.Append("请牢记!");
                            string returnMsg = WeChatHelper.ResponseMessage(message.ToString(), user.OpenId, weChat);
                            Response.Write(returnMsg);
                        }
                        else
                        {
                            KeyWord kw = DbServices.FindMyKeyword(content);
                            if (kw != null)//关键字匹配
                            {
                                if (!String.IsNullOrEmpty(kw.MsgKeyValue))//检查消息的keyvalue是否为空,如果不为空,则返回匹配value的消息列表
                                {
                                    um.ResponseType = "AutoKey";
                                    um.ResponseKeValue = kw.MsgKeyValue;
                                    DbServices.InsertUserMessage(um);
                                    List<Message> msglist = DbServices.GetMessage(kw.MsgKeyValue);
                                    if ((msglist != null) && (msglist.Count > 0))
                                    {
                                        string returnXml = WeChatHelper.ResponseMessage(msglist, user.OpenId);
                                        Response.Write(returnXml);
                                    }
                                }
                                else//读取关键字内容
                                {
                                    um.ResponseType = "AutoMsg";
                                    um.ResponseId = kw.KeyWordId;
                                    DbServices.InsertUserMessage(um);
                                    var staff = DbServices.GetStaff(user.OpenId);
                                    string returnMsg = WeChatHelper.ResponseMessage(kw.Content, user.OpenId, weChat);
                                    Response.Write(returnMsg);
                                }
                            }
                            else//非关键字匹配
                            {
                                if (!DbServices.IsExistMessage(um))
                                {
                                    DbServices.InsertUserMessage(um);
                                    string returnContent = "骚扰大家了,客户向后台发送了文字消息,消息如下:" + content;
                                    bool isSendTemplateMsg = Convert.ToBoolean(ConfigurationManager.AppSettings["TemplateMsgOpen"].ToString());
                                    if (isSendTemplateMsg)
                                    {
                                        List<Staff> staffList = DbServices.GetStaffList();
                                        var wechatUser = DbServices.GetUserInfo(user.OpenId);
                                        string nickname = "养爱车粉丝";
                                        if (wechatUser != null)
                                        {
                                            nickname = wechatUser.NickName;
                                        }
                                        foreach (var staff in staffList)
                                        {
                                            if (staff.IsEnabled)
                                            {
                                                if (!String.IsNullOrEmpty(staff.OpenId))
                                                {
                                                    string returnMsg = WeChatHelper.ResponseTemplateMessage(content, staff.OpenId, templateId, nickname);
                                                    if (!staff.IsSend)//标记是否已经给这个人发送过模板消息了
                                                    {
                                                        staff.IsSend = true;
                                                        WeChatHelper.PostTemplateMessage(returnMsg, accessToken);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    string responseStr = WeChatHelper.ResponseDKFMessage(user.OpenId, weChat);
                                    Response.Write(responseStr);
                                }
                            }
                        }
                    }
                    #endregion
                }
                #endregion
                #region Image
                if (msgType == "image")
                {
                    UserMessage um = new UserMessage();
                    string MediaId = GetXmlNodeValue(xml, "MediaId");
                    string PicUrl = GetXmlNodeValue(xml, "PicUrl");

                    um.PicUrl = PicUrl;
                    um.OpenId = user.OpenId;
                    um.MessageType = "image";
                    um.MsgId = MsgId;
                    um.MediaId = MediaId;
                    DbServices.InsertUserMessage(um);

                    bool isNullKeyValue = Boolean.Parse(ConfigurationManager.AppSettings["NullKeyValue"].ToString());
                    if (isNullKeyValue)
                    {
                        Response.Write("");
                    }
                    else
                    {
                        UserSubscribeLog userSubscribeLog = DbServices.GetUserSubcribeLogInfo(user.OpenId);
                        if (userSubscribeLog != null)
                        {
                            string message = "欢迎关注养爱车:),您可以从加油站工作人员那里领取养爱车提供的小礼品(每人限领1份)。";
                            string returnMsg = WeChatHelper.ResponseMessage(message, user.OpenId, weChat);
                            Response.Write(returnMsg);
                        }
                    }
                    if (DateTime.Now.Hour > 22)
                    { }
                }
                #endregion
                #region Vioce
                if (msgType == "voice")
                {
                    string MediaId = GetXmlNodeValue(xml, "MediaId");
                    string Format = GetXmlNodeValue(xml, "Format");
                    UserMessage um = new UserMessage();
                    um.OpenId = um.OpenId;
                    um.MediaId = MediaId;
                    um.MsgId = MsgId;
                    um.MessageType = "voice";
                    DbServices.InsertUserMessage(um);
                }
                #endregion
                #region Link
                if (msgType == "link")
                {
                    string Title = GetXmlNodeValue(xml, "Title");
                    string Description = GetXmlNodeValue(xml, "Description");
                    string Url = GetXmlNodeValue(xml, "Url");
                    UserMessage um = new UserMessage();
                    um.OpenId = um.OpenId;
                    um.Url = Url;
                    um.Title = Title;
                    um.Description = Description;
                    um.MsgId = MsgId;
                    um.MessageType = "link";
                    DbServices.InsertUserMessage(um);
                }
                #endregion
            }
            catch
            {
                Response.Write("");
            }
            //return "";
        }