C# ASP.NET 微信公众号开发 之 如何验证 TOKEN

   const string Token = "你的token";
    
        protected void Page_Load(object sender, EventArgs e)
        {
            
            if (Request.HttpMethod.ToLower() == "post")
            {
            }
            else
            {      
                Valid();
            }
        } 
     //验证token
        private void Valid()
        {
            string echoStr = Request.QueryString["echoStr"].ToString();//微信自动传过来的echostr
            if (CheckSignature())
            {
                if (!string.IsNullOrEmpty(echoStr))//当随机数和token验证成功后,返回echostr给微信,就可以了
                {
                    Response.Write(echoStr);
                    Response.End();
                }
            }

        }

    ///


        /// 验证微信签名
        ///

        /// * 将token、timestamp、nonce三个参数进行字典序排序
        /// * 将三个参数字符串拼接成一个字符串进行sha1加密
        /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
        ///
        private bool CheckSignature()
        
         {
            string signature = Request.QueryString["signature"].ToString();
            string timestamp = Request.QueryString["timestamp"].ToString();
            string nonce = Request.QueryString["nonce"].ToString();
            string[] ArrTmp = { Token, timestamp, nonce };
            Array.Sort(ArrTmp);//字典排序  
            string tmpStr = string.Join("", ArrTmp);
            tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");//对该字符串进行sha1加密  
            tmpStr = tmpStr.ToLower();//对字符串中的字母部分进行小写转换,非字母字符不作处理  
            if (tmpStr == signature)//开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。开发者通过检验signature对请求进行校验,若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败  
            {
                return true;
            }
            else
                return false;
        }

你可能感兴趣的:(C# ASP.NET 微信公众号开发 之 如何验证 TOKEN)