1. 程式人生 > >java對微信支付HTTPS伺服器證書更新進行後當前伺服器是否可用驗證

java對微信支付HTTPS伺服器證書更新進行後當前伺服器是否可用驗證

收到了這樣的一個通知:微信支付HTTPS伺服器證書的根證書將於2018-08-23日到期,微信支付計劃於2018-05-29日更換伺服器證書。請通知貴司技術開發人員儘快完成相關驗證,確保安裝新的根證書,以免影響正常交易。詳細驗證流程可參考指引(http://url.cn/52EYiAE

連結中給了兩種方式去判斷當前機器是否支援新證書,我這裡用到的是第一種——呼叫微信支付沙箱環境的API介面驗證

        //商戶id
        String mchID = Constant.MCHID;
        //32位隨機字串
        String nonceStr = RandomStringGenerator.getRandomStringByLength
(32); //傳入驗籤引數 Map<String, Object> map = new HashMap<String, Object>(); map.put("mch_id", mchID); map.put("nonce_str", nonceStr); //生成sign ArrayList<String> list = new ArrayList<String>(); for(Map.Entry<String,Object> entry:map.entrySet
()){ if(entry.getValue()!=""){ list.add(entry.getKey() + "=" + entry.getValue() + "&"); } } 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=" + Constant.MCHID_KEY; //商戶金鑰 Util.log("Sign Before MD5:" + result); System.out.println("----------------------------------------------Sign Before MD5:" + result); result = MD5.MD5Encode(result).toUpperCase();//生成的sign Util.log("Sign Result:" + result); System.out.println("-----------------------------------------Sign Result:" + result); map.put("sign", result); Map<String, String> map2 = new HashMap<>(); map2.put("mch_id", mchID); map2.put("nonce_str", nonceStr); map2.put("sign", result); //將驗簽結果變成一個無頭的xml字串 String xml = AppTool.createXML(map2); System.out.println("xml=" + xml); result = AppTool.sendPostData("https://apitest.mch.weixin.qq.com/sandboxnew/pay/getsignkey", xml); System.out.println("result="+result);

如果最後輸出的內容是下圖

這裡寫圖片描述

說明當前伺服器是支援微信新證書的,附上兩個要用到的方法

    /**
     * 建立一個無頭的xml
     */
    public static String createXML(Map<String, String> map) {
        Document document = DocumentHelper.createDocument();
        Element element = document.addElement("xml");
        for(String key : map.keySet()) {
            Element appid = element.addElement(key);
            appid.setText(map.get(key));
        }
        String result = document.asXML();
        return result.substring(39, result.length());
    }
    /**
     * @param POST_URL url地址
     * @param content  key=value形式
     * @return 返回結果
     * @throws Exception
     */
    public static String sendPostData(String POST_URL, String content)
            throws Exception {
        HttpURLConnection connection=null;
        DataOutputStream out=null;
        BufferedReader reader=null;
        String line = "";
        String result="";
        try {
            URL postUrl = new URL(POST_URL);
            connection= (HttpURLConnection) postUrl.openConnection();
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setRequestMethod("POST");
            // Post 請求不能使用快取
            connection.setUseCaches(false);
            connection.setInstanceFollowRedirects(true);
            connection.setRequestProperty("Content-Type",
                    "application/x-www-form-urlencoded");
            connection.connect();

            out = new DataOutputStream(connection.getOutputStream());
            //content = URLEncoder.encode(content, "utf-8");
            // DataOutputStream.writeBytes將字串中的16位的unicode字元�?8位的字元形式寫道流裡�?
            out.writeBytes(content);
            out.flush();
            out.close();
            //獲取結果
            reader = new BufferedReader(new InputStreamReader(
                    connection.getInputStream(), "utf-8"));// 設定編碼
            while ((line = reader.readLine()) != null) {
                result=result+line;
            }       
            return result;
        } catch (Exception e) {
            throw e;
        }finally
        {
            if(out!=null)
            {
                out.close();
                out=null;               
            }
            if(reader!=null)
            {
                reader.close();
                reader=null;                
            }
            connection.disconnect();
        }
    }