Beispiel #1
0
        public void ProcessRequest(HttpContext context)
        {
            con = context;
            con.Response.ContentType = "text/plain";

            signature = context.Request.QueryString["signature"] ?? "";
            timestamp = context.Request.QueryString["timestamp"] ?? "";
            nonce = context.Request.QueryString["nonce"] ?? "";
            echoStr = context.Request.QueryString["echoStr"];

            #region 认证判断
            string[] tempArr = new[] {timestamp,nonce,Common.WeChatAppInfo.Token };
            tempArr = tempArr.OrderBy(item => item).ToArray();
            string tempStr = string.Join("",tempArr);
            string tempSha1Str = WeChatHelper.GetSHA1EnryptStr(tempStr);

            if (tempSha1Str != signature) {
                con.Response.Write("无验证请求");
                con.Response.End();
                return;
            }
            if (!string.IsNullOrEmpty(echoStr))
            {
                context.Response.Write(echoStr);
                context.Response.End();
                return;
            }
            #endregion

            //  WeChatCrypt = Tencent.WXBizMsgCrypt(WeChatAppInfo.Token, WeChatAppInfo.sEncodingAESKey, WeChatAppInfo.AppID);

            string requestContent = System.Text.Encoding.UTF8.GetString(context.Request.BinaryRead(context.Request.TotalBytes));

            int ret = 0;
            string sMsg = "";  //解析之后的明文
            ret = Tencent.WXBizMsgCrypt.DecryptMsg(signature, timestamp, nonce, requestContent, ref sMsg);
            if (ret != 0)
            {
                context.Response.Write("无效请求");
                context.Response.End();
                return;
            }

            XmlDocument doc = new XmlDocument();

            doc.LoadXml(sMsg);

            if(doc.FirstChild["MsgId"]!=null)
            {
                if (!IsUniqueMsg(doc.FirstChild["MsgId"].InnerText))
                {
                    context.Response.End();
                    return;
                }
            }
            ReceiveData(doc);
        }