1. 程式人生 > >學習微信公眾號開發(一)

學習微信公眾號開發(一)

開發校驗程式必須能夠處理HTTP GET請求

請求校驗流程

獲取GET請求中的4個引數 signature、timestamp、nonce和echostr;

將token、timestamp、nonce3個引數按照字典排序

將排序後的3個引數按順序拼接成一個字串,並對該字串進行SHA1加密

將加密後的字串與引數signature進行對比,如果相等則證明該請求是來自微信伺服器的,需要原樣返回引數echostr.

String signature = request.getParameter("signature");//獲取signature

String token ="";//使用者自定義

String timestamp = request.getParameter("timestamp");//獲取timestamp

String echostr = request.getParameter("echostr");//獲取echostr

String [] paramstr = new String[] {token,timestamp,nonce};

Arrays.sort(paramstr);

String content = paramstr[0].concat(paramstr[1]).concat(paramstr[2]);

MessageDigset md = MessageDigset.getInstance("SHA-1");

byte[] digset = md.digset(content.getBytes());

String ciphertext = byteToStr(digset);

PrintWriter out = response.getWriter();

if(cipertext.equals(signature.toUpperCase())){

    out.print(echostr);

}

out.close();

將byte陣列轉換成十六進位制字串

private static String byteToStr(byte[] byteArray){
    String strDigSet = "";
    for(int i=0;i<bytesArray.length;i++){
        strDigSet + byteToHexStr(byteArray[i]);
    }
    return strDigSet;
 }

private static String byteToHexStr(byte ib){
    char[] Digit = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    char[] ob = new Char[2];
    ob[0]=Digit[(ib>>>4)&0x0f];
    ob[1]=Digit(ib&0x0f);
    String s = new String(ob);
    return s;
}

微信資訊互動過程:

 接收訊息:普通微信使用者向公眾賬號傳送訊息時,微信伺服器將POST訊息的XML資料包傳送到開發者填寫的URL上

傳送訊息: 對於每一個POST請求,開發者在響應包中返回特定的響應結構,並對該訊息進行響應(支援回覆文字,圖片,圖文,語音、視訊、音樂)

資訊互動模型:

使用者傳送訊息到微信伺服器,微信伺服器收到訊息,根據開發者在介面配置中填寫URL,將訊息通過HTTP POST 方式傳遞到公眾號伺服器;

公眾號伺服器接收到訊息後,會按照業務邏輯進行相應的處理

處理完成後,公眾賬號伺服器會將處理結果返回微信伺服器,

微信伺服器將公眾號伺服器內容返回給使用者