您好,登錄后才能下訂單哦!
當搭建好微信公眾號開發環境后,先要和微信公眾號建立聯系。從本質上來說,微信公眾號開發就是如何讓自己的服務器與微信服務器進行交互的一個過程。
微信服務器就相當于一個轉發服務器,終端(手機、Pad等)發起請求至微信服務器,微信服務器然后將請求轉發給我們的應用服務器。應用服務器處理完畢后,將響應數據回發給微信服務器,微信服務器再將具體響應信息回復到微信App終端。
通信協議為:HTTP
數據傳輸格式為:XML
具體的流程如下圖所示:
來一張更加直觀的圖吧:
我們需要做的事情,就是對微信服務器轉發的HTTP請求做出響應。具體的請求內容,我們按照特定的XML格式去解析,處理完畢后,也要按照特定的XML格式返回。
關于公眾號接入這一節內容在接入指南上寫的比較詳細的,文檔中說接入公眾號需要3個步驟,分別是:
1、填寫服務器配置
2、驗證服務器地址的有效性
3、依據接口文檔實現業務邏輯
第1步中服務器配置包含服務器地址(URL)、Token和EncodingAESKey。
服務器地址即公眾號后臺提供業務邏輯的入口地址,目前只支持80端口,之后包括接入驗證以及任何其它的操作的請求(例如消息的發送、菜單管理、素材管理等)都要從這個地址進入。接入驗證和 其它請求的區別就是,接入驗證時是get請求,其它時候是post請求;
Token可由開發者可以任意填寫,用作生成簽名(該Token會和接口URL中包含的Token進行比對,從而驗證安全性);
EncodingAESKey由開發者手動填寫或隨機生成,將用作消息體加解密密鑰。如果你不加密,已明文消息方式,這個選項可以不配置。
第2步,驗證服務器地址的有效性,當點擊“提交”按鈕后,微信服務器將發送一個http的get請求到剛剛填寫的服務器地址,并且攜帶四個參數:
接到請求后,我們需要做如下三步,若確認此次GET請求來自微信服務器,原樣返回echostr參數內容,則接入生效,否則接入失敗。
1. 將token、timestamp、nonce三個參數進行字典序排序
2. 將三個參數字符串拼接成一個字符串進行sha1加密
3. 開發者獲得加密后的字符串可與signature對比,標識該請求來源于微信。如果與微信加密簽名一致,則將echostr原樣返回給微信服務器。
驗證微信加密簽名可以寫成一個方法,放到一個工具類中,現將該方法貼出來。
public static boolean checkSignature(String token, String signature, String timestamp, String nonce) {
String[] arr = new String[] { token, timestamp, nonce };
// 將token、timestamp、nonce三個參數進行字典序排序
Arrays.sort(arr);
StringBuilder content = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
content.append(arr[i]);
}
MessageDigest md = null;
String tmpStr = null;
try {
md = MessageDigest.getInstance("SHA-1");
// 將三個參數字符串拼接成一個字符串進行sha1加密
byte[] digest = md.digest(content.toString().getBytes());
tmpStr = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
content = null;
// 將sha1加密后的字符串可與signature對比,標識該請求來源于微信
return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
}
/**
* 將字節數組轉換為十六進制字符串
*
* @param byteArray
* @return
*/
private static String byteToStr(byte[] byteArray) {
String strDigest = "";
for (int i = 0; i < byteArray.length; i++) {
strDigest += byteToHexStr(byteArray[i]);
}
return strDigest;
}
/**
* 將字節轉換為十六進制字符串
*
* @param mByte
* @return
*/
private static String byteToHexStr(byte mByte) {
char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
char[] tempArr = new char[2];
tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
tempArr[1] = Digit[mByte & 0X0F];
String s = new String(tempArr);
return s;
}
如果checkSignature方法結果為true,則將echostr原樣寫回微信服務器。
如果一切順利,在微信接口配置頁面輸入我們配置好的url和token,點擊提交,就會顯示配置成功的提示。這樣我們自己的服務器就與微信服務器成功對接上了。這樣就能開始自己的業務邏輯開發了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。