//获取签名
var Token= BuildAuthAsync("GET", body, URL);
/// <summary>
/// 构造签名串
/// </summary>
/// <param name="method">HTTP请求方式(全大写)</param>
/// <param name="body">API接口请求参数的json字符串</param>
/// <param name="uri">API接口的相对路径</param>
/// <returns></returns>
protected string BuildAuthAsync(string method, string body, string uri)
{
var timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
string nonce = Path.GetRandomFileName();
string message = $"{method}\n{uri}\n{timestamp}\n{nonce}\n{body}\n";
string signature = RequestSign(message);
times = timestamp.ToString();
noncerodom = nonce;
sign = signature;
return $"mchid=\"{mchid}\",nonce_str=\"{nonce}\",timestamp=\"{timestamp}\",serial_no=\"{serial_no}\",signature=\"{signature}\"";
}
/// <summary>
/// 生成签名
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
protected string RequestSign(string message)
{
//加载证书 _apiCertPath API证书物理路径 _certPwd API证书密码(默认是商户号)
X509Certificate2 cer = new X509Certificate2("../../File/1628286360_20231122_cert/apiclient_cert.p12", mchid, X509KeyStorageFlags.Exportable);
if (cer != null)
{
RSA rsa = cer.GetRSAPrivateKey();//获取私钥
//查看在不同平台上的具体类型
byte[] data = Encoding.UTF8.GetBytes(message);
return Convert.ToBase64String(rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1));
}
else
{
return "";
}
}
C#生成微信支付的Authorization签名认证
于 2023-12-11 13:23:57 首次发布