Example #1
0
        /// <summary>
        /// 推送纯文字
        /// </summary>
        public IResponseMessageBase GetResponseMessageTxtByContent(RequestMessageEventBase requestMessage, string content, int accountId)
        {
            var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage);
            var locationService = new LocationService();

            responseMessage.Content = content;
            string EventName = "";

            if (requestMessage.Event.ToString().Trim() != "")
            {
                EventName = requestMessage.Event.ToString();
            }
            //else if (requestMessage.EventKey != null)
            //{
            //    EventName += requestMessage.EventKey.ToString();
            //}
            //new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "text", "事件:推送纯粹的文字,内容为:" + content, requestMessage.ToUserName);
            WeixinResponseContent entity = new WeixinResponseContent()
            {
                OpenId         = requestMessage.FromUserName,
                RequestType    = requestMessage.MsgType.ToString(),
                RequestContent = EventName,
                ResponseType   = "text",
                ReponseContent = "事件:推送纯粹的文字,内容为:" + content,
                XmlContent     = requestMessage.ToUserName
            };

            entity.Insert();
            return(responseMessage);
        }
        /// <summary>
        /// Event事件类型请求
        /// </summary>
        public virtual IResponseMessageBase OnEventRequest(RequestMessageEventBase requestMessage)
        {
            var strongRequestMessage             = RequestMessage as IRequestMessageEventBase;
            IResponseMessageBase responseMessage = null;

            switch (strongRequestMessage.Event)
            {
            case Event.ENTER:
                responseMessage = OnEvent_EnterRequest(RequestMessage as RequestMessageEvent_Enter);
                break;

            case Event.LOCATION:
                responseMessage = OnEvent_LocationRequest(RequestMessage as RequestMessageEvent_Location);    //目前实际无效
                break;

            case Event.subscribe:    //订阅
                responseMessage = OnEvent_SubscribeRequest(RequestMessage as RequestMessageEvent_Subscribe);
                break;

            case Event.unsubscribe:    //退订
                responseMessage = OnEvent_UnsubscribeRequest(RequestMessage as RequestMessageEvent_Unsubscribe);
                break;

            case Event.CLICK:
                responseMessage = OnEvent_ClickRequest(RequestMessage as RequestMessageEvent_Click);
                break;

            default:
                throw new UnknownRequestMsgTypeException("未知的Event下属请求信息", null);
            }
            return(responseMessage);
        }
Example #3
0
 public async Task <ActionResult> WXMSG(string signature, string timestamp, string nonce, string echostr)
 {
     if (!CheckSignature.Check(signature, timestamp, nonce, Commons.WXToken))
     {
         return(Content("参数错误!"));
     }
     try
     {
         XDocument requestDoc = null;
         requestDoc = XDocument.Load(Request.Body);
         var requestMessage = RequestMessageFactory.GetRequestEntity(requestDoc);
         // 关注 取消 事件
         if (requestMessage.MsgType == RequestMsgType.Event)
         {
             RequestMessageEventBase msg = (RequestMessageEventBase)requestMessage;
             if (msg.Event == Event.subscribe)
             {
                 await FocusOn(requestDoc);  //关注
             }
             if (msg.Event == Event.unsubscribe)
             {
                 await UnFocusOn(requestDoc); //取消关注
             }
         }
         else
         {
             await AcceptWechar(requestDoc);// 发送的消息
         }
         return(Content("success"));
     }
     catch (Exception ex)
     {
         return(Content(ex.ToString()));
     }
 }
        /// <summary>
        /// 处理语音请求
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public IResponseMessageBase GetResponseMessageeMusic(RequestMessageEventBase requestMessage, int Indexid, int wid)
        {
            var    responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageMusic>(requestMessage);
            string EventName       = "";

            if (requestMessage.Event.ToString().Trim() != "")
            {
                EventName = requestMessage.Event.ToString();
            }
            else if (requestMessage.EventKey != null)
            {
                EventName += requestMessage.EventKey.ToString();
            }


            Model.wx_requestRuleContent model = getDataMusicComm(wid, Indexid);
            if (model == null)
            {
                wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "-1", requestMessage.ToUserName);
            }
            else
            {
                responseMessage.Music.MusicUrl    = model.mediaUrl;
                responseMessage.Music.Title       = model.rContent;
                responseMessage.Music.Description = model.rContent2;
                wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "音乐链接:" + model.mediaUrl + "|标题:" + model.rContent + "|描述:" + model.rContent2, requestMessage.ToUserName);
            }
            return(responseMessage);
        }
Example #5
0
        /// <summary>
        /// 微信MessageHandler事件处理,此代码的简化MessageHandler方法已由/CustomerMessageHandler/CustomerMessageHandler_Event.cs完成,
        /// 此方法不再更新
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public ResponseMessageBase GetResponseMessage(RequestMessageEventBase requestMessage)
        {
            ResponseMessageBase responseMessage = null;

            switch (requestMessage.Event)
            {
            case Event.ENTER:
            {
                var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>();
                strongResponseMessage.Content = "您刚才发送了ENTER事件请求。";
                responseMessage = strongResponseMessage;
                break;
            }

            case Event.LOCATION:
                throw new Exception("暂不可用");

            //break;
            case Event.subscribe:    //订阅
            {
                var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>();

                //获取Senparc.Weixin.MP.dll版本信息
#if NET45
                var dllPath = HttpContext.Current.Server.MapPath("~/bin/Senparc.Weixin.MP.dll");
#else
                //var dllPath = ServerUtility.ContentRootMapPath("~/bin/Release/netcoreapp2.2/Senparc.Weixin.MP.dll");//本地测试路径
                var dllPath = ServerUtility.ContentRootMapPath("~/Senparc.Weixin.MP.dll");        //发布路径
#endif

                var fileVersionInfo = FileVersionInfo.GetVersionInfo(dllPath);

                var version = fileVersionInfo.FileVersion;
                strongResponseMessage.Content = string.Format(
                    "欢迎关注【Senparc.Weixin.MP 微信公众平台SDK】,当前运行版本:v{0}。\r\n您还可以发送【位置】【图片】【语音】信息,查看不同格式的回复。\r\nSDK官方地址:https://sdk.weixin.senparc.com",
                    version);
                responseMessage = strongResponseMessage;
                break;
            }

            case Event.unsubscribe:    //退订
            {
                //实际上用户无法收到非订阅账号的消息,所以这里可以随便写。
                //unsubscribe事件的意义在于及时删除网站应用中已经记录的OpenID绑定,消除冗余数据。
                var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>();
                strongResponseMessage.Content = "有空再来";
                responseMessage = strongResponseMessage;
                break;
            }

            case Event.CLICK:    //菜单点击事件,根据自己需要修改
                //这里的CLICK在此DEMO中不会被执行到,因为已经重写了OnEvent_ClickRequest
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(responseMessage);
        }
Example #6
0
        /// <summary>
        /// 处理语音请求
        /// </summary>
        public IResponseMessageBase GetResponseMessageeMusic(RequestMessageEventBase requestMessage, int ruleId, int accountId)
        {
            var    responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageMusic>(requestMessage);
            string EventName       = "";

            if (requestMessage.Event.ToString().Trim() != "")
            {
                EventName = requestMessage.Event.ToString();
            }

            Model.weixin_request_content model = new BLL.weixin_request_content().GetModel(ruleId);
            if (model == null)
            {
                new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "-1", requestMessage.ToUserName);
            }
            else
            {
                if (model.media_url.Contains("http://"))
                {
                    responseMessage.Music.MusicUrl = model.media_url;
                }
                else
                {
                    //因为安装目录是以/开头,所以去掉,以免出现双斜杆
                    responseMessage.Music.MusicUrl = siteConfig.weburl + "/" + siteConfig.webpath.Replace("/", "") + model.media_url;
                }
                responseMessage.Music.Title       = model.title;
                responseMessage.Music.Description = model.content;
                new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "音乐链接:" + model.media_url + "|标题:" + model.title + "|描述:" + model.content, requestMessage.ToUserName);
            }
            return(responseMessage);
        }
