public ActionResult Post(PostModel postModel) { // 本机调试注掉 /* * if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token)) * { * return Content("参数错误!"); * } */ postModel.Token = Token; //根据自己后台的设置保持一致 postModel.EncodingAESKey = EncodingAESKey; //根据自己后台的设置保持一致 postModel.AppId = AppId; //根据自己后台的设置保持一致 //v4.2.2之后的版本,可以设置每个人上下文消息储存的最大数量,防止内存占用过多,如果该参数小于等于0,则不限制 var maxRecordCount = 10; /* * var logPath = Server.MapPath(string.Format("~/App_Data/MP/{0}/", DateTime.Now.ToString("yyyy-MM-dd"))); * if (!Directory.Exists(logPath)) * { * Directory.CreateDirectory(logPath); * } * //自定义MessageHandler,对微信请求的详细判断操作都在这里面。 * var messageHandler = new CustomMessageHandler(Request.InputStream, postModel, maxRecordCount); */ //自定义MessageHandler,对微信请求的详细判断操作都在这里面。 var messageHandler = new dp2MessageHandler(dp2CommandService.Instance, Request.InputStream, postModel, maxRecordCount); messageHandler.Init(Server.MapPath("~"), true, true); try { /* * //测试时可开启此记录,帮助跟踪数据,使用前请确保App_Data文件夹存在,且有读写权限。 * messageHandler.RequestDocument.Save(Path.Combine(logPath, string.Format("{0}_Request_{1}.txt", _getRandomFileName(), messageHandler.RequestMessage.FromUserName))); * if (messageHandler.UsingEcryptMessage) * { * messageHandler.EcryptRequestDocument.Save(Path.Combine(logPath, string.Format("{0}_Request_Ecrypt_{1}.txt", _getRandomFileName(), messageHandler.RequestMessage.FromUserName))); * } */ /* 如果需要添加消息去重功能,只需打开OmitRepeatedMessage功能,SDK会自动处理。 * 收到重复消息通常是因为微信服务器没有及时收到响应,会持续发送2-5条不等的相同内容的RequestMessage*/ messageHandler.OmitRepeatedMessage = true; //执行微信处理过程 messageHandler.Execute(); /* * //测试时可开启,帮助跟踪数据 * if (messageHandler.ResponseDocument != null) * { * messageHandler.ResponseDocument.Save(Path.Combine(logPath, string.Format("{0}_Response_{1}.txt", _getRandomFileName(), messageHandler.RequestMessage.FromUserName))); * } * * if (messageHandler.UsingEcryptMessage) * { * //记录加密后的响应信息 * messageHandler.FinalResponseDocument.Save(Path.Combine(logPath, string.Format("{0}_Response_Final_{1}.txt", _getRandomFileName(), messageHandler.RequestMessage.FromUserName))); * } */ //return Content(messageHandler.ResponseDocument.ToString());//v0.7- //return new FixWeixinBugWeixinResult(messageHandler);//为了解决官方微信5.0软件换行bug暂时添加的方法,平时用下面一个方法即可 return(new WeixinResult(messageHandler));//v0.8+ } catch (Exception ex) { /* * using (TextWriter tw = new StreamWriter(Server.MapPath("~/App_Data/Error_" + _getRandomFileName() + ".txt"))) * { * tw.WriteLine("ExecptionMessage:" + ex.Message); * tw.WriteLine(ex.Source); * tw.WriteLine(ex.StackTrace); * //tw.WriteLine("InnerExecptionMessage:" + ex.InnerException.Message); * * if (messageHandler.ResponseDocument != null) * { * tw.WriteLine(messageHandler.ResponseDocument.ToString()); * } * * if (ex.InnerException != null) * { * tw.WriteLine("========= InnerException ========="); * tw.WriteLine(ex.InnerException.Message); * tw.WriteLine(ex.InnerException.Source); * tw.WriteLine(ex.InnerException.StackTrace); * } * * tw.Flush(); * tw.Close(); * } */ return(Content("")); } }
protected void Page_Load(object sender, EventArgs e) { string signature = Request["signature"]; string timestamp = Request["timestamp"]; string nonce = Request["nonce"]; string echostr = Request["echostr"]; if (Request.HttpMethod == "GET") { //get method - 仅在微信后台填写URL验证时触发 if (CheckSignature.Check(signature, timestamp, nonce, Token)) { WriteContent(echostr); //返回随机字符串则表示验证通过 } else { WriteContent("failed:" + signature + "," + CheckSignature.GetSignature(timestamp, nonce, Token) + "。" + "如果你在浏览器中看到这句话,说明此地址可以被作为微信公众账号后台的Url,请注意保持Token一致。"); } Response.End(); } else { // 本地调试时,要把校验关掉 /* //post method - 当有用户向公众账号发送消息时触发 if (!CheckSignature.Check(signature, timestamp, nonce, Token)) { WriteContent("参数错误!"); return; } */ var postModel = new PostModel() { Signature = Request.QueryString["signature"], Msg_Signature = Request.QueryString["msg_signature"], Timestamp = Request.QueryString["timestamp"], Nonce = Request.QueryString["nonce"], //以下保密信息不会(不应该)在网络上传播,请注意 Token = Token, //根据自己后台的设置保持一致??? todo 在微信测试公众号没看到这个值EncodingAESKey? EncodingAESKey = "85777abcddde69d7c44f421c49dfa331", AppId = "wx0f2b65b37835f531"//根据自己后台的设置保持一致 }; //v4.2.2之后的版本,可以设置每个人上下文消息储存的最大数量,防止内存占用过多,如果该参数小于等于0,则不限制 var maxRecordCount = 10; //自定义MessageHandler,对微信请求的详细判断操作都在这里面。 var messageHandler = new dp2MessageHandler(dp2CommandServer.Instance, Request.InputStream, postModel, maxRecordCount); messageHandler.dp2WeiXinAppDir = Server.MapPath("~"); try { //测试时可开启此记录,帮助跟踪数据 //Global.GlobalWeiXinServer.WriteErrorLog(messageHandler.RequestDocument.ToString()); //执行微信处理过程 messageHandler.Execute(); //测试时可开启,帮助跟踪数据 //Global.GlobalWeiXinServer.WriteErrorLog(messageHandler.ResponseDocument.ToString()); // 返回给微信服务器 WriteContent(messageHandler.ResponseDocument.ToString()); return; } catch (Exception ex) { //将程序运行中发生的错误记录到日志 dp2CommandServer.Instance.WriteErrorLog(LibraryChannel.GetExceptionMessage(ex)); if (messageHandler.ResponseDocument != null) { dp2CommandServer.Instance.WriteErrorLog(messageHandler.ResponseDocument.ToString()); } // 返回给微信服务器为空内容 WriteContent(""); } finally { Response.End(); } } }