負載均衡後微信支付:invalid spbill_create_ip錯誤

微信支付時需要向微信傳送一個spbill_create_ip的參數,開發的時候我們是從request中通過如下代碼方式獲取到的

    public static String getIpAddress(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        String realIp = ip.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip;
        return realIp;
    }

然後正常單臺部署時沒問題,今天在阿里雲加入負載均衡並啓用https後微信支付莫名就不能用了(下單失敗不能生成二維碼),異常如下:{微信返回returnCode:FAIL,返回returnMsg:invalid spbill_create_ip"}"},經過分析發現是加了負載均衡且啓用https後request中的IP地址被修改成了兩個不一樣的地址數組了(具體是因爲加負載引起的還是因爲https引起的,還是兩個一起引起的還不確定)。然後果斷對獲取到的“IP”地址進行處理後(改爲取第一個地址)支付恢復正常。

發佈了9 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章