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