释蝉

博客园 首页 新随笔 联系 订阅 管理

看了下网上关于.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直接返回 

posted on 2021-07-26 13:42  释蝉  阅读(66)  评论(0编辑  收藏  举报