public static ResponseMessageBase CreateFromRequestMessage(IRequestMessageBase requestMessage, ResponseMsgType msgType)
        {
            ResponseMessageBase responseMessage = null;
            switch (msgType)
            {
                case ResponseMsgType.Text:
                    responseMessage = new ResponseMessageText()
                                         {
                                             ToUserName = requestMessage.FromUserName,
                                             FromUserName = requestMessage.ToUserName,
                                             CreateTime = requestMessage.CreateTime,//这个时间不是Ticks,用DateTime.Now会出错
                                             MsgType = msgType
                                         };
                    break;
                case ResponseMsgType.News:
                    responseMessage = new ResponseMessageNews()
                                           {
                                               ToUserName = requestMessage.FromUserName,
                                               FromUserName = requestMessage.ToUserName,
                                               CreateTime = requestMessage.CreateTime,
                                               MsgType = msgType
                                           };
                    break; break;
                default:
                    throw new ArgumentOutOfRangeException("msgType");
            }

            return responseMessage;
        }
        public IResponseMessageBase GetResponseMessage(IRequestMessageBase requestMessage)
        {
            var request = requestMessage as RequestMessageImage;
            WeixinDbContext db = new WeixinDbContext();

            //WeixinUser user = new WeixinUser();
            //user.OpenId = Guid.NewGuid().ToString();
            //Random r = new Random();
            //user.NickName = "测试A" + r.Next();
            //user.AvatarUrl = request.PicUrl;
            //db.WeixinUsers.Add(user);

            WeixinUser user = db.WeixinUsers.Where(u => u.OpenId == requestMessage.FromUserName).FirstOrDefault<WeixinUser>();
            RequestMessage message = new RequestMessage()
            {
                MessageType = Convert.ToString(requestMessage.MsgType),
                FromUserId = user.UserId,
                RequestTime = requestMessage.CreateTime,
                Content = request.PicUrl
            };
            db.RequestMessages.Add(message);
            db.SaveChanges();

            return null;
        }
Beispiel #3
0
        public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
        {
            /* 所有没有被处理的消息会默认返回这里的结果,
             * 因此,如果想把整个微信请求委托出去(例如需要使用分布式或从其他服务器获取请求),
             * 只需要在这里统一发出委托请求,如:
             * var responseMessage = MessageAgent.RequestResponseMessage(agentUrl, agentToken, RequestDocument.ToString());
             * return responseMessage;
             */

            var responseMessage = this.CreateResponseMessage <ResponseMessageText>();

            responseMessage.Content = "这条消息来自DefaultResponseMessage。";
            return(responseMessage);
        }
Beispiel #4
0
 /// <summary>
 /// 获取响应类型实例,并初始化
 /// </summary>
 /// <typeparam name="T">需要返回的类型</typeparam>
 /// <param name="requestMessage">请求数据</param>
 /// <returns></returns>
 public static T CreateFromRequestMessage <T>(IRequestMessageBase requestMessage) where T : ResponseMessageBase
 {
     try
     {
         var             tType        = typeof(T);
         var             responseName = tType.Name.Replace("ResponseMessage", "");     //请求名称
         ResponseMsgType msgType      = (ResponseMsgType)Enum.Parse(typeof(ResponseMsgType), responseName);
         return(CreateFromRequestMessage(requestMessage, msgType) as T);
     }
     catch (Exception ex)
     {
         throw new WeixinException("ResponseMessageBase.CreateFromRequestMessage<T>过程发生异常!", ex);
     }
 }
 public static T CreateFromRequestMessage <T>(IRequestMessageBase requestMessage) where T : ResponseMessageBase
 {
     try
     {
         Type            typeFromHandle = typeof(T);
         string          value          = typeFromHandle.Name.Replace("ResponseMessage", "");
         ResponseMsgType msgType        = (ResponseMsgType)Enum.Parse(typeof(ResponseMsgType), value);
         return((T)(ResponseMessageBase.CreateFromRequestMessage(requestMessage, msgType) as T));
     }
     catch (Exception inner)
     {
         throw new WeixinException("ResponseMessageBase.CreateFromRequestMessage<T>过程发生异常!", inner);
     }
 }
Beispiel #6
0
 public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
 {
     try
     {
         ResponseMessageText responseMessage = base.CreateResponseMessage <ResponseMessageText>(); //ResponseMessageText也可以是News等其他类型
         responseMessage.Content = "这条消息来自DefaultResponseMessage。";
         return(responseMessage);
     }
     catch (System.Exception ex)
     {
         //ApiLoghelper.Info("DefaultResponseMessage", ex.Message);
         throw;
     }
 }
