Esempio n. 1
0
        /// <summary>
        /// 最简单的Page_Load写法(本方法仅用于演示过程,未实际使用到)
        /// </summary>
        private void MiniProcess()
        {
            var postModel = new PostModel()
            {
                Msg_Signature = Request.QueryString["msg_signature"],
                Timestamp     = Request.QueryString["timestamp"],
                Nonce         = Request.QueryString["nonce"],
                //以下保密信息不会(不应该)在网络上传播,请注意
                Token          = Token,
                EncodingAESKey = EncodingAESKey,
                CorpId         = CorpId,
            };

            var maxRecordCount = 10;

            //自定义MessageHandler,对微信请求的详细判断操作都在这里面。
            var messageHandler = new QyCustomMessageHandler(Request.InputStream, postModel, maxRecordCount);

            //执行微信处理过程
            messageHandler.Execute();
            //自动返回加密后结果
            WriteContent(messageHandler.FinalResponseDocument.ToString());//为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可

            Response.End();
        }
Esempio n. 2
0
        public ActionResult Post(PostModel postModel)
        {
            var maxRecordCount = 10;

            postModel.Token          = Token;
            postModel.EncodingAESKey = EncodingAESKey;
            postModel.CorpId         = CorpId;

            //自定义MessageHandler,对微信请求的详细判断操作都在这里面。
            var messageHandler = new QyCustomMessageHandler(Request.InputStream, postModel, maxRecordCount);

            //Logger.Log4Net.Info("lcid:" + ilcId.ToString());

            //EG.WeChat.Platform.BL.ISdkETS_QY pSdk = EG.WeChat.Platform.BL.QYSdkETS.Singleon;
            //var pfunc = pSdk.GetResConvertForResponse("news");
            //var pRes = pfunc(1069, "news");
            ////return pRes;

            //if (string.IsNullOrEmpty(TW.Platform.BL.QYSdkETS.Singleon.RHost))
            //    TW.Platform.BL.QYSdkETS.Singleon.RHost = this.Request.Url.Host;
            //var messageHandler = VerifyRequest(postModel, maxRecordCount);

            if (messageHandler.RequestMessage == null)
            {
                //验证不通过或接受信息有错误
                return(Content("驗證錯誤"));
            }

            try
            {
                //测试时可开启此记录,帮助跟踪数据,使用前请确保App_Data文件夹存在,且有读写权限。
                messageHandler.RequestDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Request_" + messageHandler.RequestMessage.FromUserName + ".txt"));
                //执行微信处理过程
                messageHandler.Execute();
                //测试时可开启,帮助跟踪数据
                messageHandler.ResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Response_" + messageHandler.ResponseMessage.ToUserName + ".txt"));
                messageHandler.FinalResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_FinalResponse_" + messageHandler.ResponseMessage.ToUserName + ".txt"));

                //自动返回加密后结果
                return(new FixWeixinBugWeixinResult(messageHandler));//为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可
            }
            catch (Exception ex)
            {
                using (TextWriter tw = new StreamWriter(Server.MapPath("~/App_Data/Qy_Error_" + DateTime.Now.Ticks + ".txt")))
                {
                    tw.WriteLine("ExecptionMessage:" + ex.Message);
                    tw.WriteLine(ex.Source);
                    tw.WriteLine(ex.StackTrace);
                    //tw.WriteLine("InnerExecptionMessage:" + ex.InnerException.Message);

                    if (messageHandler.FinalResponseDocument != null)
                    {
                        tw.WriteLine(messageHandler.FinalResponseDocument.ToString());
                    }
                    tw.Flush();
                    tw.Close();
                }
                return(Content(""));
            }
        }
