微信開發入門教程-- 公衆平臺服務器url配置

之前說過,公衆平臺測試號和個人號沒太大區別,這裏爲了方便以測試號爲例,先給大家講解如何填寫服務器配置,在公衆號後臺點擊開發者工具裏的接口測試申請系統。


在服務器配置裏我們需要填寫一個URL和Token,之前已經說過,這個URL就是我們申請到的服務器資源http://qiezijiang.sinaapp.com/。至於Token參數,可以理解爲配對口令,即爲了驗證我們URL是否可用,雙方如果使用的口令都一樣,則配置成功,後面會給大家詳細說明。大家可以自定義隨便填寫,只要滿足“必須爲英文或數字,長度爲3-32字符。”這個條件即可,如下圖所示。


但是現在還不能提交,因爲我們只是在填寫了服務器配置,還沒有在服務端進行驗證。打開index.php,默認的代碼是顯示“Hello,SAE!”,我們需要修改代碼來驗證。當然這部分代碼,公衆平臺有給我們提供,在接入指南的第二步“驗證服務器地址的有效性”下方有下載,下載下來直接使用(本帖附件中有提供這部分代碼)。

把下載下來的示例代碼直接拷貝替換掉index.php默認的代碼,我們需要修改將默認的TOKEN值“weixin”修改爲我們自己定義的“qiezijiang123”。

//define your token
define("TOKEN", "weixin");//修改爲服務器配置裏的Token值“qiezijiang123”
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();

將代碼commit以後,點擊“提交”以後,就會看見出現配置成功的提示,這樣,我們的服務器配置就驗證成功了,接下來就可以正式進行接口開發工作。

開發者提交信息後,微信服務器將發送GET請求到填寫的服務器地址URL上,GET請求攜帶四個參數:

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

加密/校驗流程如下:
1. 將token、timestamp、nonce三個參數進行字典序排序
2. 將三個參數字符串拼接成一個字符串進行sha1加密
3. 開發者獲得加密後的字符串可與signature對比,標識該請求來源於微信


檢驗signature的PHP示例代碼:

private function checkSignature()
{
        $signature = $_GET["signature"];//獲取GET請求中的參數"signature"
        $timestamp = $_GET["timestamp"];//獲取GET請求中的參數"timestamp"
        $nonce = $_GET["nonce"];        //獲取GET請求中的參數"nonce"
                        
        $token = TOKEN;//將代碼中我們定義的TOKEN賦值給token
        $tmpArr = array($token, $timestamp, $nonce);//將以上三個參數放進數組
        sort($tmpArr, SORT_STRING);//將數組的元素當做字符串來處理,並按升序排序
        $tmpStr = implode( $tmpArr );//將排序好的數組元素重新組合成一個字符串
        $tmpStr = sha1( $tmpStr );//進行sha1加密
        
        if( $tmpStr == $signature ){//將組合的字符串和微信服務器傳過來的參數"signature"進行對比
                return true;
        }else{
                return false;
        }
}

開發者通過檢驗signature對請求進行校驗,若確認此次GET請求來自微信服務器,則原樣返回echostr參數內容,則接入生效,成爲開發者成功,否則接入失敗。

public function valid()
{
        $echoStr = $_GET["echostr"];

        //valid signature , option
        if($this->checkSignature()){
                echo $echoStr;//校驗成功,返回隨機字符串
                exit;
        }
}

總結一下,驗證方法大概是這樣的:微信服務器把我們在公衆號裏服務器配置的填寫的“Token”和微信服務器攜帶的另外三個參數按一定方式拼接在一起(signature),另外在把那三個參數也單獨作爲參數,發送GET請求到我們填寫的URL上。我們在服務器端通過獲取微信服務器發送過來的GET請求中的4個參數,在服務端我們也定義相同值的TOKEN,把獲取到的timestamp參數、nonce參數和我們定義的TOKEN按照給定的規則組合後,再同獲取到的“signature”參數進行比較,在整個過程中都需要用到“Token”值。

以上步驟以後,如果你的服務器配置仍舊失敗,除了開發者文檔裏有說明的錯誤碼解釋之外,還需要注意的是在調用驗證方法之前不要有echo輸出語句,SAE也許先進行實名認證。

更多微信開發教程,請訪問微信開發者社區


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章