Beispiel #7
0
        public static ResponseMessageBase CreateFromRequestMessage(IRequestMessageBase requestMessage, ResponseMsgType msgType)
        {
            ResponseMessageBase responseMessage = null;

            try
            {
                switch (msgType)
                {
                case ResponseMsgType.Text:
                    responseMessage = new ResponseMessageText()
                    {
                        ToUserName   = requestMessage.FromUserName,
                        FromUserName = requestMessage.ToUserName,
                        CreateTime   = DateTime.Now,                       //使用当前最新时间
                        //MsgType = msgType
                    };
                    break;

                case ResponseMsgType.News:
                    responseMessage = new ResponseMessageNews()
                    {
                        ToUserName   = requestMessage.FromUserName,
                        FromUserName = requestMessage.ToUserName,
                        CreateTime   = DateTime.Now,                         //使用当前最新时间
                        //MsgType = msgType
                    };
                    break;

                case ResponseMsgType.Music:
                    responseMessage = new ResponseMessageMusic()
                    {
                        ToUserName   = requestMessage.FromUserName,
                        FromUserName = requestMessage.ToUserName,
                        CreateTime   = DateTime.Now,                        //使用当前最新事件
                        //MsgType = msgType
                    };
                    break;

                default:
                    throw new UnknownRequestMsgTypeException(string.Format("ResponseMsgType没有为 {0} 提供对应处理程序。", msgType), new ArgumentOutOfRangeException());
                }
            }
            catch (Exception ex)
            {
                throw new WeixinException("CreateFromRequestMessage过程发生异常", ex);
            }

            return(responseMessage);
        }
Beispiel #8
0
        public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
        {
            var ruleMng = new Pasys.Web.WeiXin.RequestRuleManager();
            var rules   = ruleMng.FindRules("default", RequestRuleMatchType.FullWord);

            if (rules == null || rules.Count == 0)
            {
                return(new ResponseMessageNoResponse());
            }
            if (rules[0].ResponseMessage != null)
            {
                return(rules[0].ResponseMessage.ToResponseMessage());
            }
            return(new ResponseMessageNoResponse());
        }
        public IResponseMessageBase RequestAgent(AppCtx ctx, IRequestMessageBase requestMessage)
        {
            /* 所有没有被处理的消息会默认返回这里的结果,
             * 因此,如果想把整个微信请求委托出去(例如需要使用分布式或从其他服务器获取请求),
             * 只需要在这里统一发出委托请求,如:
             * var responseMessage = MessageAgent.RequestResponseMessage(agentUrl, agentToken, RequestDocument.ToString());
             * return responseMessage;
             */


            var rsp = ctx.CreateResponseMessage <ResponseMessageText>();

            rsp.Content = "未识的指令";
            return(rsp);
        }
 private string DealTextMsg(IRequestMessageBase doc, string msg)
 {
     string result = string.Empty;
     string fromUserName = doc.FromUserName;
     string myWeixinId = doc.ToUserName;
     result = "";
     result += "<xml>";
     result += "<ToUserName><![CDATA[" + fromUserName + "]]></ToUserName>";
     result += "<FromUserName><![CDATA[" + myWeixinId + "]]></FromUserName>";
     result += "<CreateTime>" + GetWeixinDateTime(DateTime.Now) + "</CreateTime>";
     result += "<MsgType><![CDATA[text]]></MsgType>";
     result += "<Content><![CDATA[" + msg + "]]></Content>";
     result += "</xml>";
     return result;
 }
Beispiel #11
0
 public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
 {
     /* 所有没有被处理的消息会默认返回这里的结果,
      * 因此,如果想把整个微信请求委托出去(例如需要使用分布式或从其他服务器获取请求),
      * 只需要在这里统一发出委托请求,如:
      * var responseMessage = MessageAgent.RequestResponseMessage(agentUrl, agentToken, RequestDocument.ToString());
      * return responseMessage;
      */
     if (!String.IsNullOrEmpty(Variables.WxDefaultResponseMessage))
     {
         var strongResponseMessage = CreateResponseMessage <ResponseMessageText>();
         strongResponseMessage.Content = Variables.WxDefaultResponseMessage;
         return(strongResponseMessage);
     }
     return(null);
 }
