• 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直接返回 

  • 相关阅读:
    DataTable:数据库到程序的桥梁
    《Javascript高级程序设计》阅读记录(三):第五章 上
    《Javascript高级程序设计》阅读记录(二):第四章
    javascript获取窗口位置、绝对位置、事件位置等
    《Javascript高级程序设计》阅读记录(一):第二、三章
    调试用随笔
    C#值类型和引用类型
    vue使用vue-awesome-swiper及一些问题
    npm与yarn命令对比
    npm与nrm
  • 原文地址:https://www.cnblogs.com/2018cjx/p/15061024.html
Copyright © 2020-2023  润新知