Esempio n. 3
0
        public ActionResult Post(PostModel postModel)
        {
            //没有参数,带有id才能知道是访问哪个公众号
            if (string.IsNullOrEmpty(Request["id"]))
            {
                return(new WeixinResult("非法路径请求!"));
            }

            var maxRecordCount = 10;

            WC_OfficalAccountsModel model = account_BLL.GetById(Request["id"]);

            postModel.CorpId         = model.AppId;
            postModel.EncodingAESKey = model.OfficalKey;
            postModel.Token          = model.Token;
            //自定义MessageHandler,对微信请求的详细判断操作都在这里面。
            var messageHandler = new QyCustomMessageHandler(Request.InputStream, postModel, model.Id, maxRecordCount);

            if (messageHandler.RequestMessage == null)
            {
                //验证不通过或接受信息有错误
            }

            try
            {
                //测试时可开启此记录,帮助跟踪数据,使用前请确保App_Data文件夹存在,且有读写权限。
                messageHandler.RequestDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Request_" + messageHandler.RequestMessage.FromUserName + ".txt"));
                //执行微信处理过程
                messageHandler.Execute();
                //测试时可开启,帮助跟踪数据
                messageHandler.ResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Response_" + messageHandler.ResponseMessage.ToUserName + ".txt"));
                messageHandler.FinalResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_FinalResponse_" + messageHandler.ResponseMessage.ToUserName + ".txt"));

                //自动返回加密后结果
                return(new FixWeixinBugWeixinResult(messageHandler));//为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可
            }
            catch (Exception ex)
            {
                using (TextWriter tw = new StreamWriter(Server.MapPath("~/App_Data/Qy_Error_" + DateTime.Now.Ticks + ".txt")))
                {
                    tw.WriteLine("ExecptionMessage:" + ex.Message);
                    tw.WriteLine(ex.Source);
                    tw.WriteLine(ex.StackTrace);
                    //tw.WriteLine("InnerExecptionMessage:" + ex.InnerException.Message);

                    if (messageHandler.FinalResponseDocument != null)
                    {
                        tw.WriteLine(messageHandler.FinalResponseDocument.ToString());
                    }
                    tw.Flush();
                    tw.Close();
                }
                return(Content(""));
            }
        }
Esempio n. 4
0
        public ActionResult MiniPost(PostModel postModel)
        {
            var maxRecordCount = 10;

            postModel.Token = Token;
            postModel.EncodingAESKey = EncodingAESKey;
            postModel.CorpId = CorpId;

            //自定义MessageHandler,对微信请求的详细判断操作都在这里面。
            var messageHandler = new QyCustomMessageHandler(Request.InputStream, postModel, maxRecordCount);
            //执行微信处理过程
            messageHandler.Execute();
            //自动返回加密后结果
            return new FixWeixinBugWeixinResult(messageHandler);
        }
Esempio n. 5
0
        public ActionResult Post(PostModel postModel)
        {
            var maxRecordCount = 10;

            postModel.Token = Token;
            postModel.EncodingAESKey = EncodingAESKey;
            postModel.CorpId = CorpId;

            //自定义MessageHandler,对微信请求的详细判断操作都在这里面。
            var messageHandler = new QyCustomMessageHandler(Request.InputStream, postModel, maxRecordCount);

            if (messageHandler.RequestMessage == null)
            {
                //验证不通过或接受信息有错误
            }

            try
            {
                //测试时可开启此记录,帮助跟踪数据,使用前请确保App_Data文件夹存在,且有读写权限。
                messageHandler.RequestDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Request_" + messageHandler.RequestMessage.FromUserName + ".txt"));
                //执行微信处理过程
                messageHandler.Execute();
                //测试时可开启,帮助跟踪数据
                messageHandler.ResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Response_" + messageHandler.ResponseMessage.ToUserName + ".txt"));
                messageHandler.FinalResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_FinalResponse_" + messageHandler.ResponseMessage.ToUserName + ".txt"));

                //自动返回加密后结果
                return new FixWeixinBugWeixinResult(messageHandler);//为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可
            }
            catch (Exception ex)
            {
                using (TextWriter tw = new StreamWriter(Server.MapPath("~/App_Data/Qy_Error_" + DateTime.Now.Ticks + ".txt")))
                {
                    tw.WriteLine("ExecptionMessage:" + ex.Message);
                    tw.WriteLine(ex.Source);
                    tw.WriteLine(ex.StackTrace);
                    //tw.WriteLine("InnerExecptionMessage:" + ex.InnerException.Message);

                    if (messageHandler.FinalResponseDocument != null)
                    {
                        tw.WriteLine(messageHandler.FinalResponseDocument.ToString());
                    }
                    tw.Flush();
                    tw.Close();
                }
                return Content("");
            }
        }
