Имея некоторые проблемы с попыткой обменять токены JSAPI на REST Oauth Tokens ( https://developer.linkedin.com/documents/exchange-jsapi-tokens-rest-api-oauth-tokens )
Я использую эту библиотеку – http://code.google.com/p/oauth-php/ – В отличие от расширения PECL, поскольку я не могу установить расширения на сервер.
Кажется, что есть много подобных вопросов, но никто не отвечает на вопрос – как использовать указанную выше библиотеку для аутентификации с помощью Linkedin.
Мой код выглядит следующим образом:
$cookie_name = "linkedin_oauth_" . $this->_c->linkedin_api_key; $credentials_json = stripslashes($_COOKIE[$cookie_name]); $credentials = json_decode($credentials_json); // Get the Access Token + Secret $access_token_url = 'https://api.linkedin.com/uas/oauth/accessToken'; OAuthStore::instance("2Leg", array( 'consumer_key' => $this->_c->linkedin_api_key, 'consumer_secret' => $this->_c->linkedin_api_secret )); try { $request = new OAuthRequester($access_token_url, 'POST', array( 'xoauth_oauth2_access_token' => $credentials->access_token )); $result = $request->doRequest(); } catch(OAuthException2 $e) { print_r($e->getMessage()); }
Вывод выписок:
Request failed with code 400: oauth_problem=parameter_absent&oauth_parameters_absent=oauth_verifier
Как получить этот oauth_verifier? Насколько я понял, мне это не нужно, если я уже пропустил xoauth_oauth2_access_token?
Я проверил все переменные IE $ credentials и $ this -> _ c, и все переменные проходят правильно.
На самом деле это ошибка в библиотеке oauth-php. Библиотека неправильно обрабатывает параметры с префиксом xoauth_ * и обрабатывает их так же, как и обрабатывает параметры oauth_ *. Это нарушает спецификацию OAuth, и большинство (все?) Других библиотек OAuth не имеют этой проблемы. Исправление состоит в том, чтобы сделать следующее:
Внутри файла OAuthRequestSigner.php найдите следующее:
1) внутри функции getAuthorizationHeader найдите строку, которая гласит:
if (strncmp($name, 'oauth_', 6) == 0 || strncmp($name, 'xoauth_', 7) == 0)
и изменить его как:
if (strncmp($name, 'oauth_', 6) == 0)
2) Внутри функции getQueryString найдите строку, которая гласит:
|| (strncmp($name, 'oauth_', 6) != 0 && strncmp($name, 'xoauth_', 7) != 0))
и изменить его как:
|| (strncmp($name, 'oauth_', 6) != 0)
После этого все, что вам нужно сделать, по существу такое же, как вы уже делали, а именно:
try { $request = new OAuthRequester($access_token_url, "POST", array('xoauth_oauth2_access_token' => $access_token)); $result = $request->doRequest(); var_dump($result); } catch(OAuthException2 $e) { print_r($e->getMessage()); }
И вы должны быть настроены. Если у вас возникнут какие-либо дополнительные проблемы, пожалуйста, не стесняйтесь обращаться к нашим форумам разработчиков, и я или кто-то еще из команды будет рад помочь.
Наслаждайтесь!
-Jeremy