Beispiel #12
0
        /// <summary>
        /// 自动判断默认异步方法调用(在没有override的情况下调用的默认方法)
        /// </summary>
        /// <param name="requestMessage">requestMessage</param>
        /// <param name="syncMethod">同名的同步方法(DefaultMessageHandlerAsyncEvent值为SelfSynicMethod时调用)</param>
        /// <returns></returns>
        private async Task <IResponseMessageBase> DefaultAsyncMethod(IRequestMessageBase requestMessage, Func <IResponseMessageBase> syncMethod)
        {
            switch (base.DefaultMessageHandlerAsyncEvent)
            {
            case DefaultMessageHandlerAsyncEvent.DefaultResponseMessageAsync:
                //返回默认信息
                return(await DefaultResponseMessageAsync(requestMessage).ConfigureAwait(false));

            case DefaultMessageHandlerAsyncEvent.SelfSynicMethod:
                //返回同步信息
                return(await Task.Run(syncMethod).ConfigureAwait(false));

            default:
                throw new MessageHandlerException($"DefaultMessageHandlerAsyncEvent 类型未作处理:{base.DefaultMessageHandlerAsyncEvent.ToString()}");
            }
        }
 /// <summary>
 /// 发送活动红包
 /// </summary>
 private ActionResult SendActivityToUser(object sceneObj, IRequestMessageBase requestBaseMsg)
 {
     var bonusModel = sceneObj as BonusModel;
     if (bonusModel.Type == BonusInfo.BonusType.Activity)
     {
         try
         {
             return SendActivityToUser(bonusModel, requestBaseMsg);
         }
         catch (Exception e)
         {
             Log.Info("活动红包出错:", e);
         }
     }
     return Content("");
 }
Beispiel #14
0
        private List <ApiResult> ExecuteApi(MessagePair messagePair, IRequestMessageBase requestMessage, ApiEnlighten apiEnlighten, string accessTokenOrApi, string openId)
        {
            if (messagePair == null || messagePair.ExtendResponses.Count == 0)
            {
                return(null);
            }
            ApiHandler       apiHandler = new ApiHandler(apiEnlighten);
            List <ApiResult> results    = new List <ApiResult>();

            foreach (var response in messagePair.ExtendResponses)
            {
                ApiResult apiResult = apiHandler.ExecuteApi(response, requestMessage, accessTokenOrApi, openId);
                results.Add(apiResult);
            }
            return(results);
        }
Beispiel #15
0
 public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
 {
     /* 所有没有被处理的消息会默认返回这里的结果,
      * 因此,如果想把整个微信请求委托出去(例如需要使用分布式或从其他服务器获取请求),
      * 只需要在这里统一发出委托请求,如:
      * var responseMessage = MessageAgent.RequestResponseMessage(agentUrl, agentToken, RequestDocument.ToString());
      * return responseMessage;
      */
     if (this.MessageInfo.KeyWords.Keys.Contains("默认"))
     {
         var responseMessage = this.CreateResponseMessage <ResponseMessageText>();
         responseMessage.Content = this.MessageInfo.KeyWords["默认"];
         return(responseMessage);
     }
     return(new SuccessResponseMessage());
 }
        //private static void TipsQuestionTask(int questionid, string openid)
        //{
        //    Task task = new Task(() =>
        //    {
        //        ILogger logger = EngineContext.Current.Resolve<ILogger>();
        //        logger.Information("TipsQuestionTask start");
        //        System.Threading.Thread.Sleep(500);
        //        IUserService uservice = EngineContext.Current.Resolve<IUserService>();
        //        IUserAnswerService uaService = EngineContext.Current.Resolve<IUserAnswerService>();
        //        IQuestionBankService qbService = EngineContext.Current.Resolve<IQuestionBankService>();
        //        IWorkContext workcontext = EngineContext.Current.Resolve<IWorkContext>();

        //        Question question = qbService.GetQuestionById(questionid);
        //        QuestionBank qbank = qbService.GetQuestionBankById(question.QuestionBank_Id);
        //        User user = uservice.GetUserById(openid);
        //        UserAnswer uanswer = uaService.GetDoingUserAnswer(user.Id);
        //        workcontext.CurrentUser = user;
        //        var nquesiont = uaService.SaveAnswer(uanswer, "", user);
        //        if (nquesiont.AnswerType == AnswerType.Tips)
        //        {
        //            TipsQuestionTask(nquesiont.Id, openid);
        //        }
        //        logger.Information("TipsQuestionTask end");
        //    });
        //    task.Start();
        //}

        /// <summary>
        /// 默认
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
        {
            var responseMessage = base.CreateResponseMessage <ResponseMessageText>();

            var user = this._userService.GetUserById(requestMessage.FromUserName);

            if (user == null || user.Subscribe == 0)
            {
                responseMessage.Content = "请先关注公众号!";
                return(responseMessage);
            }


            //responseMessage.Content = $"【{REQUESTNO}】您好,目前使用的微信公众号仍处于开发阶段,DefaultMessage。";
            return(responseMessage);
        }
