public async Task <ActionResult> Post(PostModel postModel) { GzhCfg gzh = dp2WeiXinService.Instance._gzhContainer.GetDefault(); if (string.IsNullOrEmpty(postModel.AppId) == false) { gzh = dp2WeiXinService.Instance._gzhContainer.GetByAppId(postModel.AppId); dp2WeiXinService.Instance.WriteErrorLog("惊喜post中有appId=" + postModel.AppId); } if (gzh == null) { string tempError = "Post未找到公众号[" + postModel.AppId + "]的配置信息。"; dp2WeiXinService.Instance.WriteErrorLog(tempError); return(new WeixinResult(tempError)); } // 本机调试注掉 if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, gzh.token)) { return(Content("参数错误!")); } // 开始时间 DateTime start_time = DateTime.Now; //与公众后台的设置保持一致 postModel.AppId = gzh.appId; postModel.Token = gzh.token; postModel.EncodingAESKey = gzh.encodingAESKey; //v4.2.2之后的版本,可以设置每个人上下文消息储存的最大数量,防止内存占用过多,如果该参数小于等于0,则不限制 var maxRecordCount = 10; // 日志总目录,使用前请确保App_Data文件夹存在,且有读写权限。 var logDir = dp2WeiXinService.Instance._weiXinLogDir; //自定义MessageHandler,对微信请求的详细判断操作都在这里面。 dp2weixinMessageHandler messageHandler = new dp2weixinMessageHandler(Request.InputStream, postModel, maxRecordCount); try { //dp2WeiXinService.Instance.WriteDebug("执行前"); //CancellationToken cancellationToken = new CancellationToken(); //await messageHandler.ExecuteAsync(cancellationToken); // 2020-3-9 必须得用同步函数,用异常函数,只返回default消息。 messageHandler.Execute();//执行微信处理过程(关键) //dp2WeiXinService.Instance.WriteDebug("执行后"); return(new WeixinResult(messageHandler)); ////执行微信处理过程 //CancellationToken cancellationToken = new CancellationToken(); //await messageHandler.ExecuteAsync(cancellationToken); //// 计算处理消息用了多少时间 //TimeSpan time_length = DateTime.Now - start_time; //string strMsgContext = ""; //if (messageHandler.RequestMessage is RequestMessageText) // strMsgContext = ((RequestMessageText)messageHandler.RequestMessage).Content; // 点一下菜单也是一个event消息,太频繁了,没必要写日志了。2020-2-6 /* * string info = "处理[" + messageHandler.RequestMessage.CreateTime + "-" + messageHandler.RequestMessage.MsgType.ToString() + "-" + messageHandler.RequestMessage.FromUserName + "-" + strMsgContext + "]消息,time span: " + time_length.TotalSeconds.ToString() + " secs"; + if (time_length.TotalSeconds > 5) + { + info = "请求超时:" + info; + dp2WeiXinService.Instance.WriteErrorLog(info); + } + else + { + dp2WeiXinService.Instance.WriteDebug(info); + } */ //// 如果消息是空内容,直接返回空,这样微信就不是重试了,用于 用户请求书目详细消息,公众号以客户消息返回 //if (messageHandler.ResponseMessage is ResponseMessageText) //{ // var mess = (ResponseMessageText)messageHandler.ResponseMessage; // if (String.IsNullOrEmpty(mess.Content) == true) // { // return Content(""); // } //} //return new WeixinResult(messageHandler.TextResponseMessage);// ResponseMessage);//v0.8+ } catch (Exception ex) { string error = "ExecptionMessage:" + ex.Message + "\n"; error += ex.Source + "\n"; error += ex.StackTrace + "\n"; if (ex.InnerException != null) { error += "========= InnerException =========" + "\n";; error += ex.InnerException.Message + "\n";; error += ex.InnerException.Source + "\n";; error += ex.InnerException.StackTrace + "\n";; } //将程序运行中发生的错误记录到日志 dp2WeiXinService.Instance.WriteErrorLog(error); // 返回error信息 return(new WeixinResult(error)); } }
public ActionResult Post(PostModel postModel) { GzhCfg gzh = dp2WeiXinService.Instance.gzhContainer.GetDefault(); if (string.IsNullOrEmpty(postModel.AppId) == false) { gzh = dp2WeiXinService.Instance.gzhContainer.GetByAppId(postModel.AppId); dp2WeiXinService.Instance.WriteErrorLog1("惊喜post中有appId=" + postModel.AppId); } if (gzh == null) { string tempError = "Post未找到公众号[" + postModel.AppId + "]的配置信息。"; dp2WeiXinService.Instance.WriteErrorLog1(tempError); return(new WeixinResult(tempError)); } // 本机调试注掉 if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, gzh.token)) { return(Content("参数错误!")); } //string appId = dp2WeiXinService.Instance.gzhContainer.GetDefault().appId; //postModel.AppId = appId; // 开始时间 DateTime start_time = DateTime.Now; //与公众后台的设置保持一致 postModel.AppId = gzh.appId; postModel.Token = gzh.token; postModel.EncodingAESKey = gzh.encodingAESKey; //v4.2.2之后的版本,可以设置每个人上下文消息储存的最大数量,防止内存占用过多,如果该参数小于等于0,则不限制 var maxRecordCount = 10; // 日志总目录,使用前请确保App_Data文件夹存在,且有读写权限。 var logDir = dp2WeiXinService.Instance.weiXinLogDir; //// 当日日志目录,用于详细输出消息 //var logToday =string.Format(logDir + "/{0}/", DateTime.Now.ToString("yyyy-MM-dd")); //if (!Directory.Exists(logToday)) //{ // Directory.CreateDirectory(logToday); //} //自定义MessageHandler,对微信请求的详细判断操作都在这里面。 var messageHandler = new dp2weixinMessageHandler(Request.InputStream, postModel, maxRecordCount); try { ////测试时可开启此记录,帮助跟踪数据 //string id=_getRandomFileName(); //string tempPath = Path.Combine(logToday, string.Format("{0}_Request_{1}.txt", id, messageHandler.RequestMessage.FromUserName)); //messageHandler.RequestDocument.Save(tempPath); //if (messageHandler.UsingEcryptMessage) //{ // tempPath = Path.Combine(logToday, string.Format("{0}_Request_Ecrypt_{1}.txt", id, messageHandler.RequestMessage.FromUserName)); // messageHandler.EcryptRequestDocument.Save(tempPath); //} /* 如果需要添加消息去重功能,只需打开OmitRepeatedMessage功能,SDK会自动处理。 * 收到重复消息通常是因为微信服务器没有及时收到响应,会持续发送2-5条不等的相同内容的RequestMessage*/ //messageHandler.OmitRepeatedMessage = true; //执行微信处理过程 messageHandler.Execute(); //////测试时可开启,帮助跟踪数据 //if (messageHandler.ResponseDocument != null) //{ // //tempPath = Path.Combine(logToday, string.Format("{0}_Response_{1}.txt", id, messageHandler.RequestMessage.FromUserName)); // string path = dp2WeiXinService.Instance.weiXinDataDir+"/test.txt"; // messageHandler.ResponseDocument.Save(path); //} //if (messageHandler.UsingEcryptMessage) //{ // //记录加密后的响应信息 // tempPath = Path.Combine(logToday, string.Format("{0}_Response_Final_{1}.txt", id, messageHandler.RequestMessage.FromUserName)); // messageHandler.FinalResponseDocument.Save(tempPath); //} //return Content(messageHandler.ResponseDocument.ToString());//v0.7- //return new FixWeixinBugWeixinResult(messageHandler);//为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可 // 测试异常 //throw new Exception("test"); // 计算处理消息用了多少时间 TimeSpan time_length = DateTime.Now - start_time; string strMsgContext = ""; if (messageHandler.RequestMessage is RequestMessageText) { strMsgContext = ((RequestMessageText)messageHandler.RequestMessage).Content; } string info = "处理[" + messageHandler.RequestMessage.CreateTime + "-" + messageHandler.RequestMessage.MsgType.ToString() + "-" + strMsgContext + "]消息,time span: " + time_length.TotalSeconds.ToString() + " secs"; if (time_length.TotalSeconds > 5) { info = "请求超时:" + info; dp2WeiXinService.Instance.WriteLog1(info); } else { dp2WeiXinService.Instance.WriteLog3(info); } // 发送客服消息 //messageHandler.SendCustomeMessage(info); // 如果消息是空内容,直接返回空,这样微信就不是重试了,用于 用户请求书目详细消息,公众号以客户消息返回 if (messageHandler.ResponseMessage is ResponseMessageText) { var mess = (ResponseMessageText)messageHandler.ResponseMessage; if (String.IsNullOrEmpty(mess.Content) == true) { return(Content("")); } } return(new WeixinResult(messageHandler.TextResponseMessage));// ResponseMessage);//v0.8+ } catch (Exception ex) { // 发送客服消息 //messageHandler.SendCustomeMessage("异常:" + ex.Message); string error = "ExecptionMessage:" + ex.Message + "\n"; error += ex.Source + "\n"; error += ex.StackTrace + "\n"; if (ex.InnerException != null) { error += "========= InnerException =========" + "\n";; error += ex.InnerException.Message + "\n";; error += ex.InnerException.Source + "\n";; error += ex.InnerException.StackTrace + "\n";; } //将程序运行中发生的错误记录到日志 dp2WeiXinService.Instance.WriteErrorLog1(error); // 返回error信息 return(new WeixinResult(error)); } }