Example #7
0
        /// <summary>
        /// 推送语音请求
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <param name="indexid"></param>
        /// <param name="wid"></param>
        /// <param name="enevtName"></param>
        /// <returns></returns>
        public IResponseMessageBase GetResponseMessageVoice(RequestMessageEventBase requestMessage, int indexid, int wid, string enevtName)
        {
            var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageVoice>(requestMessage);

            //Model.wx_requestRuleContent model = getDataMusicComm(wid, indexid);
            //if (model == null)
            //{

            //    DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), enevtName, "voice", "-1", requestMessage.ToUserName);
            //}
            //else
            //{
            //    //if (model.mediaUrl.StartsWith("http"))
            //    //{

            //    //    responseMessage.Music.MusicUrl = model.mediaUrl;
            //    //}
            //    //else
            //    //{
            //    //    responseMessage.Music.MusicUrl = MyCommFun.getWebSite() + model.mediaUrl;
            //    //}
            //    //responseMessage.Music.Title = model.rContent;
            //    //responseMessage.Music.Description = model.rContent2;
            //    //DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), enevtName, "voice", "音乐链接:" + model.mediaUrl + "|标题:" + model.rContent + "|描述:" + model.rContent2, requestMessage.ToUserName);

            //    responseMessage.Voice = new Voice() { MediaId = model.extStr };

            //    DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), enevtName, "voice", "音乐链接:" + model.mediaUrl + "|标题:" + model.rContent + "|描述:" + model.rContent2, requestMessage.ToUserName);
            //}
            return(responseMessage);
        }
        /// <summary>
        /// 推送多图文
        /// update note 1:
        ///    李朴 2013-8-20 添加会员卡的cardno参数
        ///    注意:如果该会员注册过,则字符串没有cardno参数;
        ///    只有在会员注册过,在数据库里查询到该会员的cadno,则在url里添加节点cardno。
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <param name="Indexid"></param>
        /// <param name="wid">微帐号主键Id</param>
        /// <returns></returns>
        public IResponseMessageBase GetResponseMessageNews(RequestMessageEventBase requestMessage, int Indexid, int wid)
        {
            var            responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageNews>(requestMessage);
            string         openid          = requestMessage.FromUserName;
            string         token           = ConvertDateTimeInt(DateTime.Now).ToString();
            List <Article> picTxtList      = getDataPicTxtComm(wid, Indexid, openid, token);
            string         EventName       = "";

            if (requestMessage.Event.ToString().Trim() != "")
            {
                EventName = requestMessage.Event.ToString();
            }
            else if (requestMessage.EventKey != null)
            {
                EventName += requestMessage.EventKey.ToString();
            }

            if (picTxtList == null || picTxtList.Count <= 0)
            {
                wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "txtpic", "-1", requestMessage.ToUserName);
            }
            else
            {
                wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "txtpic", "这次发了" + picTxtList.Count + "条图文", requestMessage.ToUserName);
            }

            responseMessage.Articles.AddRange(picTxtList);
            return(responseMessage);
        }
        /// <summary>
        /// 模块功能回复【请求为‘事件’类型】
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <param name="modelFunctionName"></param>
        /// <param name="modelFunctionId"></param>
        /// <param name="apiid"></param>
        /// <returns></returns>
        public IResponseMessageBase GetModuleResponse(RequestMessageEventBase requestMessage, string modelFunctionName, int modelFunctionId, int apiid)
        {
            string openid = requestMessage.FromUserName;
            string token  = ConvertDateTimeInt(DateTime.Now).ToString();

            IList <Model.ResponseContentEntity> responselist = new List <Model.ResponseContentEntity>();

            responselist = PanDuanMoudle(modelFunctionName, modelFunctionId, openid, apiid);
            if (responselist == null || responselist.Count <= 0)
            {
                var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage);
                responseMessage.Content = "【" + modelFunctionName + "】功能模块未获得到数据";
                return(responseMessage);
            }

            Model.ReponseContentType responseType = responselist[0].rcType;

            if (responseType == Model.ReponseContentType.text)
            {
                var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage);

                responseMessage.Content = responselist[0].rContent.ToString();
                return(responseMessage);
            }
            else if (responseType == Model.ReponseContentType.txtpic)
            {
                var             responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageNews>(requestMessage);
                IList <Article> rArticlelist    = new List <Article>();
                Article         article         = new Article();
                foreach (Model.ResponseContentEntity response in responselist)
                {
                    article             = new Article();
                    article.Title       = response.rContent;
                    article.Description = response.rContent2;
                    article.Url         = getWXApiUrl(response.detailUrl, token, openid) + getWxUrl_suffix();
                    if (response.picUrl == null || response.picUrl.ToString().Trim() == "")
                    {
                        article.PicUrl = "";
                    }
                    else
                    {
                        if (!response.picUrl.Contains("http://"))
                        {
                            article.PicUrl = MyCommFun.getWebSite() + response.picUrl;
                        }
                        else
                        {
                            article.PicUrl = response.picUrl;
                        }
                    }
                    rArticlelist.Add(article);
                }
                responseMessage.Articles.AddRange(rArticlelist);
                return(responseMessage);
            }
            else
            {
                return(null);
            }
        }
Example #10
0
        /// <summary>
        /// 处理事件请求(这个方法一般不用重写,这里仅作为示例出现。除非需要在判断具体Event类型以外对Event信息进行统一操作
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public override IResponseMessageBase OnEventRequest(RequestMessageEventBase requestMessage)
        {
            var eventResponseMessage = base.OnEventRequest(requestMessage);//对于Event下属分类的重写方法,见:CustomerMessageHandler_Events.cs

            //TODO: 对Event信息进行统一操作
            return(eventResponseMessage);
        }
Example #11
0
        /// <summary>
        /// 推送多图文
        /// update note 1:
        ///    李朴 2013-8-20 添加会员卡的cardno参数
        ///    注意:如果该会员注册过,则字符串没有cardno参数;
        ///    只有在会员注册过,在数据库里查询到该会员的cadno,则在url里添加节点cardno。
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <param name="Indexid"></param>
        /// <param name="wid">微帐号主键Id</param>
        /// <returns></returns>
        public IResponseMessageBase GetResponseMessageNews(RequestMessageEventBase requestMessage, int Indexid, int wid, string EventName)
        {
            var            responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageNews>(requestMessage);
            string         openid          = requestMessage.FromUserName;
            string         token           = ConvertDateTimeInt(DateTime.Now).ToString();
            List <Article> picTxtList      = GetDataPicTxtComm(wid, Indexid, openid, token);

            //string EventName = "";
            //if (requestMessage.Event.ToString().Trim() != "")
            //{
            //    EventName = requestMessage.Event.ToString();
            //}
            //else if (requestMessage.EventKey != null)
            //{
            //    EventName += requestMessage.EventKey.ToString();
            //}

            if (picTxtList == null || picTxtList.Count <= 0)
            {
                DependencyManager.Resolve <IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "txtpic", "-1", requestMessage.ToUserName);
            }
            else
            {
                DependencyManager.Resolve <IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "txtpic", "这次发了" + picTxtList.Count + "条图文", requestMessage.ToUserName);
            }

            responseMessage.Articles.AddRange(picTxtList);
            return(responseMessage);
        }
Example #12
0
        /// <summary>
        /// Event事件类型请求
        /// </summary>
        protected virtual IResponseMessageBase OnEventRequest(RequestMessageEventBase requestMessage)
        {
            var strongRequestMessage             = RequestMessage as IRequestMessageEventBase;
            IResponseMessageBase responseMessage = null;

            switch (strongRequestMessage.Event)
            {
            case Event.LOCATION:    //自动发送的用户当前位置
                responseMessage = OnEvent_LocationRequest(RequestMessage as RequestMessageEvent_Location);
                break;

            case Event.subscribe:    //订阅
                responseMessage = OnEvent_SubscribeRequest(RequestMessage as RequestMessageEvent_Subscribe);
                break;

            case Event.unsubscribe:    //退订
                responseMessage = OnEvent_UnsubscribeRequest(RequestMessage as RequestMessageEvent_Unsubscribe);
                break;

            case Event.CLICK:    //菜单点击
                responseMessage = OnEvent_ClickRequest(RequestMessage as RequestMessageEvent_Click);
                break;

            case Event.scan:    //二维码
                responseMessage = OnEvent_ScanRequest(RequestMessage as RequestMessageEvent_Scan);
                break;

            default:
                throw new UnknownRequestMsgTypeException("未知的Event下属请求信息", null);
            }
            return(responseMessage);
        }