Beispiel #17
0
        public static ResponseMessageBase CreateFromRequestMessage(IRequestMessageBase requestMessage, ResponseMsgType msgType)
        {
            ResponseMessageBase responseMessage = null;

            try
            {
                switch (msgType)
                {
                case ResponseMsgType.Text:
                    responseMessage = new ResponseMessageText();
                    break;

                case ResponseMsgType.News:
                    responseMessage = new ResponseMessageNews();
                    break;

                case ResponseMsgType.Image:
                    responseMessage = new ResponseMessageImage();
                    break;

                case ResponseMsgType.Voice:
                    responseMessage = new ResponseMessageVoice();
                    break;

                case ResponseMsgType.Video:
                    responseMessage = new ResponseMessageVideo();
                    break;

                case ResponseMsgType.MpNews:
                    responseMessage = new ResponseMessageMpNews();
                    break;

                default:
                    throw new UnknownRequestMsgTypeException(string.Format("ResponseMsgType没有为 {0} 提供对应处理程序。", msgType), new ArgumentOutOfRangeException());
                }

                responseMessage.ToUserName   = requestMessage.FromUserName;
                responseMessage.FromUserName = requestMessage.ToUserName;
                responseMessage.CreateTime   = DateTime.Now;               //使用当前最新时间
            }
            catch (Exception ex)
            {
                throw new WeixinException("CreateFromRequestMessage过程发生异常", ex);
            }

            return(responseMessage);
        }
Beispiel #18
0
        private IResponseMessageBase GetResponseMessage(IRequestMessageBase requestMessage, Response responseConfig, MessageEntityEnlighten enlighten)
        {
            IResponseMessageBase responseMessage = null;

            switch (responseConfig.Type)
            {
            case ResponseMsgType.Text:
                responseMessage = RenderResponseMessageText(requestMessage, responseConfig, enlighten);
                break;

            case ResponseMsgType.News:
                break;

            case ResponseMsgType.Music:
                break;

            case ResponseMsgType.Image:
                responseMessage = RenderResponseMessageImage(requestMessage, responseConfig, enlighten);
                break;

            case ResponseMsgType.Voice:
                break;

            case ResponseMsgType.Video:
                break;

            case ResponseMsgType.Transfer_Customer_Service:
                break;

            case ResponseMsgType.MultipleNews:
                break;

            case ResponseMsgType.LocationMessage:
                break;

            case ResponseMsgType.NoResponse:
                responseMessage = RenderResponseMessageNoResponse(requestMessage, responseConfig, enlighten);
                break;

            case ResponseMsgType.SuccessResponse:
                break;

            default:
                break;
            }
            return(responseMessage);
        }
Beispiel #19
0
        /// <summary>
        ///  发送指定格式消息,根据请求消息openID
        /// </summary>
        /// <param name="request"></param>
        /// <param name="msgType"></param>
        /// <returns></returns>
        public static IResponseMessageBase GetResponseEntityFromRequest(IRequestMessageBase request, ResponseMsgType msgType)
        {
            ResponseMessageBase responseMessage = null;

            try
            {
                switch (msgType)
                {
                case ResponseMsgType.Text:
                    responseMessage = new ResponseMessageText();
                    break;

                case ResponseMsgType.Image:
                    responseMessage = new ResponseMessageImage();
                    break;

                case ResponseMsgType.Voice:
                    responseMessage = new ResponseMessageVoice();
                    break;

                case ResponseMsgType.Video:
                    responseMessage = new ResponseMessageVideo();
                    break;

                case ResponseMsgType.Music:
                    responseMessage = new ResponseMessageMusic();
                    break;

                case ResponseMsgType.News:
                    responseMessage = new ResponseMessageNews();
                    break;

                default:
                    Log.Debug("CreateResponseEntity", "找不到相应的msgType");
                    break;
                }
                responseMessage.ToUserName   = request.FromUserName;
                responseMessage.FromUserName = request.ToUserName;
                responseMessage.CreateTime   = DateTime.Now;
            }
            catch (Exception e)
            {
            }

            return(responseMessage);
        }
