コード例 #1
0
        /// <summary>
        /// 处理事件推送
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        protected virtual IWRespBase DoForRequest_Event(WReqEventBase request)
        {
            switch (request.Event)
            {
            case EventType.Subscribe: return(DoForRequest_Event_Subscribe(Request as WReqEventSubscribe));

            case EventType.UnSubscribe: return(DoForRequest_Event_Unsubscribe(Request as WReqEventUnSubscribe));

            case EventType.Scan: return(DoForRequest_Event_Scan(Request as WReqEventScan));

            case EventType.Location: return(DoForRequest_Event_Location(Request as WReqEventLocation));

            case EventType.Click: return(DoForRequest_Event_Click(Request as WReqEventClick));

            case EventType.View: return(DoForRequest_Event_View(Request as WReqEventView));

            case EventType.Masssendjobfinish: return(DoForRequest_Event_MasssendJobFinish(Request as WReqEventMasssendJobFinish));

            case EventType.Card: return(DoForRequest_Event_Card(Request as WReqEventCard));

            default: return(DoForRequest_Event_Undefine(request));
            }
        }
コード例 #2
0
        public ActionResult Post(string token, string signature, string timestamp, string nonce, string echostr)
        {
            WX_ApiConfig config = WXApiConfigServices.QueryByToKen(token);

            if (config == null || string.IsNullOrWhiteSpace(config.AppId) || string.IsNullOrWhiteSpace(config.AppSecret) ||
                string.IsNullOrWhiteSpace(config.Domain) || string.IsNullOrWhiteSpace(config.Token))
            {
                return(Content(string.Empty));
            }

            //接收数据
            //System.IO.StreamReader reader = new System.IO.StreamReader(Request.InputStream);
            //String xmlData = reader.ReadToEnd();
            //XElement xdoc = XElement.Parse(xmlData);

            //解析XML
            //var toUserName = xdoc.Element("ToUserName").Value;
            //var fromUserName = xdoc.Element("FromUserName").Value;
            //var createTime = xdoc.Element("CreateTime").Value;
            //string key = xdoc.Element("EventKey").Value;
            //var content = xdoc.Element("Ticket").Value;
            //DateTime datatime = DateTime.Now;
            //if (!string.IsNullOrEmpty(key))
            //{
            //userin User = wxApi.GetNickname(wxApi.GetToken(config.AppId, config.AppSecret).Accesstoken, fromUserName);
            //    string createSql = "insert into TgCount values('" + key + "','" + createTime + "','" + User.Nickname + "','" + toUserName + "','" + datatime + "')";
            //    using (DbOperator dboperator = ConnectionManager.CreateReadConnection())
            //    {
            //        dboperator.ExecuteNonQuery(createSql, 30000);
            //    }

            //}


            try
            {
                TxtLogServices.WriteTxtLogEx("Api_Post", "AppId:{0};AppSecret:{1};Domain:{2};Token:{3}", config.AppId, config.AppSecret, config.Domain, config.Token);
                if (!config.Status)
                {
                    return(Content("该公众账号暂停使用,请稍后再试!"));
                }
                if (!WxService.CheckSignature(config.Token, timestamp, nonce, signature))
                {
                    return(Content(string.Empty));
                }

                var conversation = new WeiXinConversation(token, Request.InputStream);
                try
                {
                    TxtLogServices.WriteTxtLogEx("Api_Post_Request", conversation.RequestDocument.ToString());

                    //执行微信处理过程
                    conversation.Execute();

                    if (conversation.ResponseDocument != null)
                    {
                        TxtLogServices.WriteTxtLogEx("Api_Post_Response", conversation.ResponseDocument.ToString());
                    }
                }
                catch (Exception ex)
                {
                    ExceptionsServices.AddExceptions(ex, "执行微信处理过程失败", LogFrom.WeiXin);
                    TxtLogServices.WriteTxtLogEx("Api_Post_Error", ex);

                    if (conversation.ResponseDocument != null)
                    {
                        TxtLogServices.WriteTxtLogEx("Api_Post_Error", conversation.ResponseDocument.ToString());
                    }
                }
                if (conversation.ResponseDocument != null)
                {
                    //如果是微信位置推送则不回复
                    if (conversation.Request.MsgType == WReqType.Event)
                    {
                        WReqEventBase wreqevent = conversation.Request as WReqEventBase;
                        if (wreqevent != null && wreqevent.Event == EventType.Location)
                        {
                            return(Content(string.Empty));
                        }
                    }
                    return(Content(conversation.ResponseDocument.ToString()));
                }
            }
            catch (Exception ex)
            {
                ExceptionsServices.AddExceptions(ex, "微信提交事件处理失败", LogFrom.WeiXin);
                TxtLogServices.WriteTxtLogEx("Api_Post_Error", ex);
            }


            return(Content(string.Empty));
        }