Example #13
0
        /// <summary>
        /// 推送纯文字
        /// 2013-9-12
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public IResponseMessageBase GetResponseMessageTxtByContent(RequestMessageEventBase requestMessage, string content, int wid)
        {
            var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage);
            var locationService = new LocationService();

            responseMessage.Content = content;
            string openid    = requestMessage.FromUserName;
            string EventName = "";

            if (requestMessage.Event.ToString().Trim() != "")
            {
                EventName = requestMessage.Event.ToString();
            }
            else if (requestMessage.Event != null)
            {
                EventName += requestMessage.Event.ToString();
            }
            var    result   = UserApi.Info(stoce(), openid);
            string pickname = result.nickname;
            string image    = result.headimgurl;

            wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "text", "事件:推送纯粹的文字,内容为:" + content, requestMessage.ToUserName, pickname, image);

            return(responseMessage);
        }
Example #14
0
        /// <summary>
        /// 2014-9-8新增抽奖功能
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <param name="Indexid"></param>
        /// <param name="wid"></param>
        /// <returns></returns>
        public IResponseMessageBase GetResponseMessageTxt(RequestMessageEventBase requestMessage, int wid)
        {
            var    responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage);
            string openid          = requestMessage.FromUserName;
            string token           = ConvertDateTimeInt(DateTime.Now).ToString();

            responseMessage.Content = string.Format("感谢您参与本次活动,您的幸运号码为 WDS2014920{0} ,请凭本号码参与后续精彩活动!", getDataTxtComm(openid));

            string EventName = "";

            if (requestMessage.Event.ToString().Trim() != "")
            {
                EventName = requestMessage.Event.ToString();
            }
            else if (requestMessage.Event != null)
            {
                EventName += requestMessage.Event.ToString();
            }
            var    result   = UserApi.Info(stoce(), openid);
            string pickname = result.nickname;
            string image    = result.headimgurl;

            wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "text", responseMessage.Content, requestMessage.ToUserName, pickname, image);

            return(responseMessage);
        }
Example #15
0
        /// <summary>
        /// 处理语音请求
        /// </summary>
        public IResponseMessageBase GetResponseMessageeMusic(RequestMessageEventBase requestMessage, int ruleId, int accountId)
        {
            var    responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageMusic>(requestMessage);
            string EventName       = "";

            if (requestMessage.Event.ToString().Trim() != "")
            {
                EventName = requestMessage.Event.ToString();
            }
            //else if (requestMessage.EventKey != null)
            //{
            //    EventName += requestMessage.EventKey.ToString();
            //}

            //Model.weixin_request_content model = new BLL.weixin_request_content().GetModel(ruleId);
            WeixinRequestContent model = WeixinRequestContent.Find(WeixinRequestContent._.RuleId == ruleId);

            if (model == null)
            {
                //new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "-1", requestMessage.ToUserName);
                WeixinResponseContent entity = new WeixinResponseContent()
                {
                    OpenId         = requestMessage.FromUserName,
                    RequestType    = requestMessage.MsgType.ToString(),
                    RequestContent = EventName,
                    ResponseType   = "music",
                    ReponseContent = "-1",
                    XmlContent     = requestMessage.ToUserName
                };
                entity.Insert();
            }
            else
            {
                if (model.MediaURL.Contains("http://"))
                {
                    responseMessage.Music.MusicUrl = model.MediaURL;
                }
                else
                {
                    //因为安装目录是以/开头,所以去掉,以免出现双斜杆
                    responseMessage.Music.MusicUrl = Utils.GetServerUrl() + model.MediaURL;
                }
                responseMessage.Music.Title       = model.Title;
                responseMessage.Music.Description = model.Content;
                //new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "音乐链接:" + model.media_url + "|标题:" + model.title + "|描述:" + model.content, requestMessage.ToUserName);
                WeixinResponseContent entity = new WeixinResponseContent()
                {
                    OpenId         = requestMessage.FromUserName,
                    RequestType    = requestMessage.MsgType.ToString(),
                    RequestContent = EventName,
                    ResponseType   = "music",
                    ReponseContent = "音乐链接:" + model.MediaURL + "|标题:" + model.Title + "|描述:" + model.Content,
                    XmlContent     = requestMessage.ToUserName
                };
                entity.Insert();
            }
            return(responseMessage);
        }
Example #16
0
        /// <summary>
        /// 推送多图文
        /// </summary>
        public IResponseMessageBase GetResponseMessageNews(RequestMessageEventBase requestMessage, int ruleId, int accountId)
        {
            var    responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageNews>(requestMessage);
            string openid          = requestMessage.FromUserName;
            string token           = ConvertDateTimeInt(DateTime.Now).ToString();

            Article        article;
            List <Article> artList = new List <Article>();
            IList <Model.weixin_request_content> twList = new BLL.weixin_request_content().GetModelList(10, ruleId, string.Empty);

            foreach (Model.weixin_request_content modelt in twList)
            {
                article             = new Article();
                article.Title       = modelt.title;
                article.Description = modelt.content;
                article.Url         = GetWXApiUrl(modelt.link_url, token, openid);
                if (string.IsNullOrEmpty(modelt.img_url))
                {
                    article.PicUrl = string.Empty;
                }
                else
                {
                    if (modelt.img_url.Contains("http://"))
                    {
                        article.PicUrl = modelt.img_url;
                    }
                    else
                    {
                        //因为安装目录是以/开头,所以去掉,以免出现双斜杆
                        article.PicUrl = siteConfig.weburl + "/" + siteConfig.webpath.Replace("/", "") + modelt.img_url;
                    }
                }
                artList.Add(article);
            }

            string EventName = "";

            if (requestMessage.Event.ToString().Trim() != "")
            {
                EventName = requestMessage.Event.ToString();
            }
            //else if (requestMessage.EventKey != null)
            //{
            //    EventName += requestMessage.EventKey.ToString();
            //}

            if (artList.Count == 0)
            {
                new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "txtpic", "-1", requestMessage.ToUserName);
            }
            else
            {
                new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "txtpic", "这次发了" + artList.Count + "条图文", requestMessage.ToUserName);
            }
            responseMessage.Articles.AddRange(artList);
            return(responseMessage);
        }
Example #17
0
        /// <summary>
        /// 推送单张图片
        /// </summary>
        public IResponseMessageBase GetResponseMessageSingleImagesContent(RequestMessageEventBase requestMessage, int ruleId, int accountId)
        {
            var    responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageImage>(requestMessage);
            string EventName       = "";
            var    locationService = new LocationService();

            NewLife.Log.XTrace.WriteLine("相应单图片回复");
            WeixinRequestContent model = WeixinRequestContent.Find(WeixinRequestContent._.RuleId == ruleId);

            if (model == null)
            {
                NewLife.Log.XTrace.WriteLine("没找到单图片回复规则");
                //new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "-1", requestMessage.ToUserName);
                WeixinResponseContent entity = new WeixinResponseContent()
                {
                    OpenId         = requestMessage.FromUserName,
                    RequestType    = requestMessage.MsgType.ToString(),
                    RequestContent = EventName,
                    ResponseType   = "image",
                    ReponseContent = "-1",
                    XmlContent     = requestMessage.ToUserName
                };
                entity.Insert();
            }
            else
            {
                if (string.IsNullOrEmpty(model.MediaURL))
                {
                    //如果没有mediaid 则先上传
                    string imgUrl       = "~/wwwroot" + model.ImgURL;
                    var    uploadResult = Senparc.Weixin.MP.AdvancedAPIs.MediaApi.UploadTemporaryMedia(siteConfig.AppId, UploadMediaFileType.image,
                                                                                                       ServerUtility.ContentRootMapPath(imgUrl));
                    model.MediaURL = uploadResult.media_id;
                    model.Update();
                    NewLife.Log.XTrace.WriteLine("上传素材,返回mediaid:" + uploadResult.media_id);
                }
                Image img = new Image();
                img.MediaId = model.MediaURL;
                responseMessage.CreateTime = DateTime.Now;
                responseMessage.Image      = img;

                NewLife.Log.XTrace.WriteLine("回复单图片,mediaid" + img.MediaId + ";回复用户openid:" + responseMessage.FromUserName);

                WeixinResponseContent entity = new WeixinResponseContent()
                {
                    OpenId         = requestMessage.FromUserName,
                    RequestType    = requestMessage.MsgType.ToString(),
                    RequestContent = EventName,
                    ResponseType   = "image",
                    ReponseContent = "图片:" + model.MediaURL + "|标题:" + model.Title,
                    XmlContent     = requestMessage.ToUserName
                };
                entity.Insert();
            }

            return(responseMessage);
        }
