1. 程式人生 > >微信支付統一下單介面(正式環境突然簽名失敗)

微信支付統一下單介面(正式環境突然簽名失敗)

程式早就上線,放阿里雲,代理無任何改動,怎麼會突然簽名錯誤,怎麼想都不通。

第一:排除程式碼錯誤

之前能正常支付的,現在突然不行,程式碼是沒問題的。

第二:修改商戶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;
    }