zoukankan      html  css  js  c++  java
  • ASP.NET WEBAPI oken验证

    看了下网上关于.net webAPI 的案例全是坑

    验证成功了不被微信服务器接收

    微信客服有找不到,提问也没人回

    自己测试好几个小时 终于发现返回结果只要个string

    双引号都不用加

      public readonly string Token = "哈哈哈";
    //主方法
    public string WXToken(string signature, string timestamp, string nonce, string echostr)
            {
                string EchoStr = Valid(signature, timestamp, nonce, echostr);
    
                if (!string.IsNullOrEmpty(EchoStr))
                {
                    return echostr;
                }
                else
                {
                    return "失败";
                }
    
            }
    
    
    
        /// <summary>
            /// 转Sha1
            /// </summary>
            /// <param name="pwd"></param>
            /// <returns></returns>
            public static string GetSHA1(string pwd)
            {
                SHA1 algorithm = SHA1.Create();
                byte[] data = algorithm.ComputeHash(Encoding.UTF8.GetBytes(pwd));
                string sh1 = "";
                for (int i = 0; i < data.Length; i++)
                {
                    sh1 += data[i].ToString("x2").ToUpperInvariant();
                }
                return sh1;
    
            }
    
     /// <summary>
            /// 对比
            /// </summary>
            /// <param name="signature"></param>
            /// <param name="timestamp"></param>
            /// <param name="nonce"></param>
            /// <param name="echostr"></param>
            /// <returns></returns>
            private string Valid(string signature, string timestamp, string nonce, string echostr)
            {
                if (CheckSignature(signature, timestamp, nonce))
                {
                    if (!string.IsNullOrEmpty(echostr))
                    {
                        return echostr;
                    }
                }
    
                return "";
            }
    
    
     /// <summary>
            /// 验证微信签名
            /// </summary>
            /// * 将token、timestamp、nonce三个参数进行字典序排序
            /// * 将三个参数字符串拼接成一个字符串进行sha1加密
            /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
            /// <returns></returns>
            private bool CheckSignature(string signature, string timestamp, string nonce)
            {
                string[] ArrTmp = { Token, timestamp, nonce };
                Array.Sort(ArrTmp); //字典排序
                string tmpStr = string.Join("", ArrTmp);
                tmpStr = GetSHA1(tmpStr);
                tmpStr = tmpStr.ToLower();
                if (tmpStr == signature)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }

    可能有点乱 

    大家将就看

    返回值结果是关键 

    echostr直接返回 echostr直接返回 echostr直接返回 

  • 相关阅读:
    getText() 获取properties中的变量
    Vue----渐进式框架的理解
    appium---学习
    css----overflow(布局)
    css----display(显示) 与 Visibility(可见性)
    css----position(定位)
    中秋节
    找工作清闲的一天
    两天没有好好休息的感觉
    开始正式步入找工作的节奏
  • 原文地址:https://www.cnblogs.com/2018cjx/p/15061024.html
Copyright © 2011-2022 走看看