ASP.NET微信支付字段body为中文时下单失败的解决方案

2019-01-17  来源:我要手册网  

前段时间收到微信支付官方的信息,要求把微信支付的SDK升级到最新版。升级后,每次公众号发起微信支付的时候,总是提示下单失败。网上找了一些资料,很多都是说检查:公众号的appSecret和商户号的API密钥。重新初始化了两三次的公众号的appSecret和商户号的API密钥。但还是没有解决问题。

后来,写了跟踪日志。发现了是编码的问题。只要把SDK中的加密算法中的Encoding.Default修改为:Encoding.UTF8。就解决了此问题。

找到SDK中的WxPayData类的CalcHMACSHA256Hash签名方法采用的是:Encoding.Default 编码,如果要编码的字符串为中文,则会出现下单失败。

处理方法如下:


private string CalcHMACSHA256Hash(string plaintext, string salt)
{
    string result = "";
    var enc = Encoding.UTF8;//修改Default为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;
}


[本站声明] 本网站部分文章来源于网络,如有侵权请来邮([email protected])告知,本网站将进行更正处理。
分享:
  • 相关阅读
热门标签: ASP.NET  C#  微信支付  下单失败  解决方案
推荐文章
热门文章