微信企业号红包提交签名错误解决
2016-01-25 15:35
495 查看
发送红包 HTTPS POST提交后返回XML
<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[签名错误]]></return_msg>
<result_code><![CDATA[FAIL]]></result_code>
<err_code><![CDATA[SIGN_ERROR]]></err_code>
<err_code_des><![CDATA[签名错误]]></err_code_des>
<mch_billno><![CDATA[201601251524080563]]></mch_billno>
<mch_id><![CDATA[]]</mch_id>
<wxappid><![CDATA[]]></wxappid>
<re_openid><![CDATA[]]></re_openid>
<total_amount>100</total_amount>
</xml>
为空的参数是删除了,保密问题,实际是有数据的。WIN7环境下链接SQL 2005数据库,在Eclipse编译器运行中文英文正常。打包后中文签名错误,对比MD5字符串发现和接口测试工具生成的不一致。中文编码问题。
解决办法:官方提供的MD5.java文件
package wxqyhb.com.common;
import java.security.MessageDigest;
/**
* User: rizenguo
* Date: 2014/10/23
* Time: 15:43
*/
public class MD5 {
private final static String[] hexDigits = {"0", "1", "2", "3", "4", "5", "6", "7",
"8", "9", "a", "b", "c", "d", "e", "f"};
/**
* 转换字节数组为16进制字串
* @param b 字节数组
* @return 16进制字串
*/
public static String byteArrayToHexString(byte[] b) {
StringBuilder resultSb = new StringBuilder();
for (byte aB : b) {
resultSb.append(byteToHexString(aB));
}
return resultSb.toString();
}
/**
* 转换byte到16进制
* @param b 要转换的byte
* @return 16进制格式
*/
private static String byteToHexString(byte b) {
int n = b;
if (n < 0) {
n = 256 + n;
}
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
/**
* MD5编码
* @param origin 原始字符串
* @return 经过MD5加密之后的结果
*/
public static String MD5Encode(String origin) {
String resultString = null;
try {
resultString = origin;
MessageDigest md = MessageDigest.getInstance("MD5");
resultString = byteArrayToHexString(md.digest(resultString.getBytes("utf-8"))); //这里做修改
} catch (Exception e) {
e.printStackTrace();
}
return resultString;
}
}
<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[签名错误]]></return_msg>
<result_code><![CDATA[FAIL]]></result_code>
<err_code><![CDATA[SIGN_ERROR]]></err_code>
<err_code_des><![CDATA[签名错误]]></err_code_des>
<mch_billno><![CDATA[201601251524080563]]></mch_billno>
<mch_id><![CDATA[]]</mch_id>
<wxappid><![CDATA[]]></wxappid>
<re_openid><![CDATA[]]></re_openid>
<total_amount>100</total_amount>
</xml>
为空的参数是删除了,保密问题,实际是有数据的。WIN7环境下链接SQL 2005数据库,在Eclipse编译器运行中文英文正常。打包后中文签名错误,对比MD5字符串发现和接口测试工具生成的不一致。中文编码问题。
解决办法:官方提供的MD5.java文件
package wxqyhb.com.common;
import java.security.MessageDigest;
/**
* User: rizenguo
* Date: 2014/10/23
* Time: 15:43
*/
public class MD5 {
private final static String[] hexDigits = {"0", "1", "2", "3", "4", "5", "6", "7",
"8", "9", "a", "b", "c", "d", "e", "f"};
/**
* 转换字节数组为16进制字串
* @param b 字节数组
* @return 16进制字串
*/
public static String byteArrayToHexString(byte[] b) {
StringBuilder resultSb = new StringBuilder();
for (byte aB : b) {
resultSb.append(byteToHexString(aB));
}
return resultSb.toString();
}
/**
* 转换byte到16进制
* @param b 要转换的byte
* @return 16进制格式
*/
private static String byteToHexString(byte b) {
int n = b;
if (n < 0) {
n = 256 + n;
}
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
/**
* MD5编码
* @param origin 原始字符串
* @return 经过MD5加密之后的结果
*/
public static String MD5Encode(String origin) {
String resultString = null;
try {
resultString = origin;
MessageDigest md = MessageDigest.getInstance("MD5");
resultString = byteArrayToHexString(md.digest(resultString.getBytes("utf-8"))); //这里做修改
} catch (Exception e) {
e.printStackTrace();
}
return resultString;
}
}
相关文章推荐
- 微信公众平台开发(PHP) 数据库操作
- 微信自定义分享JS-SDK制作
- 微信红包算法
- iOS-OC-仿微信摇一摇
- perl 实现微信登录 获取好友 群信息的简单实现
- 微信公众平台入门到精通四
- 微信模板信息发送给用户(JAVA)
- 微信公众平台开发调试方法
- 微信公众号与服务器对接验证
- 微信公众平台入门到精通三
- 微信公众平台从入门到精通二
- 微信公众平台入门到精通一
- "抢红包"大战,你准备好了吗?
- 微信公众平台消息体加解密实现
- Android微信支付签名错误解决方法
- 仿微信password控件,实现密码可见于不可见功能
- 微信打开第三方应用
- 微信开发之 获取用户地址
- 微信开发 之 自定义菜单
- 微信企业号如何在十分钟内发送一万个红包