Example #18
0
        private IResponseMessageBase EventProcess(int type, RequestMessageEventBase requestMessage)
        {
            int apiid = wxcomm.getApiid();


            string EventName = "";

            if (requestMessage.Event.ToString().Trim() != "")
            {
                EventName = requestMessage.Event.ToString();
            }
            else if (requestMessage.Event != null)            //requestMessage.EventKey
            {
                EventName += requestMessage.Event.ToString(); //requestMessage.EventKey
            }

            if (!wxcomm.ExistApiidAndWxId(apiid, requestMessage.ToUserName))
            {  //验证接收方是否为我们系统配置的帐号,即验证微帐号与微信原始帐号id是否一致,如果不一致,说明【1】配置错误,【2】数据来源有问题
                DAL.wxResponseBaseMgr.Add(apiid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName, "sdff", "sdf");
                return(wxcomm.GetResponseMessageTxtByContent(requestMessage, "验证微帐号与微信原始帐号id不一致,可能原因【1】系统配置错误,【2】非法的数据来源", apiid));
            }


            int responseType = 0;
            int rid          = rBll.GetRuleIdAndResponseType(apiid, "reqestType=" + type, out responseType); //取消关注

            if (rid <= 0 || responseType <= 0)
            {
                DAL.wxResponseBaseMgr.Add(apiid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName, "sdf", "sdf");
                return(null);
            }

            IResponseMessageBase reponseMessage = null;

            switch (responseType)
            {
            case 1:
                //发送纯文字
                reponseMessage = wxcomm.GetResponseMessageTxt(requestMessage, rid, apiid);
                break;

            case 2:
                //发送多图文
                reponseMessage = wxcomm.GetResponseMessageNews(requestMessage, rid, apiid);
                break;

            case 3:
                //发送语音
                reponseMessage = wxcomm.GetResponseMessageeMusic(requestMessage, rid, apiid);
                break;

            default:
                break;
            }

            return(reponseMessage);
        }
Example #19
0
        /// <summary>
        /// 获取请求消息和实体之间的映射结果
        /// </summary>
        /// <param name="requestMsgType"></param>
        /// <returns></returns>
        public override IRequestMessageBase GetRequestEntityMappingResult(RequestMsgType requestMsgType, XDocument doc = null)
        {
            RequestMessageBase requestMessage;

            switch (requestMsgType)
            {
            case RequestMsgType.Text:
                requestMessage = new RequestMessageText();
                break;

            case RequestMsgType.Image:
                requestMessage = new RequestMessageImage();
                break;

            case RequestMsgType.MiniProgramPage:    //小程序页面
                requestMessage = new RequestMessageMiniProgramPage();
                break;

            case RequestMsgType.NeuChar:
                requestMessage = new RequestMessageNeuChar();
                break;

            case RequestMsgType.Event:
                //判断Event类型
                switch (doc.Root.Element("Event").Value.ToUpper())
                {
                case "USER_ENTER_TEMPSESSION":        //进入客服会话
                    requestMessage = new RequestMessageEvent_UserEnterTempSession();
                    break;

                case "WEAPP_AUDIT_SUCCESS":         //小程序审核成功
                    requestMessage = new RequestMessageEvent_WeAppAuditSuccess();
                    break;

                case "WEAPP_AUDIT_FAIL":         //小程序审核失败
                    requestMessage = new RequestMessageEvent_WeAppAuditFail();
                    break;

                case "WEAPP_AUDIT_DELAY":         //小程序审核延后
                    requestMessage = new RequestMessageEvent_WeAppAuditDelay();
                    break;

                case "WXA_NICKNAME_AUDIT":         //名称审核结果
                    requestMessage = new RequestMessageEvent_NicknameAudit();
                    break;

                default:        //其他意外类型(也可以选择抛出异常)
                    requestMessage = new RequestMessageEventBase();
                    break;
                }
                break;

            default:
                throw new UnknownRequestMsgTypeException(string.Format("MsgType:{0} 在RequestMessageFactory中没有对应的处理程序!", requestMsgType), new ArgumentOutOfRangeException());    //为了能够对类型变动最大程度容错(如微信目前还可以对公众账号suscribe等未知类型,但API没有开放),建议在使用的时候catch这个异常
            }
            return(requestMessage);
        }
Example #20
0
        Model.siteconfig siteConfig = new BLL.siteconfig().loadConfig(); //站点配置


        #region 处理关注/取消/默认回复方法===========================
        /// <summary>
        /// 定阅事件的统一处理
        /// </summary>
        public IResponseMessageBase EventSubscribe(int type, RequestMessageEventBase requestMessage)
        {
            //var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);
            int    accountId = GetAccountId(); //取得公众账户ID
            string EventName = "";

            if (requestMessage.Event.ToString().Trim() != "")
            {
                EventName = requestMessage.Event.ToString();
            }
            //else if (requestMessage.EventKey != null)
            //{
            //    EventName += requestMessage.EventKey.ToString();
            //}

            if (!ExistsOriginalId(accountId, requestMessage.ToUserName))
            {
                //验证接收方是否为我们系统配置的帐号,即验证微帐号与微信原始帐号id是否一致,如果不一致,说明【1】配置错误,【2】数据来源有问题
                new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName);
                return(GetResponseMessageTxtByContent(requestMessage, "验证微帐号与微信原始帐号id不一致,可能原因【1】系统配置错误,【2】非法的数据来源", accountId));
            }


            int responseType = 0;
            int ruleId       = new BLL.weixin_request_rule().GetRuleIdAndResponseType(accountId, "request_type=" + type, out responseType);

            if (ruleId <= 0 || responseType <= 0)
            {
                new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName);
                return(null);
            }

            IResponseMessageBase reponseMessage = null;

            switch (responseType)
            {
            case 1:
                //发送纯文字
                reponseMessage = GetResponseMessageTxt(requestMessage, ruleId, accountId);
                break;

            case 2:
                //发送多图文
                reponseMessage = GetResponseMessageNews(requestMessage, ruleId, accountId);
                break;

            case 3:
                //发送语音
                reponseMessage = GetResponseMessageeMusic(requestMessage, ruleId, accountId);
                break;

            default:
                break;
            }
            return(reponseMessage);
        }
