/// <summary> /// 获取微信服务器发送过来的加密xml信息 /// </summary> /// <param name="xml"></param> public static EncryptPostData GetEncryptPostData(string xml) { if (xml == null) { return null; } var encryptPostData = new EncryptPostData(); encryptPostData.FillEntityWithXml(XDocument.Parse(xml)); return encryptPostData; }
public override void AfterGetData(EncryptPostData objPostData, PostModel objPostModel) { log.Debug("Entering AfterGetData0 EncryptPostData AgentID:{0} PostModel AgentID:{1}", objPostData.AgentID, objPostModel.AppId); log.Debug("Entering AfterGetData1 EncryptPostData Msg_Signature:{0} PostModel Timestamp:{1} Nonce:{2}", objPostModel.Msg_Signature, objPostModel.Timestamp, objPostModel.Nonce); var objConfig = Innocellence.CA.Service.Common.WeChatCommonService.GetWeChatConfig(objPostData.AgentID); if (objConfig == null) { log.Error("AfterGetData GetWeChatConfig get Error. EncryptPostData AgentID:{0} PostModel AgentID:{1}", objPostData.AgentID, objPostModel.AppId); } else { objPostModel.CorpId = objConfig.WeixinCorpId; objPostModel.EncodingAESKey = objConfig.WeixinEncodingAESKey; objPostModel.Token = objConfig.WeixinToken; } }
public virtual void AfterGetData(EncryptPostData PostData, PostModel postModel) { }
protected void Page_Load(object sender, EventArgs e) { string sToken = "zsyy94123qwe"; string sEncodingAESKey = "ugezVmmKMqlIV0DHK7DwxYUu0SRx56jxsHASe6qQowk"; string sCorpID = "wxe1afc2b45b386c79"; WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID); string sVerifyMsgSig = Request.QueryString["msg_signature"]; string sVerifyTimeStamp = Request.QueryString["timestamp"]; string sVerifyNonce = Request.QueryString["nonce"]; string sVerifyEchoStr = Request.QueryString["echostr"]; string replyEchoStr = ""; LogHelper log = new LogHelper(); if (Request.HttpMethod == "GET") { //get method - 仅在微信后台填写URL验证时触发 log.WriteLog("1"); replyEchoStr = Signature.VerifyURL(sToken, sEncodingAESKey, sCorpID, sVerifyMsgSig, sVerifyTimeStamp, sVerifyNonce, sVerifyEchoStr); if (replyEchoStr != null || replyEchoStr != "") { WriteContent(replyEchoStr); //返回字符串则表示验证通过 log.WriteLog("2"); } else { WriteContent("failed:" + replyEchoStr + "。" + "如果你在浏览器中看到这句话,说明此地址可以被作为微信企业号账号后台的Url,请注意保持Token一致。"); } Response.End(); } else { log.WriteLog("3:"); //post method - 当有用户想公众账号发送消息时触发 //本地测试的时候注释掉 ----start ----- //replyEchoStr = Signature.VerifyURL(sToken, sEncodingAESKey, sCorpID, sVerifyMsgSig, sVerifyTimeStamp, sVerifyNonce, sVerifyEchoStr); //if (replyEchoStr == null || replyEchoStr == "") //{ // WriteContent("参数错误!"); // return; //} //本地测试的时候注释掉 ----end ----- var maxRecordCount = 10; log.WriteLog("4:"); //自定义MessageHandler,对微信请求的详细判断操作都在这里面。 try { XDocument postData = XmlUtility.Convert(Request.InputStream); EncryptPostData PostData = Senparc.Weixin.QY.RequestMessageFactory.GetEncryptPostData(postData.ToString()); //获取签名 string sig = Signature.GenarateSinature(sToken, sVerifyTimeStamp, sVerifyNonce, PostData.Encrypt); //解密的明文信息 string sMsg = ""; int r = wxcpt.DecryptMsg(sig, sVerifyTimeStamp, sVerifyNonce, postData.ToString(), ref sMsg); log.WriteLog("r=:" + r); log.WriteLog("sMsg=:" + sMsg); IRequestMessageBase RequestMessageBase = RequestMessageFactory.GetRequestEntity(sMsg); log.WriteLog("MsgType=:" + RequestMessageBase.MsgType); PostModel postmodel = new PostModel(); postmodel.CorpId = sCorpID; postmodel.EncodingAESKey = sEncodingAESKey; postmodel.Msg_Signature = sVerifyMsgSig; postmodel.Nonce = sVerifyNonce; postmodel.Signature = sig; postmodel.Timestamp = sVerifyTimeStamp; postmodel.Token = sToken; CustomQYMessageHandler myMes = new CustomQYMessageHandler(postData, postmodel); myMes.Execute(); log.WriteLog("myMes.RequestDocument=:" + myMes.RequestDocument.ToString()); log.WriteLog("myMes.RequestMessage.FromUserName=:" + myMes.RequestMessage.FromUserName); myMes.DefaultResponseMessage(RequestMessageBase); //企业回复 //测试时可开启此记录,帮助跟踪数据,使用前请确保App_Data文件夹存在,且有读写权限。 //messageHandler.RequestDocument.Save( // Server.MapPath("~/App_Data/" + DateTime.Now.Ticks + "_Request_" + // messageHandler.RequestMessage.FromUserName + ".txt")); //执行微信处理过程 //messageHandler.Execute(); //测试时可开启,帮助跟踪数据 //messageHandler.ResponseDocument.Save( // Server.MapPath("~/App_Data/" + DateTime.Now.Ticks + "_Response_" + // messageHandler.ResponseMessage.ToUserName + ".txt")); //WriteContent(messageHandler.ResponseDocument.ToString()); return; } catch (Exception ex) { log.WriteLog(ex.ToString()); //using (TextWriter tw = new StreamWriter(Server.MapPath("~/App_Data/Error_" + DateTime.Now.Ticks + ".txt"))) //{ // tw.WriteLine(ex.Message); // tw.WriteLine(ex.InnerException.Message); // //if (messageHandler.ResponseDocument != null) // //{ // // tw.WriteLine(messageHandler.ResponseDocument.ToString()); // //} // tw.Flush(); // tw.Close(); //} WriteContent(""); } finally { Response.End(); } } }