程序早就上线,放阿里云,代理无任何改动,怎么会突然签名错误,怎么想都不通。
第一:排除代码错误
之前能正常支付的,现在突然不行,代码是没问题的。
可以验证 微信签名验证工具
第二:修改商户API密钥
验证工具只能校验签名算法是否正确,无法校验商户KEY是否正确,所有确保万一,还是重置一下key
第三:替换签名方法(工具类)
本人好生奇怪(服务器上工具类的修改时间,和本地修改时间一致),但是就是重新替换一下就成功了,
想来想去,唯一的解释服务器上的class文件损坏了,有大牛知道具体原因还请留言赐教
附上签名算法
@SuppressWarnings("unchecked")
public static String getSign(Object o) throws IllegalAccessException {
ArrayList<String> list = new ArrayList<String>();
Class cls = o.getClass();
Field[] fields = cls.getDeclaredFields();
for (Field f : fields) {
f.setAccessible(true);
if (f.get(o) != null && f.get(o) != "") {
list.add(f.getName() + "=" + f.get(o) + "&");
}
}
int size = list.size();
String [] arrayToSort = list.toArray(new String[size]);
Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER);
StringBuilder sb = new StringBuilder();
for(int i = 0; i < size; i ++) {
sb.append(arrayToSort[i]);
}
String result = sb.toString();
result += "key=" + ParamConfig.key;
result = MD5.MD5Encode(result).toUpperCase();
return result;
}