Я следил за указаниями, указанными в этом вопросе stackoverflow , но я застрял.
Я использую tumblr / tumblr.php из Github (официальный «PHP-клиент для tumblr API»).
Я также следую инструкциям здесь (которые на самом деле для twitter), но эти направления не предназначены для библиотеки git, которую я использую.
У меня есть действующий ключ пользователя и секрет.
Из них я делаю запрос и получаю oauth_token и oauth_token_secret так:
$client = new Tumblr\API\Client($consumerKey,$consumerSecret); $client->getRequestHandler()->setBaseUrl('https://www.tumblr.com/'); $req = $client->getRequestHandler()->request('POST', 'oauth/request_token', [ 'oauth_callback' => '...', ]); // Get the result $result = $req->body->__toString(); print_r( $result );
Что дает мне:
oauth_token=2C6f...MqSF&oauth_token_secret=HaGh...IJLi&oauth_callback_confirmed=true
Затем я отправляю пользователя на http://www.tumblr.com/oauth/authorize?oauth_token=2C6f…MqSF , чтобы они могли разрешить доступ для приложения. Это перенаправляется на: ...?oauth_token=2C6f...MqSF&oauth_verifier=nvjl...GtEa#_=_
И теперь, на последнем этапе, я считаю, что я должен преобразовать токен запроса в токен доступа. Это правильно? Я делаю что-то не так:
$client = new Tumblr\API\Client($consumerKey,$consumerSecret); $client->getRequestHandler()->setBaseUrl('https://www.tumblr.com/'); $req = $client->getRequestHandler()->request('POST', 'oauth/access_token', [ 'oauth_token' => '2C6f...MqSF', 'oauth_verifier' => 'nvjl...GtEa' ]); // Get the result $result = $req->body->__toString(); print_r( $result );
потому что я получаю ответы вроде этого:
oauth_signature [AqbbYs0XSZ7plqB0V3UQ6O6SCVI=] does not match expected value [0XwhYMWswlRWgcr6WeA7/RrwrhA=]
Что случилось с моим последним шагом?
Я не уверен, должен ли я даже отправлять oauth_verifier
с запросом. Предполагается, что #_=_
является частью oauth_verifier
? Я бы так не подумал. Я получаю ошибки подписи для всех вариантов Ive.
Без токена и токена. Я не могу совершать определенные вызовы API. Я получаю несанкционированные 403 ответа. То же самое, когда я использую токен и token_secret со второго шага. Я уверен, что мне нужна новая пара токенов / секретов.
Вы довольно близки, вы просто передаете oauth_token неправильно на последнем шаге и пропустите внедорожник oauth_token_secret.
Я скомпилировал этот рабочий код (который вы также можете найти в Wiki по адресу https://github.com/tumblr/tumblr.php/wiki/Authentication ):
<?php require_once('vendor/autoload.php'); // some variables that will be pretttty useful $consumerKey = '<your consumer key>'; $consumerSecret = 'your consumer secret>'; $client = new Tumblr\API\Client($consumerKey, $consumerSecret); $requestHandler = $client->getRequestHandler(); $requestHandler->setBaseUrl('https://www.tumblr.com/'); // start the old gal up $resp = $requestHandler->request('POST', 'oauth/request_token', array()); // get the oauth_token $out = $result = $resp->body; $data = array(); parse_str($out, $data); // tell the user where to go echo 'https://www.tumblr.com/oauth/authorize?oauth_token=' . $data['oauth_token']; $client->setToken($data['oauth_token'], $data['oauth_token_secret']); // get the verifier echo "\noauth_verifier: "; $handle = fopen('php://stdin', 'r'); $line = fgets($handle); // exchange the verifier for the keys $verifier = trim($line); $resp = $requestHandler->request('POST', 'oauth/access_token', array('oauth_verifier' => $verifier)); $out = $result = $resp->body; $data = array(); parse_str($out, $data); // and print out our new keys $token = $data['oauth_token']; $secret = $data['oauth_token_secret']; echo "\ntoken: " . $token . "\nsecret: " . $secret; // and prove we're in the money $client = new Tumblr\API\Client($consumerKey, $consumerSecret, $token, $secret); $info = $client->getUserInfo(); echo "\ncongrats " . $info->user->name . "!\n";