Esempio n. 6
0
        public ActionResult MiniPost(PostModel postModel)
        {
            var maxRecordCount = 10;

            postModel.Token          = Token;
            postModel.EncodingAESKey = EncodingAESKey;
            postModel.CorpId         = CorpId;

            //自定义MessageHandler,对微信请求的详细判断操作都在这里面。
            var messageHandler = new QyCustomMessageHandler(Request.InputStream, postModel, maxRecordCount);

            //执行微信处理过程
            messageHandler.Execute();
            //自动返回加密后结果
            return(new FixWeixinBugWeixinResult(messageHandler));
        }
Esempio n. 7
0
        public ActionResult Post(PostModel postModel)
        {
            var maxRecordCount = 10;

            postModel.Token          = Token;
            postModel.EncodingAESKey = EncodingAESKey;
            postModel.CorpId         = CorpId;

            //自定义MessageHandler,对微信请求的详细判断操作都在这里面。
            var messageHandler = new QyCustomMessageHandler(Request.InputStream, postModel, maxRecordCount);

            messageHandler.Execute();
            var a = new FixWeixinBugWeixinResult(messageHandler);

            return(a);//为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可
        }
Esempio n. 8
0
        /// <summary>
        /// 验证请求,并获取消息处理方法
        /// </summary>
        /// <param name="postModel"></param>
        /// <param name="maxRecordCount"></param>
        /// <returns></returns>
        private QyCustomMessageHandler VerifyRequest(PostModel postModel, int maxRecordCount)
        {
            QyCustomMessageHandler pqy = null;

            foreach (var corp in EG.WeChat.Utility.WeiXin.WeiXinConfiguration.corpInfos)
            {
                postModel.Token          = corp.token;
                postModel.EncodingAESKey = corp.aeskey;
                postModel.CorpId         = EG.WeChat.Utility.WeiXin.WeiXinConfiguration.cropId;

                pqy = new QyCustomMessageHandler(Request.InputStream, postModel, maxRecordCount);
                if (pqy.RequestMessage != null)
                {
                    break;
                }
            }
            return(pqy);
        }
