Я хочу иметь возможность открывать вложения из своего почтового ящика по прямой ссылке. Поэтому я пытаюсь сгенерировать заголовок OAuth в Твиттере, соблюдая docs https://developer.twitter.com/en/docs/direct-messages/message-attachments/guides/retrieving-media.html,, но ответ всегда 401 Unathorized, и я не знаю почему.
Я сделал все шаги из документации с полной точностью, перепроверил. Все должно работать, но это не так, и я понятия не имею, почему. Каждый ответ, который я получил от Twitter, имеет http-код 401. Жетоны абсолютно верны.
Это не дубликат: я уже проверял подобные вопросы, код из него не работает, даже если я копирую и вставляю. Я также не могу использовать библиотеку Авраама в Twitteroauth, поскольку она поддерживает только конечные точки API и OAuth, а не прямые медиа-ссылки.
Здесь функция, которая создает заголовок авторизации. Вы можете увидеть полный код здесь: https://pastebin.com/yBEVW9KN
<?php
function getAuthorizationHeader(string $url)
{
$params = array(
"oauth_consumer_key" => $this->consumer_key,
"oauth_nonce" => $this->getNonce(),
"oauth_signature_method" => "HMAC-SHA1",
"oauth_timestamp" => time(),
"oauth_token" => $this->access_token,
"oauth_version" => "1.0",
);
// Step 1. Percent encode.
$_temp = [];
foreach ($params as $key => $value) {
$_temp[rawurlencode($key)] = rawurlencode($value);
}
$params = $_temp;
// Step 2. Sort.
ksort($params);
// Step 3. Build DST
$dst = '';
foreach ($params as $key => $value) {
$dst .= $key . '=' . $value . '&';
}
$dst = rtrim($dst, '&');
// Step 4. Creating signature base string
$baseString = 'GET' . '&' . rawurlencode($url) . '&' . rawurlencode($dst);
// Step 5. Generating signature key
$signingKey = rawurlencode($this->consumer_secret) . '&' . rawurlencode($this->access_token_secret);
// Step 6. Finally, signature.
$signature = base64_encode(hash_hmac('sha1', $baseString, $signingKey, true));
// Step 7. Build header string.
$header[] = 'authorization: ';
$header[] = 'OAuth ';
// Maybe ordering important as well?
$header[] = 'oauth_consumer_key="' . $params['oauth_consumer_key'] . '",';
$header[] = 'oauth_nonce="' . $params['oauth_nonce'] . '",';
$header[] = 'oauth_signature="' . $signature . '",';
$header[] = 'oauth_signature_method="' . $params['oauth_signature_method'] . '",';
$header[] = 'oauth_timestamp="' . $params['oauth_timestamp'] . '",';
$header[] = 'oauth_token="' . $params['oauth_token'] . '",';
$header[] = 'oauth_version="' . $params['oauth_version'] . '"';
return implode('', $header);
}