Example #21
0
        public ResponseMessageBase GetResponseMessage(RequestMessageEventBase requestMessage)
        {
            ResponseMessageBase responseMessage = null;

            switch (requestMessage.Event)
            {
            case Event.ENTER:
            {
                var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>();
                strongResponseMessage.Content = "您刚才发送了ENTER事件请求。";
                responseMessage = strongResponseMessage;
                break;
            }

            case Event.LOCATION:
                throw new Exception("暂不可用");

            //break;
            case Event.subscribe:    //订阅
            {
                var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageNews>();

                //获取Senparc.Weixin.MP.dll版本信息
                var fileVersionInfo = FileVersionInfo.GetVersionInfo(HttpContext.Current.Server.MapPath("~/bin/Senparc.Weixin.MP.dll"));
                var version         = fileVersionInfo.FileVersion;
                strongResponseMessage.Articles.Add(new Article()
                    {
                        Title = "**,您有一个0元设计未领", PicUrl = "http://material-ui.net/content/zixun.jpg", Url = "http://material-ui.net/booking.html", Description = "您有一个0元设计未领"
                    });
                responseMessage = strongResponseMessage;
                break;
            }

            case Event.unsubscribe:    //退订
            {
                //实际上用户无法收到非订阅账号的消息,所以这里可以随便写。
                //unsubscribe事件的意义在于及时删除网站应用中已经记录的OpenID绑定,消除冗余数据。
                var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>();
                strongResponseMessage.Content = "有空再来";
                responseMessage = strongResponseMessage;
                break;
            }

            case Event.CLICK:    //菜单点击事件,根据自己需要修改
                //这里的CLICK在此DEMO中不会被执行到,因为已经重写了OnEvent_ClickRequest
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(responseMessage);
        }
Example #22
0
        public ResponseMessageBase GetResponseMessage(RequestMessageEventBase requestMessage)
        {
            ResponseMessageBase responseMessage = null;

            switch (requestMessage.Event)
            {
            case Event.ENTER:
            {
                var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>();
                strongResponseMessage.Content = "您刚才发送了ENTER事件请求。";
                responseMessage = strongResponseMessage;
                break;
            }

            case Event.LOCATION:
                throw new Exception("暂不可用");

            //break;
            case Event.subscribe:    //订阅
            {
                var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>();

                //获取Senparc.Weixin.MP.dll版本信息
                var fileVersionInfo = FileVersionInfo.GetVersionInfo(HttpContext.Current.Server.MapPath("~/bin/Senparc.Weixin.MP.dll"));
                var version         = fileVersionInfo.FileVersion;
                strongResponseMessage.Content = string.Format(
                    "欢迎关注计划管理平台,当前运行版本:v{0}。\r\n 输入如:【1】,【任务】,任务查询 注:(需在计划系统中有对应帐号并等待通过审核)\r\n输入如:【2】,【绑定】, 进行计划任务帐号绑定\r\n输入如:【3】,【电话】,【通讯录】, 进行通讯录查询\r\n",
                    version);
                responseMessage = strongResponseMessage;
                break;
            }

            case Event.unsubscribe:    //退订
            {
                //实际上用户无法收到非订阅账号的消息,所以这里可以随便写。
                //unsubscribe事件的意义在于及时删除网站应用中已经记录的OpenID绑定,消除冗余数据。
                var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>();
                strongResponseMessage.Content = "有空再来";
                responseMessage = strongResponseMessage;
                break;
            }

            case Event.CLICK:    //菜单点击事件,根据自己需要修改
                //这里的CLICK在此DEMO中不会被执行到,因为已经重写了OnEvent_ClickRequest
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(responseMessage);
        }
Example #23
0
        public ResponseMessageBase GetResponseMessage(RequestMessageEventBase requestMessage)
        {
            ResponseMessageBase responseMessage = null;

            switch (requestMessage.Event)
            {
            case Event.ENTER:
            {
                var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>();
                strongResponseMessage.Content = "您刚才发送了ENTER事件请求。";
                responseMessage = strongResponseMessage;
                break;
            }

            case Event.LOCATION:
                throw new Exception("暂不可用");

            //break;
            case Event.subscribe:    //订阅
            {
                var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>();

                //获取Senparc.Weixin.MP.dll版本信息
                var fileVersionInfo = FileVersionInfo.GetVersionInfo(HttpContext.Current.Server.MapPath("~/bin/Senparc.Weixin.MP.dll"));
                var version         = fileVersionInfo.FileVersion;
                strongResponseMessage.Content = string.Format(
                    "欢迎关注【XX公司微信平台】,当前运行版本:v{0}。\r\n您还可以发送【位置】【图片】【语音】信息,查看不同格式的回复。\r\nSDK官方地址:http://www.yubom.net",
                    version);
                responseMessage = strongResponseMessage;
                break;
            }

            case Event.unsubscribe:    //退订
            {
                //实际上用户无法收到非订阅账号的消息,所以这里可以随便写。
                //unsubscribe事件的意义在于及时删除网站应用中已经记录的OpenID绑定,消除冗余数据。
                var strongResponseMessage = requestMessage.CreateResponseMessage <ResponseMessageText>();
                strongResponseMessage.Content = "亲,有空再来!";
                responseMessage = strongResponseMessage;
                break;
            }

            case Event.CLICK:    //菜单点击事件,根据自己需要修改
                //这里的CLICK在此DEMO中不会被执行到,因为已经重写了OnEvent_ClickRequest
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(responseMessage);
        }
Example #24
0
        public ResponseMessageBase GetResponseMessage(RequestMessageEventBase requestMessage)
        {
            ResponseMessageBase responseMessage = null;

            switch (requestMessage.Event)
            {
            case Event.ENTER:
            {
                var strongResponseMessage = ResponseMessageBase.CreateFromRequestMessage(requestMessage, ResponseMsgType.Text) as ResponseMessageText;
                strongResponseMessage.Content = "您刚才发送了ENTER事件请求。";
                responseMessage = strongResponseMessage;
                break;
            }

            case Event.LOCATION:
                throw new Exception("暂不可用");
                break;

            case Event.subscribe:    //订阅
            {
                var strongResponseMessage = ResponseMessageBase.CreateFromRequestMessage(requestMessage, ResponseMsgType.Text) as ResponseMessageText;

                //获取Senparc.Weixin.MP.dll版本信息
                var fileVersionInfo = FileVersionInfo.GetVersionInfo(HttpContext.Current.Server.MapPath("~/bin/Senparc.Weixin.MP.dll"));
                var version         = fileVersionInfo.FileVersion;
                strongResponseMessage.Content = string.Format("欢迎关注【美天网络统一帐号管理平台】,当前运行版本:v{0}。", version);
                //strongResponseMessage.Content = string.Format("欢迎关注【美天网络统一帐号管理平台】,当前运行版本:v{0}。\r\n您还可以发送【位置】【图片】【语音】信息,查看不同格式的回复。\r\nSDK官方地址:http://weixin.senparc.com", version);
                responseMessage = strongResponseMessage;
                break;
            }

            case Event.unsubscribe:    //退订
            {
                //实际上用户无法收到非订阅账号的消息,所以这里可以随便写。
                //unsubscribe事件的意义在于及时删除网站应用中已经记录的OpenID绑定,消除冗余数据。
                var strongResponseMessage = ResponseMessageBase.CreateFromRequestMessage(requestMessage, ResponseMsgType.Text) as ResponseMessageText;
                strongResponseMessage.Content = "有空再来";
                responseMessage = strongResponseMessage;
                break;
            }

            case Event.CLICK:    //菜单点击事件,根据自己需要修改
                throw new Exception("Demo中还没有加入CLICK的测试!");
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(responseMessage);
        }
Example #25
0
        /// <summary>
        /// 处理语音请求
        /// </summary>
        public IResponseMessageBase GetResponseMessageeMusic(RequestMessageEventBase requestMessage, int ruleId, int accountId)
        {
            var    responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageMusic>(requestMessage);
            string EventName       = "";

            if (requestMessage.Event.ToString().Trim() != "")
            {
                EventName = requestMessage.Event.ToString();
            }


            //
            return(responseMessage);
        }
        //<?xml version="1.0" encoding="utf-8"?>
        //<xml>
        //  <ToUserName><![CDATA[gh_a96a4a619366]]></ToUserName>
        //  <FromUserName><![CDATA[olPjZjsXuQPJoV0HlruZkNzKc91E]]></FromUserName>
        //  <CreateTime>1357986928</CreateTime>
        //  <MsgType><![CDATA[text]]></MsgType>
        //  <Content><![CDATA[中文]]></Content>
        //  <MsgId>5832509444155992350</MsgId>
        //</xml>

        /// <summary>
        /// 获取XDocument转换后的IRequestMessageBase实例。
        /// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常
        /// </summary>
        /// <returns></returns>
        public static IRequestMessageBase GetRequestEntity(XDocument doc, PostModel postModel = null)
        {
            RequestMessageBase requestMessage = null;
            RequestMsgType     msgType;
            int aaa;
            int bbb;

            try
            {
                msgType = MsgTypeHelper.GetRequestMsgType(doc);
                switch (msgType)
                {
                case RequestMsgType.Text:
                    requestMessage = new RequestMessageText();
                    break;

                case RequestMsgType.Image:
                    requestMessage = new RequestMessageImage();
                    break;

                case RequestMsgType.NeuChar:
                    requestMessage = new RequestMessageNeuChar();
                    break;

                case RequestMsgType.Event:
                    //判断Event类型
                    switch (doc.Root.Element("Event").Value.ToUpper())
                    {
                    case "USER_ENTER_TEMPSESSION":        //进入客服会话
                        requestMessage = new RequestMessageEvent_UserEnterTempSession();
                        break;

                    default:        //其他意外类型(也可以选择抛出异常)
                        requestMessage = new RequestMessageEventBase();
                        break;
                    }
                    break;

                default:
                    throw new UnknownRequestMsgTypeException(string.Format("MsgType:{0} 在RequestMessageFactory中没有对应的处理程序!", msgType), new ArgumentOutOfRangeException());    //为了能够对类型变动最大程度容错(如微信目前还可以对公众账号suscribe等未知类型,但API没有开放),建议在使用的时候catch这个异常
                }
                Senparc.NeuChar.Helpers.EntityHelper.FillEntityWithXml(requestMessage, doc);
            }
            catch (ArgumentException ex)
            {
                throw new WeixinException(string.Format("RequestMessage转换出错!可能是MsgType不存在!,XML:{0}", doc.ToString()), ex);
            }
            return(requestMessage);
        }
Example #27
0
        /// <summary>
        /// 定阅事件的统一处理
        /// </summary>
        public IResponseMessageBase EventSubscribe(int type, RequestMessageEventBase requestMessage)
        {
            int    accountId = GetAccountId(); //取得公众账户ID
            string EventName = "";

            if (requestMessage.Event.ToString().Trim() != "")
            {
                EventName = requestMessage.Event.ToString();
            }

            if (!ExistsOriginalId(accountId, requestMessage.ToUserName))
            {
                //验证接收方是否为我们系统配置的帐号,即验证微帐号与微信原始帐号id是否一致,如果不一致,说明【1】配置错误,【2】数据来源有问题
                //new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName);
                return(GetResponseMessageTxtByContent(requestMessage, "验证微帐号与微信原始帐号id不一致,可能原因【1】系统配置错误,【2】非法的数据来源", accountId));
            }


            //int responseType = 0;
            //int ruleId = 0;// new BLL.weixin_request_rule().GetRuleIdAndResponseType(accountId, "request_type=" + type, out responseType);
            //if (ruleId <= 0 || responseType <= 0)
            //{
            //    //new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName);
            //    return null;
            //}
            IResponseMessageBase reponseMessage = null;

            reponseMessage = GetResponseMessageTxt(requestMessage, accountId);

            //switch (responseType)
            //{
            //    case 1:
            //        //发送纯文字
            //        reponseMessage = GetResponseMessageTxt(requestMessage, ruleId, accountId);
            //        break;
            //    case 2:
            //        //发送多图文
            //        reponseMessage = GetResponseMessageNews(requestMessage, ruleId, accountId);
            //        break;
            //    case 3:
            //        //发送语音
            //        reponseMessage = GetResponseMessageeMusic(requestMessage, ruleId, accountId);
            //        break;
            //    default:
            //        break;
            //}
            return(reponseMessage);
        }
Example #28
0
        private ResponseMessageText WechatEventMsgHandler(RequestMessageEventBase request)
        {
            ResponseMessageText responseMessage = null;

            switch (request.Event)
            {
            case Event.VIEW:
                //  var viewRequest = request as RequestMessageEvent_View;
                LogHelper.Logger.Debug("点击菜单跳转链接时的事件推送");
                responseMessage         = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(request);
                responseMessage.Content = "正在获取您的账号信息,请稍等...";
                break;

            case Event.subscribe:
                responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(request);
                var msgInfo = _wechatMsgRepository.FirstOrDefault(p => p.KeyWord == "subscribe");
                if (msgInfo != null)
                {
                    responseMessage.Content = msgInfo.ResponseMsg;
                }
                else
                {
                    responseMessage.Content = "欢迎关注彩盟网";
                }
                break;

            case Event.CLICK:
                var request_click = request as RequestMessageEvent_Click;
                responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(request_click);
                var respMsg = "欢迎关注彩盟网,我们为您提供了最准确,最齐全的彩票分析计划";
                if (request_click.EventKey == WeChatConfig.MENU_SUB_CLICK_HELP)
                {
                    var msgInfo1 = _wechatMsgRepository.FirstOrDefault(p => p.KeyWord == "help");
                    if (msgInfo1 != null)
                    {
                        respMsg = msgInfo1.ResponseMsg;
                    }
                }
                responseMessage.Content = respMsg;
                break;

            default:
                responseMessage         = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(request);
                responseMessage.Content = _wechatMsgRepository.FirstOrDefault(p => p.KeyWord == "default").ResponseMsg;
                break;
            }
            return(responseMessage);
        }
 /// <summary>
 /// 绑定微信
 /// </summary>
 /// <param name="weixinMsg"></param>
 /// <param name="sceneid"></param>
 /// <param name="model"></param>
 /// <returns></returns>
 private string Binding(RequestMessageEventBase weixinMsg, string sceneid, SceneModel model)
 {
     try
     {
         var key = CacheKeyCollection.BindingReturn(sceneid);
         Log.Info("微信绑定进入:" + key);
         var sceneResult = Core.Cache.Get<Himall.DTO.WeiXinInfo>(key);
         if (sceneResult == null)
         {
             Log.Info("微信绑定缓存开始");
             var siteSetting = _iSiteSettingService.GetSiteSettings();
             if (!(string.IsNullOrWhiteSpace(siteSetting.WeixinAppId) || string.IsNullOrWhiteSpace(siteSetting.WeixinAppSecret)))
             {
                 string token = AccessTokenContainer.TryGetToken(siteSetting.WeixinAppId, siteSetting.WeixinAppSecret);
                 Log.Info("微信绑定缓存token" + token);
                 var userinfo = Senparc.Weixin.MP.CommonAPIs.CommonApi.GetUserInfo(token, weixinMsg.FromUserName);
                 string sex = "未知";
                 switch (userinfo.sex)
                 {
                     case 1: sex = "男"; break;
                     case 2: sex = "女"; break;
                 }
                 var WeiXinInfo = new Himall.DTO.WeiXinInfo
                 {
                     OpenId = weixinMsg.FromUserName,
                     NickName = userinfo.nickname,
                     city = userinfo.city,
                     province = userinfo.province,
                     sex = sex,
                     headimgurl = userinfo.headimgurl
                 };
                 if (Core.Cache.Get(key) != null)
                     Core.Cache.Remove(key);
                 Core.Cache.Insert(key, WeiXinInfo, 300);
             }
             else
             {
                 Core.Log.Error("微信事件回调:未设置公众号配置参数!");
             }
         }
     }
     catch (Exception ex)
     {
         Log.Error("Binding:" + ex.Message);
     }
     return string.Empty;
 }
Example #30
0
        public ResponseMessageBase GetResponseMessage(RequestMessageEventBase requestMessage)
        {
            ResponseMessageBase responseMessage = null;
            switch (requestMessage.Event)
            {
                case Event.ENTER:
                    {
                        var strongResponseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>();
                        strongResponseMessage.Content = "您刚才发送了ENTER事件请求。";
                        responseMessage = strongResponseMessage;
                        break;
                    }
                case Event.LOCATION:
                    throw new Exception("暂不可用");
                    //break;
                case Event.subscribe://订阅
                    {
                        var strongResponseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>();

                        //获取OneGulp.WeChat.MP.dll版本信息
                        var fileVersionInfo = FileVersionInfo.GetVersionInfo(HttpContext.Current.Server.MapPath("~/bin/OneGulp.WeChat.MP.dll"));
                        var version = fileVersionInfo.FileVersion;
                        strongResponseMessage.Content = string.Format(
                            "欢迎关注,当前运行版本:v{0}。\r\n您还可以发送【位置】【图片】【语音】信息,查看不同格式的回复。",
                            version);
                        responseMessage = strongResponseMessage;
                        break;
                    }
                case Event.unsubscribe://退订
                    {
                        //实际上用户无法收到非订阅账号的消息,所以这里可以随便写。
                        //unsubscribe事件的意义在于及时删除网站应用中已经记录的OpenID绑定,消除冗余数据。
                        var strongResponseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>();
                        strongResponseMessage.Content = "亲,有空再来!";
                        responseMessage = strongResponseMessage;
                        break;
                    }
                case Event.CLICK://菜单点击事件,根据自己需要修改
                    //这里的CLICK在此DEMO中不会被执行到,因为已经重写了OnEvent_ClickRequest
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }

            return responseMessage;         
        }
Example #31
0
        /// <summary>
        /// 推送纯文字
        /// </summary>
        public IResponseMessageBase GetResponseMessageTxtByContent(RequestMessageEventBase requestMessage, string content, int accountId)
        {
            var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage);
            var locationService = new LocationService();

            responseMessage.Content = content;
            string EventName = "";

            if (requestMessage.Event.ToString().Trim() != "")
            {
                EventName = requestMessage.Event.ToString();
            }

            //new BLL.weixin_response_content().Add(accountId, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "text", "事件:推送纯粹的文字,内容为:" + content, requestMessage.ToUserName);

            return(responseMessage);
        }
Example #32
0
        /// <summary>
        /// 推送语音请求
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <param name="indexid"></param>
        /// <param name="wid"></param>
        /// <param name="enevtName"></param>
        /// <returns></returns>
        public IResponseMessageBase GetResponseMessageVoice(RequestMessageEventBase requestMessage, int indexid, int wid, string enevtName)
        {
            var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageVoice>(requestMessage);

            //Model.wx_requestRuleContent model = getDataMusicComm(wid, indexid);
            //if (model == null)
            //{

            //    DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), enevtName, "voice", "-1", requestMessage.ToUserName);
            //}
            //else
            //{
            //    //if (model.mediaUrl.StartsWith("http"))
            //    //{

            //    //    responseMessage.Music.MusicUrl = model.mediaUrl;
            //    //}
            //    //else
            //    //{
            //    //    responseMessage.Music.MusicUrl = MyCommFun.getWebSite() + model.mediaUrl;
            //    //}
            //    //responseMessage.Music.Title = model.rContent;
            //    //responseMessage.Music.Description = model.rContent2;
            //    //DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), enevtName, "voice", "音乐链接:" + model.mediaUrl + "|标题:" + model.rContent + "|描述:" + model.rContent2, requestMessage.ToUserName);

            //    responseMessage.Voice = new Voice() { MediaId = model.extStr };

            //    DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), enevtName, "voice", "音乐链接:" + model.mediaUrl + "|标题:" + model.rContent + "|描述:" + model.rContent2, requestMessage.ToUserName);
            //}
            return responseMessage;
        }
Example #33
0
        /// <summary>
        /// 推送纯文字
        /// 2013-9-12
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public IResponseMessageBase GetResponseMessageTxtByContent(RequestMessageEventBase requestMessage, string content, int wid, string EventName)
        {
            var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);
            var locationService = new LocationService();
            responseMessage.Content = content;
            //string EventName = "";
            //if (requestMessage.Event.ToString().Trim() != "")
            //{
            //    EventName = requestMessage.Event.ToString();
            //}
            //else if (requestMessage.EventKey != null)
            //{
            //    EventName += requestMessage.EventKey.ToString();
            //}
            DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "text", "事件:推送纯粹的文字,内容为:" + content, requestMessage.ToUserName);

            return responseMessage;
        }
Example #34
0
        /// <summary>
        /// 推送纯文字
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public IResponseMessageBase GetResponseMessageTxt(RequestMessageEventBase requestMessage, int Indexid, int wid, string EventName)
        {
            var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);
            string openid = requestMessage.FromUserName;
            string token = ConvertDateTimeInt(DateTime.Now).ToString();
            responseMessage.Content = getDataTxtComm(wid, Indexid, openid, token);

            //string EventName = "";
            //if (requestMessage.Event.ToString().Trim() != "")
            //{
            //    EventName = requestMessage.Event.ToString();
            //}
            //else if (requestMessage.EventKey != null)
            //{
            //    EventName += requestMessage.EventKey.ToString();
            //}

            DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "text", responseMessage.Content, requestMessage.ToUserName);

            return responseMessage;
        }
