【发布时间】:2021-06-07 03:32:43
【问题描述】:
我按照 twitter 上的教程(文档)进行操作,当我需要通过他的邮件获取用户数据(以进行用户授权)时,卡在了最后阶段。
当我发出一个不带参数的请求时,我得到了用户名、用户ID等用户数据,我需要获取用户的邮件,但是当我添加参数“?include_email = true”时,我得到了错误32 “我们无法验证您的身份”。
我不明白我在哪里犯了错误(正如我在签名中理解的那样)
感谢关注 (对不起我的英语,这不是我的母语)
$oauthParams = [
"oauth_consumer_key" => "...",
"oauth_token" => $requestOauthToken,
"oauth_signature_method" => "HMAC-SHA1",
"oauth_timestamp" => time(),
"oauth_nonce" => md5(uniqid()),
"oauth_version" => "1.0",
];
$baseURI = "https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true";
$baseString = $this->buildBaseStringGET($baseURI, $oauthParams);
$consumerSecret = '...';
$compositeKey = $this->getCompositeKey($consumerSecret, $requestOauthTokenSecret);
$oauthParams['oauth_signature'] = base64_encode(hash_hmac('sha1', $baseString, $compositeKey, true));
$header = $this->buildAuthorizationHeader($oauthParams);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $baseURI,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
$header,
),
));
$response = curl_exec($curl);
curl_close($curl);
$response = json_decode($response, true)
private function buildBaseStringGET($baseURI, $oauthParams)
{
$baseStringParts = [];
ksort($oauthParams);
foreach ($oauthParams as $key => $value) {
$baseStringParts[] = "$key=" . urlencode($value);
}
return 'GET&' . urlencode($baseURI) . '&' . urlencode(implode('&', $baseStringParts));
}
private function buildAuthorizationHeader($oauthParams)
{
$authHeader = 'Authorization: OAuth ';
$values = [];
foreach ($oauthParams as $key => $value) {
$values[] = "$key=\"" . urlencode($value) . "\"";
}
$authHeader .= implode(',', $values);
return $authHeader;
}
【问题讨论】:
标签: php twitter get signature php-curl