首先到開發者中心啟用服務器配置,填寫好URL和Token,后面就是寫代碼了。
在我們首次提交驗證申請時,微信服務器將發送GET請求到填寫的URL上,並且帶上四個參數(signature、timestamp、nonce、echostr),通過對簽名(即signature)的效驗,來判斷此條消息的真實性。此后,每次接收用戶消息的時候,微信也都會帶上這三個參數(signature、timestamp、nonce)訪問我們設置的URL,和第一次相同我們依然需要通過對簽名的效驗判斷此條消息的真實性。效驗方式與首次提交驗證申請一致。
| 參數 | 描述 |
|---|---|
| signature | 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。 |
| timestamp | 時間戳 |
| nonce | 隨機數 |
| echostr | 隨機字符串 |
通過檢驗signature對請求進行校驗(代碼在下面提供)。若確認此次GET請求來自微信服務器,則原樣返回echostr參數內容,則接入生效,成為開發者成功,否則接入失敗。
加密/校驗流程如下:
1. 將token、timestamp、nonce三個參數進行字典序排序
2. 將三個參數字符串拼接成一個字符串進行sha1加密
3. 將加密后的字符串與signature對比,標識該請求來源於微信
詳細代碼如下:
function checkSignature($token) {
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
return sha1($tmpStr) == $signature;
}
// 微信公眾后台填寫的Token
$token = 'theToken';
// 如果驗證正確,則返回參數echostr的內容,否則終止執行
if(checkSignature($token)) {
echo $_GET['echostr'];
}
exit();
OK!到這里差不多結束了,快去微信后台看看能否驗證成功!
最后,如果有問題,可以給我留言……
