zoukankan      html  css  js  c++  java
  • 微信开发--one.微信平台验证

        微信验证对很多人可能是一个坎。对于官方文档我也没怎么看懂。

        简单理解:验证时候,微信服务器端会发送一个字符串,然后你按照微信要求的格式返回一个字符串,即可验证成功。

        1.微信端以URL带参数访问你所设置的网站地址,Get方式发送一个参数,名称为:echoStr

        2.在我们验证期间可以用两种方式进行处理:echoStr

            (1)直接输出字符串,即可完成验证(此方法超级简单就可以完成微信验证,不需要进行官方一系列加密匹配等。我把它成为野方法,亲测可用)

        protected void Page_Load(object sender, EventArgs e)
        {
            // 验证方法
            Valid();
        }  
    
        private void Valid()
        {
            string echoStr = Request.QueryString["echoStr"].ToString();
    
            // 方法一【推荐】:最简单的方法就是不进行校验,直接输出数据即可通过验证
            Response.Write(echoStr);
            Response.End();
    
        }

          (2)官方验证,就需要进行加密匹配

        private void Valid()
        {
            string echoStr = Request.QueryString["echoStr"].ToString();
    
            //方法二【官方】:通过sha1进行加密匹配
            if (CheckSignature())//此方法为验证加密 ******
            {
                if (!string.IsNullOrEmpty(echoStr))
                {
                    Response.Write(echoStr);
                    Response.End();
                }
            }
        }
    
        /// <summary>
        /// 验证微信签名
        /// </summary>
        /// * 将token、timestamp、nonce三个参数进行字典序排序
        /// * 将三个参数字符串拼接成一个字符串进行sha1加密
        /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
        /// <returns></returns>
        private bool CheckSignature()
        {
            string signature = Request.QueryString["signature"].ToString();
            string timestamp = Request.QueryString["timestamp"].ToString();
            string nonce = Request.QueryString["nonce"].ToString();
    
            // 打印获取的参数数据
            //Common.Log.WriteLog("signature:" + signature + ";   timestamp:" + timestamp + ";     nonce:" + nonce);
            string[] ArrTmp = { Token, timestamp, nonce };
            Array.Sort(ArrTmp);     //字典排序
            string tmpStr = string.Join("", ArrTmp);
            tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
            tmpStr = tmpStr.ToLower();
            if (tmpStr == signature)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

    这样验证就over,第一种验证方法很简单。。。规范化的第二种方式有兴趣可以看看,也不是很复杂,排序加密判断即可。。。

    注:官方验证为了什么,真心没弄明白。难道只是让客户知道自己的连接是否正常或正确?但是直接不验证返回也可以验证 真心 不理解。。。

            

  • 相关阅读:
    innerHTML与appendChild(newnodeText)的区别
    转]解析C语言中的sizeof
    #pragma 预处理指令详解
    Linux目录结构和常用命令
    Linux下select, poll和epoll IO模型的详解
    重载,继承,重写和多态的区别:
    CentOs7实现lvs+nginx+keepalived负载均衡(DR模式)
    shell中的通配符(grep、cut、sort等)
    kali虚拟机 联网问题解决办法
    MongoDB 数据库
  • 原文地址:https://www.cnblogs.com/buzi521/p/3985001.html
Copyright © 2011-2022 走看看