程式早就上線,放阿裡雲,代理無任何改動,怎麼會突然簽名錯誤,怎麼想都不通。
第一:排除代碼錯誤
之前能正常支付的,現在突然不行,代碼是沒問題的。
可以驗證 微信簽名驗證工具
第二:修改商戶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;
}