コード例 #3
0
 /// <summary>
 /// 处理事件推送--群发回执
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 protected virtual IWRespBase DoForRequest_Event_MasssendJobFinish(WReqEventBase request)
 {
     return(null);
 }
コード例 #4
0
 /// <summary>
 /// 处理事件推送--未定义
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 protected virtual IWRespBase DoForRequest_Event_Undefine(WReqEventBase request)
 {
     return(null);
 }
コード例 #5
0
        /// <summary>
        /// 执行微信请求
        /// </summary>
        public void Execute()
        {
            if (CancelExcute)
            {
                return;
            }

            OnExecuting();

            if (CancelExcute)
            {
                return;
            }


            if (Request == null)
            {
                return;
            }

            //重复推送信息处理,缓存回复30秒
            var key   = string.Format("xNet_Wx_Cache_{0}_{1}_{2}", Request.FromUserName, Request.CreateTime, Request.MsgId);
            var cache = HttpRuntime.Cache[key];

            if (cache != null)
            {
                Response = cache as IWRespBase;
                return;
            }
            try
            {
                var enterkey = CheckGetEnterKey();
                if (!string.IsNullOrWhiteSpace(enterkey))
                {
                    Response = DoForRequest_Enter(enterkey);
                }
                if (Response == null)
                {
                    switch (Request.MsgType)
                    {
                    case WReqType.Text:
                        var wReqText = Request as WReqText;
                        Response = DoForRequest_Text(wReqText);
                        break;

                    case WReqType.Location:
                        Response = DoForRequest_Location(Request as WReqLocation);
                        break;

                    case WReqType.Image:
                        Response = DoForRequest_Image(Request as WReqImage);
                        break;

                    case WReqType.Voice:
                        Response = DoForRequest_Voice(Request as WReqVoice);
                        break;

                    case WReqType.Link:
                        Response = DoForRequest_Link(Request as WReqLink);
                        break;

                    case WReqType.Video:
                        Response = DoForRequest_Video(Request as WReqVideo);
                        break;

                    case WReqType.Event:
                        Response = DoForRequest_Event(Request as WReqEventBase);
                        break;

                    default:
                        throw new Exception("未知的MsgType请求类型", null);
                    }
                }
                if (Response == null)
                {
                    bool needRequestDefault = true;
                    if (Request.MsgType == WReqType.Event)
                    {//上报地理位置 不需要默认回复
                        WReqEventBase wreqevent = Request as WReqEventBase;
                        if (wreqevent != null && wreqevent.Event == EventType.Location)
                        {
                            needRequestDefault = false;
                        }
                    }
                    if (needRequestDefault)
                    {
                        Response = DoForRequest_Default(Request as WReqBase);
                    }
                }
                if (Response != null)
                {
                    HttpRuntime.Cache.Insert(key, Response, null, DateTime.Now.AddSeconds(30), System.Web.Caching.Cache.NoSlidingExpiration);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Execute Root:" + ex.Message);
            }
            finally
            {
                OnExecuted();
            }
        }