/// <summary> /// 微信服务器验证 /// </summary> /// <param name="signature">微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。</param> /// <param name="timestamp">时间戳</param> /// <param name="nonce">随机数</param> /// <returns></returns> public bool Verify(string signature, string timestamp, string nonce) { if (signature.length() == 40) { string value; if (string.Compare(nonce, timestamp, StringComparison.Ordinal) >= 0) { string other = nonce; nonce = timestamp; timestamp = other; } if (string.Compare(timestamp, token, StringComparison.Ordinal) >= 0) { value = timestamp; if (string.Compare(nonce, token, StringComparison.Ordinal) >= 0) { timestamp = nonce; nonce = token; } else { timestamp = token; } } else { value = token; } if (SHA.Sha1(AutoCSer.Extension.String_Weixin.ConcatBytes(nonce, timestamp, value)).checkLowerHexNotNull(signature)) { return(true); } } AutoCSer.Log.Pub.Log.add(Log.LogType.Debug | Log.LogType.Info, "微信服务器验证错误 signature[" + signature + @"] timestamp[" + timestamp + "] nonce[" + nonce + "] token[" + token + "]"); return(false); }
/// <summary> /// 获取签名 /// </summary> /// <param name="values"></param> /// <returns></returns> private static string getSignature(string[] values) { Array.Sort(values, string.CompareOrdinal); return(SHA.Sha1(Extensions.StringExtensionWeixin.ConcatBytes(values)).toLowerHex()); }