前景:2015年12月17日,使用微信APP支付6步骤走的第2步骤【统一下单】(https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_3)。开发系统为window7 ,系统编码为gbk 。开发项目编码为utf-8,所有java文件编码为utf-8。MD5加密方法为网络上的。tomcat 编码 为 utf-8.
场景:签名认证参数中的body包含中文 1.使用文件编码为 utf-8的Java main方法测试 能正常运行。2.使用url 请求接口返回错误消息为 “签名错误”。
各种测试... ...
解决办法: 确认错误消息一定是“签名错误”。检查MD5 加密方法 中的 getBytes 方法参数 ,例如: byte[] btInput = s.getBytes(); 改为:byte[] btInput = s.getBytes("utf-8");
结果:接口请求也能正常返回 prepayId相关信息。
原因:getBytes()不传参数则默认以 系统编码进行解析 , 需要根据自身情况判断。
备注:如果是返回 “BODY 不是UTF-8编码” 或者 “不是XML文档” ,那就是真的编码不对了。具体可以交流至 528171154@qq.com