微信支付 body不是UTF编码格式
微信支付体验报文编码问题
在微信支付的开发过程中,我们可能会遇到一些编码相关的问题。特别是在处理微信支付的请求和响应时,需要注意的是,微信支付的body(即请求或响应体)不是使用UTF-8编码格式的。
背景
在我们的项目中,我们使用Eclipse作为开发环境,数据库也是使用UTF-8编码的。Tomcat也配置了UTF-8编码。然而,在处理微信支付的请求和响应时,我们发现body编码并不是UTF-8。
问题描述
当我们尝试发送请求或接收响应时,可能会遇到编码错误的问题。这是因为微信支付的body使用的是非UTF-8编码格式。具体来说,微信支付使用的是GBK编码(也称为简体中文编码)。
解决方案
有两个解决方案可以解决这个问题:
1. 签名时MD5指定编码
在生成签名时,我们需要指定编码格式为GBK。我们可以使用以下代码来实现这一点:
```javaMessageDigest md = MessageDigest.getInstance("MD5");
byte[] bytes = ...; //生成签名的字节数组String sign = new String(bytes, "GBK"); // 指定编码格式为GBK```
2. 在请求或响应中指定编码
我们可以在请求或响应中指定编码格式为GBK。例如,在Tomcat配置文件中,我们可以添加以下代码:
```xml redirectPort="8443" URIEncoding="GBK"/> ``` 总结 微信支付的body编码不是UTF-8,需要注意的是使用GBK编码。我们可以通过在签名时指定编码格式为GBK或在请求或响应中指定编码格式为GBK来解决这个问题。 参考内容 * Eclipse环境配置: Tomcat配置: 微信支付API文档: