微信開發者平台存取指南


存取指南



1474540284574497.jpg


存取概述


存取微信公眾平台開發,開發者需要依照下列步驟完成:


  1. 填寫伺服器設定
  2. 驗證伺服器位址的有效性
  3. #依據介面文件實作業務邏輯


#以下詳細介紹這3個步驟。


第一步:填寫伺服器設定


#登入微信公眾平台官網後,在公眾平台官網的開發-基本設置頁面,勾選協定成為開發者,點選「修改設定」按鈕,填寫伺服器位址(URL)、Token和EncodingAESKey,其中URL是開發者用來接收微信訊息和事件的介面URL。 Token可由開發者可任意填寫,用作生成簽章(此Token會和介面URL中所包含的Token進行比對,從而驗證安全性)。 EncodingAESKey由開發者手動填寫或隨機生成,將用作訊息體加解密金鑰。

同時,開發者可選擇訊息加上解密方式:明文模式、相容模式和安全模式。模式的選擇與伺服器配置在提交後都會立即生效,請開發者謹慎填寫及選擇。加解密方式的預設狀態為明文模式,選擇相容模式與安全模式需事先配置相關加解密程式碼。  


第二步:驗證訊息的確是來自微信伺服器


開發者提交資料後,微信伺服器將發送GET請求到填寫的伺服器位址URL上,GET請求攜帶參數如下表所示:


##signature #微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。
參數#描述
timestamp時間戳記
#nonce隨機數字
echostr隨機字串




開發者透過檢驗signature對請求進行校驗(下面有校驗方式)。若確認此GET請求來自微信伺服器,請原樣回傳echostr參數內容,則存取生效,成為開發者成功,否則存取失敗。加密/校驗流程如下:

#1)將token、timestamp、nonce三個參數進行字典序排序
2)將三個參數字串拼接成一個字串進行sha1加密
3)開發者取得加密後的字串可與signature對比,標識該請求來自微信
#


檢驗signature的PHP範例程式碼:


private function checkSignature()
{
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}







##第三步:依據介面文件實現業務邏輯

驗證URL有效性成功後即存取生效,成為開發者。你可以在公共平台網站申請微信認證,認證成功後,將會獲得更多介面權限,滿足更多業務需求。


成為開發者後,用戶每次向公眾號發送訊息、或產生自訂選單、或產生微信支付訂單等情況時,開發者填寫的伺服器配置URL將會得到微信伺服器推播過來的訊息和事件,開發者可以依據自身業務邏輯回應,如回覆訊息。


當公眾號呼叫各介面時,一般會得到正確的結果,具體結果可見對應介面的說明。傳回錯誤時,可根據回傳碼來查詢錯誤原因。
#########用戶向公眾號發送訊息時,公眾號收到的訊息發送者是一個OpenID,是使用用戶微訊號加密後的結果,每個用戶對每個公眾號有一個唯一的OpenID。 ###############此外,由於開發者經常有需在多個平台(行動應用程式、網站、公用帳號)之間共通使用者帳號,統一帳號系統的需求,微信開放平台提供了UnionID機制。開發者可透過OpenID來取得使用者基本訊息,而如果開發者擁有多個應用程式(行動應用程式、網站應用程式和公眾帳號,公眾帳號只有在被綁定到微信開放平台帳號下後,才會取得UnionID),可透過取得使用者基本資訊中的UnionID來區分使用者的唯一性,因為只要是同一個微信開放平台帳號下的行動應用程式、網站應用程式和公眾帳號,使用者的UnionID是唯一的。換句話說,同一用戶,對同一個微信開放平台帳號下的不同應用,UnionID是相同的。詳情請在微信開放平台的資源中心-行動應用開發-微信登入-授權關係介面呼叫指引-取得使用者個人資訊(UnionID機制)中查看。 ###############也請注意,微信公眾號介面必須以http://或https://開頭,分別支援80埠和443埠。 ##########