Beispiel #20
0
        /// <summary>
        /// 获取响应类型实例,并初始化
        /// </summary>
        /// <typeparam name="T">需要返回的类型</typeparam>
        /// <param name="requestMessage">请求数据</param>
        /// <param name="enlighten">MessageEntityEnlighten,当 T 为接口时必须提供</param>
        /// <returns></returns>
        public static T CreateFromRequestMessage <T>(IRequestMessageBase requestMessage, MessageEntityEnlightener enlighten = null)
            where T : IResponseMessageBase
        {
            try
            {
                T responseMessage = default(T);

                var tType = typeof(T);

                if (tType.IsInterface)
                {
                    //是接口,需要使用 Enlightener
                    if (enlighten == null)
                    {
                        throw new MessageHandlerException("MessageEntityEnlighten 不能为 null");
                    }

                    var responseName = tType.Name.Replace("IResponseMessage", "").Replace("ResponseMessage", ""); //请求名称

                    ResponseMsgType msgType = (ResponseMsgType)Enum.Parse(typeof(ResponseMsgType), responseName);

                    responseMessage = (T)CreateFromRequestMessage(requestMessage, msgType, enlighten);
                }
                else
                {
                    //非接口,直接初始化
                    //Senparc.CO2NET.Helpers.ReflectionHelper.
                    responseMessage = (T)Activator.CreateInstance(tType);
                }

                if (responseMessage != null)
                {
                    responseMessage.ToUserName   = requestMessage.FromUserName;
                    responseMessage.FromUserName = requestMessage.ToUserName;
                    responseMessage.CreateTime   = SystemTime.Now; //使用当前最新时间
                }

                return(responseMessage);
            }
            catch (Exception ex)
            {
                SenparcTrace.SendCustomLog("CreateFromRequestMessage异常调试", typeof(T).FullName);

                throw new BaseException("ResponseMessageBase.CreateFromRequestMessage<T>过程发生异常!", ex);
            }
        }
        public static ResponseMessageBase CreateFromRequestMessage(IRequestMessageBase requestMessage, ResponseMsgType msgType)
        {
            ResponseMessageBase responseMessage = null;
            try
            {
                switch (msgType)
                {
                    case ResponseMsgType.Text:
                        responseMessage = new ResponseMessageText()
                                             {
                                                 ToUserName = requestMessage.FromUserName,
                                                 FromUserName = requestMessage.ToUserName,
                                                 CreateTime = DateTime.Now,//使用当前最新事件
                                                 MsgType = msgType
                                             };
                        break;
                    case ResponseMsgType.News:
                        responseMessage = new ResponseMessageNews()
                                               {
                                                   ToUserName = requestMessage.FromUserName,
                                                   FromUserName = requestMessage.ToUserName,
                                                   CreateTime = DateTime.Now,//使用当前最新事件
                                                   MsgType = msgType
                                               };
                        break; break;
                    case ResponseMsgType.Music:
                        responseMessage = new ResponseMessageMusic()
                                              {
                                                  ToUserName = requestMessage.FromUserName,
                                                  FromUserName = requestMessage.ToUserName,
                                                  CreateTime = DateTime.Now,//使用当前最新事件
                                                  MsgType = msgType
                                              };
                        break;
                    default:
                        throw new UnknownRequestMsgTypeException(string.Format("ResponseMsgType没有为 {0} 提供对应处理程序。", msgType), new ArgumentOutOfRangeException());
                }
            }
            catch (Exception ex)
            {
                throw new WeixinException("CreateFromRequestMessage过程发生异常", ex);
            }

            return responseMessage;
        }
        /// <summary>
        /// 执行API高级接口回复
        /// </summary>
        /// <param name="responses"></param>
        /// <param name="requestMessage"></param>
        /// <param name="apiEnlighten"></param>
        /// <param name="accessTokenOrApi"></param>
        /// <param name="openId"></param>
        /// <returns></returns>
        private List <ApiResult> ExecuteApi(List <Response> responses, IRequestMessageBase requestMessage, ApiEnlightener apiEnlighten, string accessTokenOrApi, string openId)
        {
            List <ApiResult> results = new List <ApiResult>();

            if (responses == null || responses.Count == 0)
            {
                return(results);
            }

            ApiHandler apiHandler = new ApiHandler(apiEnlighten);

            foreach (var response in responses)
            {
                ApiResult apiResult = apiHandler.ExecuteApi(response, MaterialData, requestMessage, accessTokenOrApi, openId);
                results.Add(apiResult);
            }
            return(results);
        }
