/// <summary> /// 处理视频请求 /// </summary> /// <param name="requestMessage"></param> /// <returns></returns> public override IResponseMessageBase OnVideoRequest(RequestMessageVideo requestMessage) { try { var opid = requestMessage.FromUserName; var entitymsg = new MpEventRequestMsgLog(); entitymsg.ID = Formula.FormulaHelper.CreateGuid(); entitymsg.MpID = account.ID; entitymsg.OpenID = opid; entitymsg.MsgType = requestMessage.MsgType.ToString(); entitymsg.MsgId = requestMessage.MsgId.ToString(); entitymsg.MediaId = requestMessage.MediaId; entitymsg.CreateDate = System.DateTime.Now; entities.Set <MpEventRequestMsgLog>().Add(entitymsg); entities.SaveChanges(); } catch (Exception ex) { LogWriter.Info(string.Format("MPID{0}记录视频回复信息出错:原因{1}", account.ID, ex.Message)); } return(DefaultResponseMessage(requestMessage)); }
/// <summary> /// 处理文字请求 /// </summary> /// <returns></returns> public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage) { var defaultMessage = DefaultResponseMessage(requestMessage); if (string.IsNullOrEmpty(requestMessage.Content)) { return(defaultMessage); } #region 记录日志 try { var opid = requestMessage.FromUserName; var entitymsg = new MpEventRequestMsgLog(); entitymsg.ID = Formula.FormulaHelper.CreateGuid(); entitymsg.MpID = account.ID; entitymsg.OpenID = opid; entitymsg.MsgType = requestMessage.MsgType.ToString(); entitymsg.MsgId = requestMessage.MsgId.ToString(); entitymsg.Content = requestMessage.Content; entitymsg.CreateDate = System.DateTime.Now; entities.Set <MpEventRequestMsgLog>().Add(entitymsg); entities.SaveChanges(); } catch (Exception ex) { LogWriter.Info(string.Format("MPID{0}记录文本回复信息出错:原因{1}", account.ID, ex.Message)); } #endregion var rs = CacheHelper.Get(string.Format("TextRequest_{0}_{1}", account.AppID, requestMessage.Content)); var rstype = CacheHelper.Get(string.Format("TextRequest_{0}_{1}_Type", account.AppID, requestMessage.Content)); if (rs == null || rstype == null) { //关键字回复 var entity = entities.Set <MpKeyWordReply>().Where(c => c.MpID == account.ID && c.IsDelete == 0 && c.KeyWord == requestMessage.Content).FirstOrDefault(); if (entity != null) { CacheHelper.Set(string.Format("TextRequest_{0}_{1}_Type", account.AppID, requestMessage.Content), entity.ReplyType, cachesecond); if (entity.ReplyType == MpMessageType.none.ToString()) { return(defaultMessage); } else if (entity.ReplyType == MpMessageType.image.ToString()) { var responseMessage = base.CreateResponseMessage <ResponseMessageImage>(); responseMessage.Image.MediaId = entity.ImageMediaID; CacheHelper.Set(string.Format("TextRequest_{0}_{1}", account.AppID, requestMessage.Content), responseMessage, cachesecond); return(responseMessage); } else if (entity.ReplyType == MpMessageType.text.ToString()) { var responseMessage = base.CreateResponseMessage <ResponseMessageText>(); responseMessage.Content = entity.Content; CacheHelper.Set(string.Format("TextRequest_{0}_{1}", account.AppID, requestMessage.Content), responseMessage, cachesecond); return(responseMessage); } else if (entity.ReplyType == MpMessageType.voice.ToString()) { var responseMessage = base.CreateResponseMessage <ResponseMessageVoice>(); responseMessage.Voice.MediaId = entity.VoiceMediaID; CacheHelper.Set(string.Format("TextRequest_{0}_{1}", account.AppID, requestMessage.Content), responseMessage, cachesecond); return(responseMessage); } else if (entity.ReplyType == MpMessageType.video.ToString()) { var responseMessage = base.CreateResponseMessage <ResponseMessageVideo>(); var video = entities.Set <MpMediaVideo>().Where(c => c.MpID == account.ID && c.IsDelete == 0 && c.ID == entity.VideoID).FirstOrDefault(); if (video == null) { return(defaultMessage); } responseMessage.Video.MediaId = video.MediaID; responseMessage.Video.Title = video.Title; responseMessage.Video.Description = video.Description; CacheHelper.Set(string.Format("TextRequest_{0}_{1}", account.AppID, requestMessage.Content), responseMessage, cachesecond); return(responseMessage); } else if (entity.ReplyType == MpMessageType.mpnews.ToString()) { var responseMessage = base.CreateResponseMessage <ResponseMessageNews>(); var article = entities.Set <MpSelfArticle>().Where(c => c.MpID == account.ID && c.IsDelete == 0 && c.ID == entity.ArticleID).FirstOrDefault(); if (article == null) { return(defaultMessage); } responseMessage.Articles.Add(new Article() { Title = article.Title, Description = article.Description, Url = article.Url, PicUrl = string.Format("http://{0}/wechatservice/api/Image/Get/{1}", domain, article.PicFileID), }); CacheHelper.Set(string.Format("TextRequest_{0}_{1}", account.AppID, requestMessage.Content), responseMessage, cachesecond); return(responseMessage); } else if (entity.ReplyType == MpMessageType.mpmultinews.ToString()) { var responseMessage = base.CreateResponseMessage <ResponseMessageNews>(); var article = entities.Set <MpSelfArticleGroup>().Where(c => c.MpID == account.ID && c.IsDelete == 0 && c.ID == entity.ArticleGroupID).FirstOrDefault(); if (article == null || article.MpSelfArticleGroupItem == null || article.MpSelfArticleGroupItem.Count(c => c.MpSelfArticle != null) < 2) { return(defaultMessage); } foreach (var item in article.MpSelfArticleGroupItem.Where(c => c.MpSelfArticle != null)) { responseMessage.Articles.Add(new Article() { Title = item.MpSelfArticle.Title, Description = item.MpSelfArticle.Description, Url = item.MpSelfArticle.Url, PicUrl = string.Format("http://{0}/wechatservice/api/Image/Get/{1}", domain, item.MpSelfArticle.PicFileID), }); } CacheHelper.Set(string.Format("TextRequest_{0}_{1}", account.AppID, requestMessage.Content), responseMessage, cachesecond); return(responseMessage); } else { return(defaultMessage); } } //其他回复 else { return(defaultMessage); } } else { var rstp = rstype.ToString(); if (rstp == MpMessageType.image.ToString()) { return(rs as ResponseMessageImage); } else if (rstp == MpMessageType.mpmultinews.ToString()) { return(rs as ResponseMessageNews); } else if (rstp == MpMessageType.mpnews.ToString()) { return(rs as ResponseMessageNews); } else if (rstp == MpMessageType.text.ToString()) { return(rs as ResponseMessageText); } else if (rstp == MpMessageType.video.ToString()) { return(rs as ResponseMessageVideo); } else if (rstp == MpMessageType.voice.ToString()) { return(rs as ResponseMessageVoice); } return(rs as IResponseMessageBase); } }