隐藏

[微信支付]C# .net 微信扫码支付Body含有中文导致出现“签名错误”

发布:2019/7/31 9:24:13作者:管理员 来源:本站 浏览次数:1220

1.微信支付坑多多,签名Body竟出错

经过近期对微信支付的开发,走过太多的坑,真怕以后再做微信支付,特将小问题逐步整理.

此为微信支付中的native支付第二种支付方式,在请求参数时出现问题:body(商品描述)为中文时,签名失败,为英文时签名成功。

系统为考试系统,测试报名考试是否能正常生成二维码
测试1:考试名称为 wwwsdnh (全英文) [我将考试名称作为微信支付的body信息传入]
在这里插入图片描述
微信扫码后成功显示,妈呀好激动,终于完成了
在这里插入图片描述
结果测试2:考试名称为 测试点击报名考试时是否修改状态(中文)
前段vue报错:
在这里插入图片描述
后端vs中出现
在这里插入图片描述
查看
在这里插入图片描述
签名错误,纳尼,肿么可能!我刚刚明明成功了呀!好吧 我服!谁让微信是爸爸呢!
2.解决方案

通过我的一顿搜索,搞定
原因就是在于body是中文,转换出了问题导致签名的算法在转换时出错!
解决措施:
找到API的Data类的CalcHMACSHA256Hash方法

在这里插入图片描述
在这里插入图片描述
将var enc = Encoding.Default;
改为var enc = Encoding.UTF8; //修改Default为UTF8**

修改后
在这里插入图片描述
在这里插入图片描述
3.虽然解决了中文问题,但是还存在一点小问题,比如 数据中存在 冒号,暂时博主没找出解决方案,坐等大神补充~之后找到后会及时补充.