因公司項目需求,須要接一下微博的一些接口、雖然看起來應該是跟微信公衆平臺的同樣,可是無奈文檔作的實在是太爛了,都沒有一個明確的目錄,幸好以前接過微信公衆平臺,也算是有點經驗。 【所謂驗籤】 在開發者首次使用事件推送服務時,須要先經過一次校驗來和微博服務器創建首次鏈接;微博服務器發送GET請求到開發者填寫的URL上,校驗參數以下表所示:php
校驗參數字段 | 字段類型 | 字段說明 |
---|---|---|
signature | string | 微博加密簽名,signature結合了開發者appsecret參數和請求中的timestamp參數,nonce參數 |
timestamp | string | 時間戳 |
nonce | string | 隨機數 |
echostr | string | 隨機字符串 |
signature參數的加密規則爲:將appsecret參數,timestamp參數,nonce參數進行字典排序後,將三個參數字符串拼接成一個字符串進行sha1加密;開發者收到請求後,首先經過加密後的signature參數來校驗GET請求的真實性,若是確認這次GET請求來自微博服務器,原樣返回echostr參數內容就能夠成功創建首次鏈接,不然鏈接失敗。bash
創建首次鏈接後,後續每次微博事件推送時也都會帶上signature、timestamp、nonce三個參數,開發者依然能夠經過對signature的校驗判斷此條消息的真實性。校驗方式與首次創建鏈接一致。服務器
<?php
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$echostr = $_GET['echostr'];
$token = YOUR_APP_SECRET;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature && $echostr){
echo $echostr;
exit;
}else{
////DO something
}
複製代碼
其實和微信開放平臺的消息驗證是同樣的,只不過微博把token換成了appsecret字段,另外這個文檔很難找,我仍是百度才找到的相關說明。微信