Beispiel #23
0
        private void AssertGeneralParameters(IRequestMessageBase requestMessage, IActivity activity)
        {
            Assert.Equal(requestMessage.ToUserName, activity.Recipient.Id);
            Assert.Equal("Bot", activity.Recipient.Name);
            Assert.Equal(requestMessage.FromUserName, activity.From.Id);
            Assert.Equal("User", activity.From.Name);
            if (requestMessage is RequestMessage message)
            {
                Assert.Equal(message.MsgId.ToString(), activity.Id);
            }
            else
            {
                Assert.True(requestMessage is IRequestMessageEventBase);
            }

            Assert.Equal("wechat", activity.ChannelId);
            Assert.Equal(requestMessage.FromUserName, activity.Conversation.Id);
        }
        public async Task <IResponseMessageBase> InCustomer(int mpid, IRequestMessageBase request)
        {
            if (await IsAsking(mpid, request.FromUserName))
            {
                return(request.CreateResponseMessage <ResponseMessageNoResponse>());
            }
            var text = await _customerServiceResponseTextAppService.GetCustomerDefaultResponseString(mpid);

            await SendCustomerText(mpid, request.FromUserName, text);

            if (await _customerServiceResponseTextAppService.CheckIsWorkingTime(mpid))
            {
                return(request.CreateResponseMessage <ResponseMessageTransfer_Customer_Service>());
            }
            else
            {
                return(request.CreateResponseMessage <ResponseMessageNoResponse>());
            }
        }
Beispiel #25
0
        /// <summary>
        /// 创建单个图文消息
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <param name="title">标题</param>
        /// <param name="content">内容</param>
        /// <param name="picUrl">图片</param>
        /// <param name="url">地址</param>
        /// <returns></returns>
        public static IResponseMessageBase SingleNews(
            IRequestMessageBase requestMessage,
            string title, string content, string picUrl, string url)
        {
            var result = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageNews>(requestMessage);

            result.ArticleCount = 1;
            result.Articles     = new List <Article>
            {
                new Article
                {
                    Title       = title,
                    Description = content,
                    PicUrl      = picUrl,
                    Url         = url
                }
            };
            return(result);
        }
Beispiel #26
0
        public static ResponseMessageBase CreateFromRequestMessage(IRequestMessageBase requestMessage, WeixinResponseMsgType msgType)
        {
            ResponseMessageBase responseMessage = null;

            switch (msgType)
            {
            case WeixinResponseMsgType.Text:
                responseMessage = new ResponseMessageText()
                {
                    ToUserName   = requestMessage.FromUserName,
                    FromUserName = requestMessage.ToUserName,
                    CreateTime   = requestMessage.CreateTime,  //这个时间不是Ticks,用DateTime.Now会出错
                    MsgType      = msgType
                };
                break;

            case WeixinResponseMsgType.News:
                responseMessage = new ResponseMessageNews()
                {
                    ToUserName   = requestMessage.FromUserName,
                    FromUserName = requestMessage.ToUserName,
                    CreateTime   = requestMessage.CreateTime,
                    MsgType      = msgType
                };
                break;

            case WeixinResponseMsgType.Event:
                responseMessage = new ResponseMessageNews()
                {
                    ToUserName   = requestMessage.FromUserName,
                    FromUserName = requestMessage.ToUserName,
                    CreateTime   = requestMessage.CreateTime,
                    MsgType      = msgType
                };
                break;

            default:
                throw new ArgumentOutOfRangeException("msgType");
            }

            return(responseMessage);
        }
 /// <summary>
 /// 发送关注红包
 /// </summary>
 private ActionResult SendAttentionToUser(IRequestMessageBase requestBaseMsg)
 {
     string msg = "";
     try
     {
         IBonusService bonusService = _iBonusService;
         Log.Debug("关注红包openId:" + requestBaseMsg.FromUserName);
         msg = bonusService.Receive(requestBaseMsg.FromUserName);
         if (!string.IsNullOrEmpty(msg))
         {
             string result = DealTextMsg(requestBaseMsg, msg);
             return new XmlResult(result);
         }
     }
     catch (Exception e)
     {
         Log.Info("关注红包出错:", e);
     }
     return Content("");
 }
        public IResponseMessageBase GetResponseMessage(IRequestMessageBase requestMessage)
        {
            var request = requestMessage as RequestMessageLink;

            WeixinDbContext db = new WeixinDbContext();
            WeixinUser user = db.WeixinUsers.Where(u => u.OpenId == requestMessage.FromUserName).FirstOrDefault<WeixinUser>();

            RequestMessage message = new RequestMessage()
            {
                MessageType = Convert.ToString(requestMessage.MsgType),
                FromUserId = user.UserId,
                RequestTime = requestMessage.CreateTime,
                LinkTitle=request.Title,
                LinkUrl=request.Url
            };
            db.RequestMessages.Add(message);
            db.SaveChanges();

            return null;
        }