Esempio n. 9
0
        public ActionResult Post(PostModel postModel, bool isDebug = false)
        {
            var maxRecordCount = 10;

            log.Debug("Entering WeChat Post ");

            Stream s = System.Web.HttpContext.Current.Request.InputStream;

            byte[] b = new byte[s.Length];
            s.Read(b, 0, (int)s.Length);
            var postStr = Encoding.UTF8.GetString(b);

            log.Debug("content-type: " + Request.ContentType);
            log.Debug("raw data: " + postStr);
            log.Debug("raw url: " + Request.RawUrl);

            QyCustomMessageHandler messageHandler = null;

            //var iAppID = int.Parse(Request["AppID"] ?? "1");
            try
            {
                var objConfig = WeChatCommonService.GetWeChatConfig();

                postModel.Token          = objConfig.WeixinToken;          // Token;
                postModel.EncodingAESKey = objConfig.WeixinEncodingAESKey; // EncodingAESKey;
                postModel.CorpId         = objConfig.WeixinCorpId;         // CorpId;
            }
            catch (Exception ex)
            {
                log.Error(ex, "CommonService.GetWeChatConfig - Exception: " + ex.Message);
            }

            try
            {
                log.Debug("weixin maxRecordCount2: " + maxRecordCount);
                //自定义MessageHandler,对微信请求的详细判断操作都在这里面。
                messageHandler = new QyCustomMessageHandler(Request.InputStream, postModel, maxRecordCount, isDebug);



                log.Debug("messageHandler.RequestMessage : " + messageHandler.RequestMessage);

                if (messageHandler.RequestMessage == null)
                {
                    log.Debug("messageHandler.RequestMessage is null");
                    //验证不通过或接受信息有错误
                }

                //messageHandler.RequestDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Request_" + messageHandler.RequestMessage.FromUserName + ".txt"));
                //执行微信处理过程
                messageHandler.Execute();
                //测试时可开启,帮助跟踪数据
                //messageHandler.ResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Response_" + messageHandler.ResponseMessage.ToUserName + ".txt"));
                //messageHandler.FinalResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_FinalResponse_" + messageHandler.ResponseMessage.ToUserName + ".txt"));

                if (isDebug)
                {
                    // messageHandler.FinalResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_FinalResponse_" + messageHandler.ResponseMessage.ToUserName + ".txt"));

                    log.Debug("messageHandler.ResponseMessage : " + messageHandler.FinalResponseDocument.Document.ToString());
                }

                //自动返回加密后结果
                return(new FixWeixinBugWeixinResult(messageHandler));
            }
            catch (Exception ex)
            {
                log.Error(ex, "执行微信处理过程 - Exception: " + ex.Message);
                if (messageHandler != null)
                {
                    log.Error("执行微信处理过程 - Request: " + messageHandler.RequestDocument.ToString());
                    log.Error("执行微信处理过程 - Response: " + messageHandler.FinalResponseDocument.ToString());
                }
            }
            return(Content(""));
        }
Esempio n. 10
0
        public static readonly string CorpId         = "wx9b25d5460920c234";                          //与微信企业账号后台的EncodingAESKey设置保持一致,区分大小写。

        protected void Page_Load(object sender, EventArgs e)
        {
            string msg_signature = Request["msg_signature"] ?? "";
            string timestamp     = Request["timestamp"] ?? "";
            string nonce         = Request["nonce"] ?? "";
            string echostr       = Request["echostr"] ?? "";

            if (Request.HttpMethod == "GET")
            {
                //get method - 仅在微信后台填写URL验证时触发

                var verifyUrl = QY.Signature.VerifyURL(Token, EncodingAESKey, CorpId, msg_signature, timestamp, nonce, echostr);
                if (verifyUrl != null)
                {
                    WriteContent(verifyUrl); //返回解密后的随机字符串则表示验证通过
                }
                else
                {
                    WriteContent("如果你在浏览器中看到这句话,说明此地址可以被作为微信公众账号后台的Url,请注意保持Token一致。");
                }

                Response.End();
            }
            else
            {
                //post method - 当有用户想公众账号发送消息时触发
                var postModel = new PostModel()
                {
                    Msg_Signature = Request.QueryString["msg_signature"],
                    Timestamp     = Request.QueryString["timestamp"],
                    Nonce         = Request.QueryString["nonce"],
                    //以下保密信息不会(不应该)在网络上传播,请注意
                    Token          = Token,
                    EncodingAESKey = EncodingAESKey,
                    CorpId         = CorpId,
                };

                var maxRecordCount = 10;
                //自定义MessageHandler,对微信请求的详细判断操作都在这里面。
                var messageHandler = new QyCustomMessageHandler(Request.InputStream, postModel, maxRecordCount);

                if (messageHandler.RequestMessage == null)
                {
                    //验证不通过或接受信息有错误
                }

                try
                {
                    //测试时可开启此记录,帮助跟踪数据,使用前请确保App_Data文件夹存在,且有读写权限。
                    messageHandler.RequestDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Request_" + messageHandler.RequestMessage.FromUserName + ".txt"));
                    //执行微信处理过程
                    messageHandler.Execute();
                    //测试时可开启,帮助跟踪数据
                    messageHandler.ResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Response_" + messageHandler.ResponseMessage.ToUserName + ".txt"));
                    messageHandler.FinalResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_FinalResponse_" + messageHandler.ResponseMessage.ToUserName + ".txt"));

                    //自动返回加密后结果
                    WriteContent(messageHandler.FinalResponseDocument.ToString());//为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可
                }
                catch (Exception ex)
                {
                    using (TextWriter tw = new StreamWriter(Server.MapPath("~/App_Data/Qy_Error_" + DateTime.Now.Ticks + ".txt")))
                    {
                        tw.WriteLine("ExecptionMessage:" + ex.Message);
                        tw.WriteLine(ex.Source);
                        tw.WriteLine(ex.StackTrace);
                        //tw.WriteLine("InnerExecptionMessage:" + ex.InnerException.Message);

                        if (messageHandler.FinalResponseDocument != null)
                        {
                            tw.WriteLine(messageHandler.FinalResponseDocument.ToString());
                        }
                        tw.Flush();
                        tw.Close();
                    }
                }
                finally
                {
                    Response.End();
                }
            }
        }