Example #35
0
        /// <summary>
        /// 推送多图文
        /// update note 1:
        ///    李朴 2013-8-20 添加会员卡的cardno参数
        ///    注意:如果该会员注册过,则字符串没有cardno参数;
        ///    只有在会员注册过,在数据库里查询到该会员的cadno,则在url里添加节点cardno。
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <param name="Indexid"></param>
        /// <param name="wid">微帐号主键Id</param>
        /// <returns></returns>
        public IResponseMessageBase GetResponseMessageNews(RequestMessageEventBase requestMessage, int Indexid, int wid, string EventName)
        {
            var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageNews>(requestMessage);
            string openid = requestMessage.FromUserName;
            string token = ConvertDateTimeInt(DateTime.Now).ToString();
            List<Article> picTxtList = GetDataPicTxtComm(wid, Indexid, openid, token);
            //string EventName = "";
            //if (requestMessage.Event.ToString().Trim() != "")
            //{
            //    EventName = requestMessage.Event.ToString();
            //}
            //else if (requestMessage.EventKey != null)
            //{
            //    EventName += requestMessage.EventKey.ToString();
            //}

            if (picTxtList == null || picTxtList.Count <= 0)
            {
                DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "txtpic", "-1", requestMessage.ToUserName);
            }
            else
            {
                DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "txtpic", "这次发了" + picTxtList.Count + "条图文", requestMessage.ToUserName);
            }

            responseMessage.Articles.AddRange(picTxtList);
            return responseMessage;
        }
