JavaWeb在调用微信支付接口的时候,出现的各种奇葩错误

第一个错误:签名错误

微信给返回的错误日志为:








我们会发现,即使我们用https://pay.weixin.qq.com/wiki/tools/signverify/,微信自己的签名工具去生成的签名,在我们的应用中使用,最后还是一样的,会报签名错误。

这个就有点操蛋了!网上看到也有好多人遇到这个问题的,到最后我们发现,我们的xml中带了中文,所以,我们的错误就是xml中有中文。


问题已经定位了:XML中有中文

那我们该怎么办?

网上找到了解决方案:下面这一段,就是我们测试的时候写的方法,主要是最后对拼接完的字符串要进行编码格式的转换,转成ISO8859-1

  public static String getXmlString(){
    	String result = null;
    	StringBuffer sb = new StringBuffer();
    	sb.append("");
    	sb.append("1");
    	sb.append("NO_CHECK");
    	sb.append("");
    	sb.append("老板收钱");
    	sb.append("");
    	sb.append("wx2bd9961127214cef");
    	sb.append("11231");
    	sb.append("5K8264ILTKCH16CQ2502SI8ZNMTM67VS");
    	sb.append("31232132121");
    	sb.append("20160616143751");
    	sb.append("180.110.77.170");
    	sb.append("1231232132132121");
    	sb.append("");
    	try {
		result =  new String(sb.toString().getBytes(), "ISO8859-1");
	} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
	} 
    	 return result; 
    }

这样基本就能解决问题了;

但是这个时候你可能还遇到第二个问题:就是即使转了也没用,微信还是会返回一个错误:参数错误:描述信息存在非UTF8字符








其实这个问题就是我们的Java文件,他竟然不是UTF8的格式,所以以后JAVA文件一定都要用UTF8的,改好了之后就真的解决了,中文描述发送成功。



你可能感兴趣的:(Java)