85 lines
2.8 KiB
C#
85 lines
2.8 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Security.Cryptography;
|
||
using System.Text;
|
||
using System.Linq;
|
||
namespace PaymentSDK
|
||
{
|
||
/// 签名验证类
|
||
/// </summary>
|
||
public class CheckSignature
|
||
{
|
||
/// <summary>
|
||
/// 在网站没有提供Token(或传入为null)的情况下的默认Token,建议在网站中进行配置。
|
||
/// </summary>
|
||
public const string Token = "weixin";
|
||
|
||
/// <summary>
|
||
/// 检查签名是否正确
|
||
/// </summary>
|
||
/// <param name="signature"></param>
|
||
/// <param name="postModel">需要提供:Timestamp、Nonce、Token</param>
|
||
/// <returns></returns>
|
||
public static bool Check(string signature, PostModel postModel)
|
||
{
|
||
return Check(signature, postModel.Timestamp, postModel.Nonce, postModel.Token);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 检查签名是否正确
|
||
/// </summary>
|
||
/// <param name="signature"></param>
|
||
/// <param name="timestamp"></param>
|
||
/// <param name="nonce"></param>
|
||
/// <param name="token"></param>
|
||
/// <returns></returns>
|
||
public static bool Check(string signature, string timestamp, string nonce, string token = null)
|
||
{
|
||
return signature == GetSignature(timestamp, nonce, token);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 返回正确的签名
|
||
/// </summary>
|
||
/// <param name="postModel">需要提供:Timestamp、Nonce、Token</param>
|
||
/// <returns></returns>
|
||
public static string GetSignature(PostModel postModel)
|
||
{
|
||
return GetSignature(postModel.Timestamp, postModel.Nonce, postModel.Token);
|
||
}
|
||
|
||
|
||
|
||
/// <summary>
|
||
/// 返回正确的签名
|
||
/// </summary>
|
||
/// <param name="timestamp"></param>
|
||
/// <param name="nonce"></param>
|
||
/// <param name="token"></param>
|
||
/// <returns></returns>
|
||
public static string GetSignature(string timestamp, string nonce, string token = null)
|
||
{
|
||
token = token ?? Token;
|
||
var arr = new[] { token, timestamp, nonce }.OrderBy(z => z).ToArray();
|
||
var arrString = string.Join("", arr);
|
||
//var enText = FormsAuthentication.HashPasswordForStoringInConfigFile(arrString, "SHA1");//使用System.Web.Security程序集
|
||
var sha1 = SHA1.Create();
|
||
var sha1Arr = sha1.ComputeHash(Encoding.UTF8.GetBytes(arrString));
|
||
StringBuilder enText = new StringBuilder();
|
||
foreach (var b in sha1Arr)
|
||
{
|
||
enText.AppendFormat("{0:x2}", b);
|
||
}
|
||
|
||
return enText.ToString();
|
||
}
|
||
}
|
||
|
||
public class PostModel
|
||
{
|
||
public string Timestamp { get; set; }
|
||
public string Nonce { get; set; }
|
||
public string Token { get; set; }
|
||
}
|
||
}
|