Esempio n. 11
0
        public static readonly string CorpId = "wx7618c0a6d9358622";//与微信企业账号后台的EncodingAESKey设置保持一致,区分大小写。

        protected void Page_Load(object sender, EventArgs e)
        {
            string msg_signature = Request["msg_signature"];
            string timestamp = Request["timestamp"];
            string nonce = Request["nonce"];
            string echostr = Request["echostr"];

            if (Request.HttpMethod == "GET")
            {
                //get method - 仅在微信后台填写URL验证时触发

                var verifyUrl = QY.Signature.VerifyURL(Token, EncodingAESKey, CorpId, msg_signature, timestamp, nonce,
                    echostr);
                if (verifyUrl != null)
                {
                    WriteContent(verifyUrl); //返回解密后的随机字符串则表示验证通过
                }
                else
                {
                    WriteContent("如果你在浏览器中看到这句话,说明此地址可以被作为微信公众账号后台的Url,请注意保持Token一致。");
                }

                Response.End();
            }
            else
            {
                //post method - 当有用户想公众账号发送消息时触发
                var postModel = new PostModel()
                {
                    Msg_Signature = Request.QueryString["msg_signature"],
                    Timestamp = Request.QueryString["timestamp"],
                    Nonce = Request.QueryString["nonce"],
                    //以下保密信息不会(不应该)在网络上传播,请注意
                    Token = Token,
                    EncodingAESKey = EncodingAESKey,
                    CorpId = CorpId,
                };

                var maxRecordCount = 10;
                //自定义MessageHandler,对微信请求的详细判断操作都在这里面。
                var messageHandler = new QyCustomMessageHandler(Request.InputStream, postModel, maxRecordCount);

                if (messageHandler.RequestMessage == null)
                {
                    //验证不通过或接受信息有错误
                }

                try
                {
                    //测试时可开启此记录,帮助跟踪数据,使用前请确保App_Data文件夹存在,且有读写权限。
                    messageHandler.RequestDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Request_" + messageHandler.RequestMessage.FromUserName + ".txt"));
                    //执行微信处理过程
                    messageHandler.Execute();
                    //测试时可开启,帮助跟踪数据
                    messageHandler.ResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Response_" + messageHandler.ResponseMessage.ToUserName + ".txt"));
                    messageHandler.FinalResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_FinalResponse_" + messageHandler.ResponseMessage.ToUserName + ".txt"));

                    //自动返回加密后结果
                    WriteContent(messageHandler.FinalResponseDocument.ToString());//为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可
                }
                catch (Exception ex)
                {
                    using (TextWriter tw = new StreamWriter(Server.MapPath("~/App_Data/Qy_Error_" + DateTime.Now.Ticks + ".txt")))
                    {
                        tw.WriteLine("ExecptionMessage:" + ex.Message);
                        tw.WriteLine(ex.Source);
                        tw.WriteLine(ex.StackTrace);
                        //tw.WriteLine("InnerExecptionMessage:" + ex.InnerException.Message);

                        if (messageHandler.FinalResponseDocument != null)
                        {
                            tw.WriteLine(messageHandler.FinalResponseDocument.ToString());
                        }
                        tw.Flush();
                        tw.Close();
                    }
                }
                finally
                {
                    Response.End();
                }
            }
        }
