PHP Checksignature是一個常用的驗證微信公眾號開發者的工具。在進行微信公眾號開發者相關功能的時候需要進行驗證,這個工具可以幫助我們驗證我們的代碼是否正確,從而避免一些不必要的錯誤。
我們假設在進行微信公眾號的開發時,需要獲取微信服務器發送的請求內容。如果我們沒有進行驗證,那么我們獲取到的數據就不能保證是來自微信服務器的數據。我們可以使用PHP Checksignature來驗證,如果驗證成功,就說明我們獲取到的是真實的微信服務器發送的數據。
/** * PHP Checksignature * 驗證微信請求是否來自微信服務器 * * @param string $token 微信公眾平臺設置的TOKEN * @return void */ function checkSignature($token) { $signature = isset($_GET['signature']) ? $_GET['signature'] : ''; $timestamp = isset($_GET['timestamp']) ? $_GET['timestamp'] : ''; $nonce = isset($_GET['nonce']) ? $_GET['nonce'] : ''; // 將timestamp、nonce、token按字典序排好 $tmpArray = array($timestamp, $nonce, $token); sort($tmpArray, SORT_STRING); //將排序后的三個參數拼接成一個字符串進行sha1加密 $tmpStr = implode($tmpArray); $tmpStr = sha1($tmpStr); // 微信加密簽名和我們生成的加密簽名進行對比 if ($tmpStr == $signature) { echo $_GET['echostr']; exit; } }
在代碼中,首先我們使用isset函數獲取GET請求中的三個參數:signature、timestamp、nonce。然后按照字典序對這三個參數進行排序,并使用implode函數將排序后的三個參數進行拼接。接下來使用sha1函數對拼接后的字符串進行加密,最后將生成的加密簽名與請求中的signature進行對比。
如果兩者相等,說明該請求來自微信服務器。我們可以使用echostr將請求內容返回到微信服務器,從而完成微信開發者的驗證。
使用PHP Checksignature可以保證獲取到的微信請求內容來自真實的微信服務器。這樣我們就可以在開發過程中,放心的使用微信提供的全部功能,為我們的應用增添更多的功能。