Beispiel #29
0
        public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
        {
            /* 所有没有被处理的消息会默认返回这里的结果,
             * 因此,如果想把整个微信请求委托出去(例如需要使用分布式或从其他服务器获取请求),
             * 只需要在这里统一发出委托请求,如:
             * var responseMessage = MessageAgent.RequestResponseMessage(agentUrl, agentToken, RequestDocument.ToString());
             * return responseMessage;
             */

            if (accountInfo.IsDefaultReply && !string.IsNullOrEmpty(accountInfo.DefaultReplyKeyword))
            {
                var keyword = accountInfo.DefaultReplyKeyword;
                return(GetResponseMessage(keyword));
            }

            return(null);

            //var responseMessage = this.CreateResponseMessage<ResponseMessageText>();
            //responseMessage.Content = "这条消息来自DefaultResponseMessage。";
            //return responseMessage;
        }
        /// <summary>
        /// 返回图片类型信息
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <param name="responseConfig"></param>
        /// <returns></returns>
        private IResponseMessageBase RenderResponseMessageImage(IRequestMessageBase requestMessage, Response responseConfig, MessageEntityEnlightener enlighten)
        {
            var strongResponseMessage = requestMessage.CreateResponseMessage <IResponseMessageImage>(enlighten);
            var mediaId = NeuralNodeHelper.GetImageMessageMediaId(requestMessage, responseConfig.GetMaterialContent(MaterialData));

            if (string.IsNullOrEmpty(mediaId))
            {
                var textResponseMessage = requestMessage.CreateResponseMessage <IResponseMessageText>(enlighten);
                textResponseMessage.Content = "消息中未获取到图片信息";
                return(textResponseMessage);
            }
            else
            {
                strongResponseMessage.Image.MediaId = mediaId;
            }


            //TODO:其他情况

            return(strongResponseMessage);
        }
        /// <summary>
        /// 返回图文类型信息
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <param name="responseConfig"></param>
        /// <returns></returns>
        private IResponseMessageNews RenderResponseMessageNews(IRequestMessageBase requestMessage, Response responseConfig, MessageEntityEnlightener enlighten)
        {
            var articles = NeuralNodeHelper.FillNewsMessage(responseConfig.MaterialId, MaterialData);
            var strongResponseMessage = requestMessage.CreateResponseMessage <IResponseMessageNews>(enlighten);

            if (articles != null)
            {
                strongResponseMessage.Articles = articles;
            }
            else
            {
                strongResponseMessage.Articles = new List <Article>()
                {
                    new Article()
                    {
                        Title       = "您要查找的素材不存在,或格式定义错误!",
                        Description = "您要查找的素材不存在,或格式定义错误!"
                    }
                };
            }
            return(strongResponseMessage);
        }
Beispiel #32
0
        /// <summary>
        /// 记录请求信息
        /// </summary>
        /// <param name="requestMessage">请求信息</param>
        public void InsertMessage(IRequestMessageBase requestMessage)
        {
            lock (WeixinContextGlobal.Lock)
            {
                var userName       = requestMessage.FromUserName;
                var messageContext = GetMessageContext(userName, true);
                if (messageContext.RequestMessages.Count > 0)
                {
                    //如果不是新建的对象,把当前对象移到队列尾部(新对象已经在底部)
                    var messageContextInQueue =
                        MessageQueue.FindIndex(z => z.UserName == userName);

                    if (messageContextInQueue >= 0)
                    {
                        MessageQueue.RemoveAt(messageContextInQueue); //移除当前对象
                        MessageQueue.Add(messageContext);             //插入到末尾
                    }
                }

                messageContext.LastActiveTime = DateTime.Now;       //记录请求时间
                messageContext.RequestMessages.Add(requestMessage); //录入消息
            }
        }
Beispiel #33
0
        /// <summary>
        /// 根据请求内容处理微信消息
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public ResponseMessageText MsgHandlerByRequestContent(IRequestMessageBase requestMessage)
        {
            ResponseMessageText responseMessage = null;

            switch (requestMessage.MsgType)
            {
            case RequestMsgType.Text:    //文字类型
                var requestMsgText = requestMessage as RequestMessageText;
                responseMessage = WechatTextMsgHandler(requestMsgText);
                break;

            //响应事件
            case RequestMsgType.Event:
                var request = requestMessage as RequestMessageEventBase;
                responseMessage = WechatEventMsgHandler(request);
                break;

            default:
                LogHelper.Logger.Error("该消息并非文字类型消息,请求内容为:" + requestMessage.ToJson());
                throw new Exception("暂不支持其他类型的消息处理");
            }
            return(responseMessage);
        }