Esempio n. 12
0
        /// <summary>
        /// 最简单的Page_Load写法(本方法仅用于演示过程,未实际使用到)
        /// </summary>
        private void MiniProcess()
        {
            var postModel = new PostModel()
            {
                Msg_Signature = Request.QueryString["msg_signature"],
                Timestamp = Request.QueryString["timestamp"],
                Nonce = Request.QueryString["nonce"],
                //以下保密信息不会(不应该)在网络上传播,请注意
                Token = Token,
                EncodingAESKey = EncodingAESKey,
                CorpId = CorpId,
            };

            var maxRecordCount = 10;

            //自定义MessageHandler,对微信请求的详细判断操作都在这里面。
            var messageHandler = new QyCustomMessageHandler(Request.InputStream, postModel, maxRecordCount);
            //执行微信处理过程
            messageHandler.Execute();
            //自动返回加密后结果
            WriteContent(messageHandler.FinalResponseDocument.ToString());//为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可

            Response.End();
        }
Esempio n. 13
0
        public ActionResult Post(PostModel postModel)
        {
            var maxRecordCount = 10;

            postModel.Token          = Token;
            postModel.EncodingAESKey = EncodingAESKey;
            postModel.CorpId         = SuiteId;

            //自定义MessageHandler,对微信请求的详细判断操作都在这里面。
            var messageHandler = new QyCustomMessageHandler(Request.InputStream, postModel, maxRecordCount);

            if (messageHandler.RequestMessage == null)
            {
                //验证不通过或接受信息有错误
            }

            try
            {
                //测试时可开启此记录,帮助跟踪数据,使用前请确保App_Data文件夹存在,且有读写权限。
                messageHandler.RequestDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Request_" + messageHandler.RequestMessage.FromUserName + ".txt"));
                //执行微信处理过程
                messageHandler.Execute();
                //测试时可开启,帮助跟踪数据

                if (!string.IsNullOrEmpty(messageHandler.TextResponseMessage))
                {
                    //messageHandler.ResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Response_" + messageHandler.ResponseMessage.ToUserName + ".txt"));
                    var responseText = messageHandler.TextResponseMessage;
                    using (StreamWriter sw = new StreamWriter(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Response_" + messageHandler.ResponseMessage.ToUserName + ".txt"), true))
                    {
                        sw.Write(responseText);
                    }

                    if (messageHandler.FinalResponseDocument != null)
                    {
                        //messageHandler.FinalResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_FinalResponse_" + messageHandler.ResponseMessage.ToUserName + ".txt"));
                        using (StreamWriter sw = new StreamWriter(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Response_" + messageHandler.ResponseMessage.ToUserName + ".txt"), true))
                        {
                            sw.Write(messageHandler.FinalResponseDocument.ToString());
                        }
                    }
                }

                //自动返回加密后结果
                return(new FixWeixinBugWeixinResult(messageHandler));//为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可
            }
            catch (Exception ex)
            {
                using (TextWriter tw = new StreamWriter(Server.MapPath("~/App_Data/Qy_Error_" + DateTime.Now.Ticks + ".txt")))
                {
                    tw.WriteLine("ExecptionMessage:" + ex.Message);
                    tw.WriteLine(ex.Source);
                    tw.WriteLine(ex.StackTrace);
                    //tw.WriteLine("InnerExecptionMessage:" + ex.InnerException.Message);

                    if (messageHandler.FinalResponseDocument != null)
                    {
                        tw.WriteLine(messageHandler.FinalResponseDocument.ToString());
                    }
                    tw.Flush();
                    tw.Close();
                }
                return(Content(""));
            }
        }
Esempio n. 14
0
        public ActionResult Post(PostModel postModel)
        {
            var maxRecordCount = 0;

            postModel.Token = Token;
            postModel.EncodingAESKey = EncodingAESKey;
            postModel.CorpId = CorpId;

            //自定义MessageHandler,对微信请求的详细判断操作都在这里面。
            var messageHandler = new QyCustomMessageHandler(Request.InputStream, postModel, maxRecordCount);

            if (messageHandler.RequestMessage == null)
            {
                //验证不通过或接受信息有错误
                string querystr = "\r\n";
                Error error = new Error();
                error.Message = "post对象";
                error.HostName = Request.Url.Host;
                error.StatusCode = 100;
                error.Time = DateTime.Now;
                error.User = Environment.UserName;
                error.Type = "post ";
                error.Detail = "yanzheng ,创建一个Elmah的Error对象并写错误日志 但没有Server Variables,cookie等信息" + querystr;
                error.Source = "Page_Load";
                Elmah.ErrorLog.Default.Log(error);

                //创建一个异常并写入错误日志,无法自定义错误的类型
                Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception("创建一个异常并写入错误日志" + querystr));

            }

            try
            {
                //测试时可开启此记录,帮助跟踪数据,使用前请确保App_Data文件夹存在,且有读写权限。
                //messageHandler.RequestDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Request_" + messageHandler.RequestMessage.FromUserName + ".txt"));
                //执行微信处理过程
                messageHandler.Execute();
                //测试时可开启,帮助跟踪数据
                //messageHandler.ResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Response_" + messageHandler.ResponseMessage.ToUserName + ".txt"));
                //messageHandler.FinalResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_FinalResponse_" + messageHandler.ResponseMessage.ToUserName + ".txt"));

                string querystr = "\r\n";
                Error error = new Error();
                error.Message = "post对象";
                error.HostName = Request.Url.Host;
                error.StatusCode = 100;
                error.Time = DateTime.Now;
                error.User = Environment.UserName;
                error.Type = "post ";

                querystr += "messageHandler.RequestMessage.FromUserName:"******",messageHandler.ResponseMessage.ToUserName:"******"THIS IS TEST  ,创建一个Elmah的Error对象并写错误日志 但没有Server Variables,cookie等信息" + querystr;
                error.Source = "Page_Load";
                Elmah.ErrorLog.Default.Log(error);

                //创建一个异常并写入错误日志,无法自定义错误的类型
                Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception("创建一个异常并写入错误日志" + querystr));

                //自动返回加密后结果
                return new FixWeixinBugWeixinResult(messageHandler);//为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可
            }
            catch (Exception ex)
            {

            #if A
                using (TextWriter tw = new StreamWriter(Server.MapPath("~/App_Data/Qy_Error_" + DateTime.Now.Ticks + ".txt")))
                {
                    tw.WriteLine("ExecptionMessage:" + ex.Message);
                    tw.WriteLine(ex.Source);
                    tw.WriteLine(ex.StackTrace);
                    //tw.WriteLine("InnerExecptionMessage:" + ex.InnerException.Message);

                    if (messageHandler.FinalResponseDocument != null)
                    {
                        tw.WriteLine(messageHandler.FinalResponseDocument.ToString());
                    }
                    tw.Flush();
                    tw.Close();
                }

            #else
                string querystr = "\r\n";
                Error error = new Error();
                error.Message = "post对象";
                error.HostName = Request.Url.Host;
                error.StatusCode = 100;
                error.Time = DateTime.Now;
                error.User = Environment.UserName;
                error.Type = "post ";

                querystr += ex.Message;

                error.Detail = "THIS IS TEST  ,创建一个Elmah的Error对象并写错误日志 但没有Server Variables,cookie等信息" + querystr;
                error.Source = "Page_Load";
                Elmah.ErrorLog.Default.Log(error);

                //创建一个异常并写入错误日志,无法自定义错误的类型
                Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception("创建一个异常并写入错误日志" + querystr));

            #endif
                return Content("");
            }
        }
        public ActionResult Post(PostModel postModel, bool isDebug = false)
        {
            var maxRecordCount = 10;

            log.Debug("Entering WeChat Post ");

            QyCustomMessageHandler messageHandler = null;

            //var iAppID = int.Parse(Request["AppID"] ?? "1");
            //try
            //{
            //    var objConfig = WeChatCommonService.GetWeChatConfig(int.Parse(WebConfigurationManager.AppSettings["WeixinAppId"]));

            //    postModel.Token = objConfig.WeixinToken;// Token;
            //    postModel.EncodingAESKey = objConfig.WeixinEncodingAESKey;// EncodingAESKey;
            //    postModel.CorpId = objConfig.WeixinCorpId;// CorpId;
            //}
            //catch (Exception ex)
            //{
            //    log.Error(ex, "CommonService.GetWeChatConfig - Exception: " + ex.Message);
            //}

            try
            {
                log.Debug("weixin maxRecordCount2: " + maxRecordCount);
                //自定义MessageHandler,对微信请求的详细判断操作都在这里面。
                messageHandler = new QyCustomMessageHandler(Request.InputStream, postModel, maxRecordCount, isDebug);

                log.Debug("messageHandler.RequestMessage : " + messageHandler.RequestMessage);

                if (messageHandler.RequestMessage == null)
                {
                    log.Debug("messageHandler.RequestMessage is null");
                    //验证不通过或接受信息有错误
                }
                //messageHandler.RequestDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Request_" + messageHandler.RequestMessage.FromUserName + ".txt"));
                //执行微信处理过程
                messageHandler.Execute();
                //测试时可开启,帮助跟踪数据
                //messageHandler.ResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Response_" + messageHandler.ResponseMessage.ToUserName + ".txt"));
                //messageHandler.FinalResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_FinalResponse_" + messageHandler.ResponseMessage.ToUserName + ".txt"));
                _requestMsgLog.WriteRequestLog(messageHandler.RequestMessage, postModel.AppId);

                if (isDebug)
                {
                    // messageHandler.FinalResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_FinalResponse_" + messageHandler.ResponseMessage.ToUserName + ".txt"));
                    foreach (var a in messageHandler.ResponseMessage)
                    {
                        var strXML = messageHandler.ResponseDocument(a as ResponseMessageBaseWechat).ToString(SaveOptions.OmitDuplicateNamespaces);
                        log.Debug("messageHandler.ResponseMessage : " + strXML);
                    }
                }
                _requestMsgLog.WriteResponseLog(messageHandler.ResponseMessage, postModel.AppId);
                //自动返回加密后结果
                return(new FixWeixinBugWeixinResult(messageHandler));
            }
            catch (Exception ex)
            {
                log.Error(ex, "执行微信处理过程 - Exception: " + ex.Message);
                if (messageHandler != null)
                {
                    log.Error("执行微信处理过程 - Request: " + messageHandler.RequestDocument.ToString());
                    foreach (var a in messageHandler.ResponseMessage)
                    {
                        var strXML = messageHandler.ResponseDocument(a as ResponseMessageBaseWechat).ToString(SaveOptions.OmitDuplicateNamespaces);
                        log.Debug("执行微信处理过程 - Response : " + strXML);
                    }
                }
            }
            return(Content(""));
        }