本文根据此文章 微信统一下单接口body为中文,报【签名错误】的解决办法做修改,因为使用的是springboot,所以和他的解决方式不太一样:
问题源于:
生成预付款订单向微信发送xml中, xml含有中文,导致签名失败
搜索其他关于此问题的解决方式都是 转换编码之类,无济于事,顶多是将xml中的中文 转成???从而 成功生成预支付订单id,但是此时 , 你已经将含有???的符号传给微信,导致付款界面就都显示成了你之前转的???
查资料知: tomcat默认的编码方式不是utf-8
如果你的项目没有修改成utf-8就会导致问题的出现
springboot解决方法:
原来的项目启动方式: java -jar XXX.jar
指定编码启动: java -Dfile.encoding=UTF-8 -jar XXX.jar
查看项目的当前编码
String iso8859 = new String(xmlstring.getBytes("iso8859-1"));
String gbk = new String(xmlstring.getBytes("gbk"));
String utf8 = new String(xmlstring.getBytes("utf-8"));
if(iso8859.equals(xmlstring)){
logger.error("当前系统编码:-----------iso8859");
}else if(gbk.equals(xmlstring)){
logger.error("当前系统编码:-----------gbk");
}else if(utf8.equals(xmlstring)){
logger.error("当前系统编码:-----------utf8");
}