Example #36
0
        /// <summary>
        /// 处理音乐请求
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public IResponseMessageBase GetResponseMessageeMusic(RequestMessageEventBase requestMessage, int Indexid, int wid, string EventName)
        {
            //var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageMusic>(requestMessage);
            ////string EventName = "";
            ////if (requestMessage.Event.ToString().Trim() != "")
            ////{
            ////    EventName = requestMessage.Event.ToString();
            ////}
            ////else if (requestMessage.EventKey != null)
            ////{
            ////    EventName += requestMessage.EventKey.ToString();
            ////}

            //Model.wx_requestRuleContent model = getDataMusicComm(wid, Indexid);
            //if (model == null)
            //{

            //    DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "-1", requestMessage.ToUserName);
            //}
            //else
            //{
            //    if (model.mediaUrl.StartsWith("http"))
            //    {

            //        responseMessage.Music.MusicUrl = model.mediaUrl;
            //    }
            //    else
            //    {
            //        responseMessage.Music.MusicUrl = MyCommFun.getWebSite() + model.mediaUrl;
            //    }
            //    responseMessage.Music.Title = model.rContent;
            //    responseMessage.Music.Description = model.rContent2;
            //    DependencyManager.Resolve<IResponseMessageLogRepository>().Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "music", "音乐链接:" + model.mediaUrl + "|标题:" + model.rContent + "|描述:" + model.rContent2, requestMessage.ToUserName);

            //}
            //return responseMessage;

            return null;
        }
Example #37
0
        /// <summary>
        /// 模块功能回复【请求为‘事件’类型】
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <param name="modelFunctionName"></param>
        /// <param name="modelFunctionId"></param>
        /// <param name="apiid"></param>
        /// <returns></returns>
        public IResponseMessageBase GetModuleResponse(RequestMessageEventBase requestMessage, string modelFunctionName, int modelFunctionId, int apiid)
        {
            //string openid = requestMessage.FromUserName;
            //string token = ConvertDateTimeInt(DateTime.Now).ToString();

            //IList<ResponseContentEntity> responselist = new List<ResponseContentEntity>();

            //responselist = PanDuanMoudle(modelFunctionName, modelFunctionId, openid, apiid);
            //if (responselist == null || responselist.Count <= 0)
            //{
            //    var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);
            //    responseMessage.Content = "【" + modelFunctionName + "】功能模块未获得到数据";
            //    return responseMessage;
            //}

            //Model.ReponseContentType responseType = responselist[0].rcType;

            //if (responseType == Model.ReponseContentType.text)
            //{
            //    var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage);

            //    responseMessage.Content = responselist[0].rContent.ToString();
            //    return responseMessage;
            //}
            //else if (responseType == Model.ReponseContentType.txtpic)
            //{
            //    var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageNews>(requestMessage);
            //    IList<Article> rArticlelist = new List<Article>();
            //    Article article = new Article();
            //    foreach (ResponseContentEntity response in responselist)
            //    {
            //        article = new Article();
            //        article.Title = response.rContent;
            //        article.Description = response.rContent2;
            //        article.Url = getWXApiUrl(response.detailUrl, token, openid) + getWxUrl_suffix();
            //        if (response.picUrl == null || response.picUrl.ToString().Trim() == "")
            //        {
            //            article.PicUrl = "";
            //        }
            //        else
            //        {
            //            if (!response.picUrl.Contains("http://"))
            //            {
            //                article.PicUrl = MyCommFun.getWebSite() + response.picUrl;
            //            }
            //            else
            //            {
            //                article.PicUrl = response.picUrl;
            //            }
            //        }
            //        rArticlelist.Add(article);

            //    }
            //    responseMessage.Articles.AddRange(rArticlelist);
            //    return responseMessage;
            //}
            //else
            //{
            //    return null;
            //}

            return null;
        }
        private IResponseMessageBase EventProcess(int type, RequestMessageEventBase requestMessage)
        {
            int apiid = wxcomm.getApiid();


            string EventName = "";
            if (requestMessage.Event.ToString().Trim() != "")
            {
                EventName = requestMessage.Event.ToString();
            }


            if (!wxcomm.ExistApiidAndWxId(apiid, requestMessage.ToUserName))
            {  //验证接收方是否为我们系统配置的帐号,即验证微帐号与微信原始帐号id是否一致,如果不一致,说明【1】配置错误,【2】数据来源有问题
                DependencyManager.Resolve<IResponseMessageLogRepository>().Add(apiid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName);
                return wxcomm.GetResponseMessageTxtByContent(requestMessage, "验证微帐号与微信原始帐号id不一致,可能原因【1】系统配置错误,【2】非法的数据来源", apiid, "系统错误提示");
            }
            bool isExist = wxcomm.wxCodeLegal(apiid);
            if (!isExist)
            {
                DependencyManager.Resolve<IResponseMessageLogRepository>().Add(apiid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "账号已过期或已被禁用", requestMessage.ToUserName);
                return wxcomm.GetResponseMessageTxtByContent(requestMessage, "账号已过期或已被禁用!", apiid, "系统错误提示");
            }

            int responseType = 0;
            int rid = rBll.GetRuleIdAndResponseType(apiid, "reqestType=" + type, out responseType);  //取消关注
            if (rid <= 0 || responseType <= 0)
            {
                DependencyManager.Resolve<IResponseMessageLogRepository>().Add(apiid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), EventName, "none", "未取到关键词对应的数据", requestMessage.ToUserName);
                return wxcomm.GetResponseMessageTxtByContent(requestMessage, "欢迎您再次关注!", apiid, "系统错误提示");
            }


            IResponseMessageBase reponseMessage = null;
            switch (responseType)
            {
                case 1:
                    //发送纯文字
                    reponseMessage = wxcomm.GetResponseMessageTxt(requestMessage, rid, apiid, EventName);
                    break;
                case 2:
                    //发送多图文
                    reponseMessage = wxcomm.GetResponseMessageNews(requestMessage, rid, apiid, EventName);
                    break;
                case 3:
                    //发送语音
                    //reponseMessage = wxcomm.GetResponseMessageeMusic(requestMessage, rid, apiid, EventName);
                    reponseMessage = wxcomm.GetResponseMessageVoice(requestMessage, rid, apiid, EventName);
                    break;
                default:
                    break;
            }

            return reponseMessage;

        }
