C# 封装微信支付签名方法
时间: 2023-08-10 09:54:43 浏览: 173
C#微信支付V3生成签名,发送请求
5星 · 资源好评率100%
微信支付签名是一种安全校验的手段,用于验证请求是否合法。下面是 C# 封装微信支付签名方法的示例代码:
```csharp
public static string CreateSign(SortedDictionary<string, string> parameters, string key)
{
// 按照参数名ASCII码从小到大排序
var sortedParams = new StringBuilder();
foreach (var kvp in parameters.OrderBy(p => p.Key))
{
if (!string.IsNullOrEmpty(kvp.Value) && kvp.Key != "sign")
{
sortedParams.Append(kvp.Key).Append("=").Append(kvp.Value).Append("&");
}
}
sortedParams.Append("key=").Append(key);
// 计算签名
var md5 = System.Security.Cryptography.MD5.Create();
var bs = md5.ComputeHash(Encoding.UTF8.GetBytes(sortedParams.ToString()));
var sb = new StringBuilder();
foreach (var b in bs)
{
sb.Append(b.ToString("x2"));
}
return sb.ToString().ToUpper();
}
```
使用示例:
```csharp
// 构造参数
var parameters = new SortedDictionary<string, string>();
parameters.Add("appid", "wxAPPID");
parameters.Add("mch_id", "123456");
parameters.Add("nonce_str", Guid.NewGuid().ToString().Replace("-", ""));
parameters.Add("body", "测试商品");
parameters.Add("out_trade_no", "202201010001");
parameters.Add("total_fee", "100");
parameters.Add("spbill_create_ip", "127.0.0.1");
parameters.Add("notify_url", "http://www.example.com/notify");
parameters.Add("trade_type", "APP");
// 计算签名
var sign = CreateSign(parameters, "wxKEY");
parameters.Add("sign", sign);
// 输出签名结果
Console.WriteLine(sign);
```
需要注意的是,微信支付签名需要按照参数名的 ASCII 码从小到大排序,并且不包括空值参数和 sign 参数,同时最后需要加上 key 值再进行 MD5 计算。
阅读全文