Beispiel #34
0
        public static ResponseMessageBase CreateFromRequestMessage(IRequestMessageBase requestMessage, string msgType)
        {
            ResponseMessageBase responseMessage = null;

            switch (msgType)
            {
            case "text":
                responseMessage = CreateFromRequestMessage(requestMessage, WeixinResponseMsgType.Text);
                break;

            case "news":
                responseMessage = CreateFromRequestMessage(requestMessage, WeixinResponseMsgType.News);
                break;

            case "event":
                responseMessage = CreateFromRequestMessage(requestMessage, WeixinResponseMsgType.Event);
                break;

            default:
                throw new ArgumentOutOfRangeException("msgType");
            }

            return(responseMessage);
        }
        public IResponseMessageBase GetResponseMessage(IRequestMessageBase requestMessage)
        {
            IResponseMessageBase response = null;
            var request = requestMessage as RequestMessageText;
            WeixinDbContext db = new WeixinDbContext();
            WeixinUser user = db.WeixinUsers.Where(u => u.OpenId == requestMessage.FromUserName).FirstOrDefault<WeixinUser>();

            if (request.Content.Equals("帮我点赞"))
            {
                if (user == null)
                {
                    var responseText = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);

                    responseText.Content = "请先告诉我您的朋友圈昵称!";

                    return responseText;
                }
                else
                {
                    //每次点赞先清空之前的点赞记录
                    db.Entry(user).Collection(u => u.RequestMessages).Load();
                    user.RequestMessages.ToList().ForEach(entity => db.Entry(entity).State = System.Data.Entity.EntityState.Deleted);
                    db.RequestMessages.RemoveRange(user.RequestMessages);
                    db.SaveChanges();
                }

                var responseNews = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageNews>(requestMessage);
                responseNews.Articles.Add(new Article()
                {
                    Title = "好嘞,点赞君收到!",
                    Description = "请发送您要点赞的图文或分享链接!不知道怎么操作?点进来看看,有详细步骤!",
                    PicUrl = "http://www.shisheng.wang/images/qr.jpg",
                    Url = "http://www.shisheng.wang/moment/help"
                });

                return responseNews;
            }
            else if (request.Content.Contains("点") && request.Content.Contains("个赞"))
            {
                var responseNew = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageNews>(requestMessage);
                string numStr = string.Empty;
                if (request.Content.Contains("帮我点"))
                {
                    numStr = request.Content.Substring(3, request.Content.Length - 5);
                }
                else
                {
                    numStr = request.Content.Substring(1, request.Content.Length - 3);
                }
                int num = 36;
                Int32.TryParse(numStr, out num);
                responseNew.Articles.Add(new Article()
                {
                    Title = string.Format("报告掌柜的,你要的{0}个赞,已点赞完毕!!!", num),
                    Description = "最后一步啦,请打开网页截图即可!",
                    PicUrl = "http://www.shisheng.wang/images/qr.jpg",
                    Url = string.Format("http://www.shisheng.wang/moment/detail?username={0}&num={1}", requestMessage.FromUserName, num)
                });

                return responseNew;
            }
            else if(request.Content.Contains("修改昵称"))
            {
                var responseText = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);

                responseText.Content = "请告诉我您的新昵称!";

                return responseText;
            }
            else if (request.Content.Contains("修改头像"))
            {
                var responseText = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);

                responseText.Content = "请上传您的新头像!";

                return responseText;
            }
            else
            {
                RequestMessage message = new RequestMessage()
                {
                    MessageType = Convert.ToString(requestMessage.MsgType),
                    FromUserId = user.UserId,
                    RequestTime = requestMessage.CreateTime,
                    Content = request.Content
                };
                db.RequestMessages.Add(message);
                db.SaveChanges();
            }

            return response;
        }
 public CustomRequestCountHandler(Store store, IRequestMessageBase message, IResponseMessageBase response)
 {
     this._CurrrentStore = store;
     this._message = message;
     this._response = response;
 }
 public IResponseMessageBase GetResponseMessage(IRequestMessageBase requestMessage)
 {
     throw new NotImplementedException();
 }