在开发者首次使用事件推送服务时,需要先通过一次校验来和微博服务器建立首次连接;微博服务器发送GET请求到开发者填写的URL上,校验参数如下表所示:
校验参数字段 | 字段类型 | 字段说明 |
---|---|---|
signature | string | 微博加密签名,signature结合了开发者appsecret参数和请求中的timestamp参数,nonce参数 |
timestamp | string | 时间戳 |
nonce | string | 随机数 |
echostr | string | 随机字符串 |
signature参数的加密规则为:将appsecret参数,timestamp参数,nonce参数进行字典排序后,将三个参数字符串拼接成一个字符串进行sha1加密;开发者收到请求后,首先通过加密后的signature参数来校验GET请求的真实性,如果确认此次GET请求来自微博服务器,原样返回echostr参数内容就可以成功建立首次连接,否则连接失败。
建立首次连接后,后续每次微博事件推送时也都会带上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
}
其实和微信开放平台的消息验证是一样的,只不过微博这个文档很难找,我还是百度才找到的相关说明。。。。。。。。。。