Example #39
0
        //<?xml version="1.0" encoding="utf-8"?>
        //<xml>
        //  <ToUserName><![CDATA[gh_a96a4a619366]]></ToUserName>
        //  <FromUserName><![CDATA[olPjZjsXuQPJoV0HlruZkNzKc91E]]></FromUserName>
        //  <CreateTime>1357986928</CreateTime>
        //  <MsgType><![CDATA[text]]></MsgType>
        //  <Content><![CDATA[中文]]></Content>
        //  <MsgId>5832509444155992350</MsgId>
        //</xml>
        /// <summary>
        /// 获取XDocument转换后的IRequestMessageBase实例。
        /// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常
        /// </summary>
        /// <returns></returns>
        public static IRequestMessageBase GetRequestEntity(XDocument doc)
        {
            RequestMessageBase requestMessage = null;
            RequestMsgType msgType;
            try
            {
                msgType = MsgTypeHelper.GetRequestMsgType(doc);
                switch (msgType)
                {
                    case RequestMsgType.Text:
                        requestMessage = new RequestMessageText();
                        break;

                    case RequestMsgType.Location:
                        requestMessage = new RequestMessageLocation();
                        break;

                    case RequestMsgType.Image:
                        requestMessage = new RequestMessageImage();
                        break;

                    case RequestMsgType.Voice:
                        requestMessage = new RequestMessageVoice();
                        break;

                    case RequestMsgType.Video:
                        requestMessage = new RequestMessageVideo();
                        break;

                    case RequestMsgType.Link:
                        requestMessage = new RequestMessageLink();
                        break;

                    case RequestMsgType.ShortVideo:
                        requestMessage = new RequestMessageShortVideo();
                        break;

                    case RequestMsgType.Event:
                        //判断Event类型
                        switch (doc.Root.Element("Event").Value.ToUpper())
                        {
                            case "ENTER"://进入会话
                                requestMessage = new RequestMessageEvent_Enter();
                                break;

                            case "LOCATION"://地理位置
                                requestMessage = new RequestMessageEvent_Location();
                                break;

                            case "SUBSCRIBE"://订阅(关注)
                                requestMessage = new RequestMessageEvent_Subscribe();
                                break;

                            case "UNSUBSCRIBE"://取消订阅(关注)
                                requestMessage = new RequestMessageEvent_Unsubscribe();
                                break;

                            case "CLICK"://菜单点击
                                requestMessage = new RequestMessageEvent_Click();
                                break;

                            case "SCAN"://二维码扫描
                                requestMessage = new RequestMessageEvent_Scan();
                                break;

                            case "VIEW"://URL跳转
                                requestMessage = new RequestMessageEvent_View();
                                break;

                            case "MASSSENDJOBFINISH": //事件推送群发
                                requestMessage = new RequestMessageEvent_MassSendJobFinish();
                                break;

                            case "TEMPLATESENDJOBFINISH"://模板信息
                                requestMessage = new RequestMessageEvent_TemplateSendJobFinish();
                                break;

                            case "SCANCODE_PUSH"://扫码推事件(scancode_push)
                                requestMessage = new RequestMessageEvent_Scancode_Push();
                                break;

                            case "SCANCODE_WAITMSG"://扫码推事件且弹出“消息接收中”提示框(scancode_waitmsg)
                                requestMessage = new RequestMessageEvent_Scancode_Waitmsg();
                                break;

                            default://其他意外类型(也可以选择抛出异常)
                                requestMessage = new RequestMessageEventBase();
                                break;
                        }
                        break;

                    default:
                        throw new UnknownRequestMsgTypeException(string.Format("MsgType:{0} 在RequestMessageFactory中没有对应的处理程序!", msgType), new ArgumentOutOfRangeException());//为了能够对类型变动最大程度容错(如微信目前还可以对公众账号suscribe等未知类型,但API没有开放),建议在使用的时候catch这个异常
                }
                EntityHelper.FillEntityWithXml(requestMessage, doc);
            }
            catch (ArgumentException ex)
            {
                throw new WeixinException(string.Format("RequestMessage转换出错!可能是MsgType不存在!,XML:{0}", doc.ToString()), ex);
            }
            return requestMessage;
        }
Example #40
0
        public ResponseMessageBase GetResponseMessage(RequestMessageEventBase requestMessage)
        {
            UserProfile up = new UserProfile();
            var Buttons = up.Buttons;
            ResponseMessageBase responseMessage = null;
            switch (requestMessage.Event)
            {
                case Event.ENTER:
                    {
                        var strongResponseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>();
                        strongResponseMessage.Content = "您刚才发送了ENTER事件请求。";
                        responseMessage = strongResponseMessage;
                        break;
                    }
                case Event.LOCATION:
                    throw new Exception("暂不可用");
                //break;
                case Event.subscribe://订阅
                    {
                        var strongResponseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>();

                        //获取Senparc.Weixin.MP.dll版本信息
                        var fileVersionInfo = FileVersionInfo.GetVersionInfo(HttpContext.Current.Server.MapPath("~/bin/EasyWeixin.dll"));
                        var version = fileVersionInfo.FileVersion;
                        strongResponseMessage.Content = string.Format(
                            "欢迎关注【Senparc.Weixin.MP 微信公众平台SDK】,当前运行版本:v{0}。\r\n您还可以发送【位置】【图片】【语音】信息,查看不同格式的回复。\r\nSDK官方地址:http://weixin.senparc.com",
                            version);
                        responseMessage = strongResponseMessage;
                        break;
                    }
                case Event.unsubscribe://退订
                    {
                        //实际上用户无法收到非订阅账号的消息,所以这里可以随便写。
                        //unsubscribe事件的意义在于及时删除网站应用中已经记录的OpenID绑定,消除冗余数据。
                        var strongResponseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>();
                        strongResponseMessage.Content = "有空再来";
                        responseMessage = strongResponseMessage;
                        break;
                    }
                case Event.CLICK://菜单点击事件,根据自己需要修改
                    {
                        var strongResponseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>();
                        foreach (var Button in Buttons)
                        {
                            if (Button.SubButtons.Count == 0)
                            {
                                if (Button.key == requestMessage.EventKey)
                                {
                                }
                            }
                            else
                            {
                                foreach (var Subitem in Button.SubButtons)
                                {
                                    if (Subitem.key == requestMessage.EventKey)
                                    {
                                    }
                                }
                            }
                        }

                        //throw new Exception("Demo中还没有加入CLICK的测试!");
                        break;
                    }
                case Event.VIEW://菜单点击事件,根据自己需要修改
                    {
                        var strongResponseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>();
                        //requestMessage.EventKey

                        break;
                    }
                //break;
                default:
                    throw new ArgumentOutOfRangeException();
            }

            return responseMessage;
        }