我们使用的是微信支付的V2接口,但是在统一下单的时候,如果使用HMAC-SHA256签名,则调用接口后总是会报错“错误的签名,验签失败”,但是MD5却是可以的,在.NET Framework 4.0、4.6.1等环境下都失败,使用:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=20_1 这个签名验证工具,也都是错的。
使用的测试代码是:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=11_1 这里下载的.NET版本。
请教各位,这可能是什么问题呢?
在线客服说他使用我的appid等信息测试后签名是一致的。
这个问题终于知道什么原因了,必须把Encoding.Default改为Encoding.UTF8,因为body参数有中文
private string CalcHMACSHA256Hash(string plaintext, string salt)
{
string result = "";
//var enc = Encoding.Default;
var enc = Encoding.UTF8;
byte[]
baText2BeHashed = enc.GetBytes(plaintext),
baSalt = enc.GetBytes(salt);
System.Security.Cryptography.HMACSHA256 hasher = new HMACSHA256(baSalt);
byte[] baHashedText = hasher.ComputeHash(baText2BeHashed);
result = string.Join("", baHashedText.ToList().Select(b => b.ToString("x2")).ToArray());
return result;
}
使用HMAC-SHA256签名报签名错误,计算签名的参数和传参不一致导致的问题