微信支付統一下單介面(正式環境突然簽名失敗)
阿新 • • 發佈:2019-01-01
程式早就上線,放阿里雲,代理無任何改動,怎麼會突然簽名錯誤,怎麼想都不通。
第一:排除程式碼錯誤
之前能正常支付的,現在突然不行,程式碼是沒問題的。
第二:修改商戶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; }