Получение токена
PHP версии 5, используется функция file_get_contents
Пример демонстрирует получение OAuth-токенa веб-сервисом. Рекомендации для других типов приложений (настольное, мобильное) приведены в документации Яндекс.OAuth.
Callback URL
При регистрации или редактировании параметров приложения на сервисе Яндекс.OAuth необходимо в поле Callback URL указать URL скрипта, выполняющего получение токена. Например:
https://site.ru/get_token.php
Код скрипта приведен ниже.
Последовательность действий
При запросе токена требуется указывать идентификатор и пароль приложения, сгенерированные при регистрации на сервисе Яндекс.OAuth.
- Приложение направляет пользователя на страницу запроса доступа по ссылке вида
https://oauth.yandex.ru/authorize?response_type=code&client_id=ИДЕНТИФИКАТОР_ПРИЛОЖЕНИЯ
На открывшейся странице пользователь нажимает кнопку Разрешить.
- Яндекс.OAuth осуществляет редирект на адрес из Callback URL. При этом к адресу добавляется параметр
code
. Например:http://site.ru/get_token.php?code=КОД_ПОДТВЕРЖДЕНИЯ
- Скрипт выполняет POST-запрос на https://oauth.yandex.ru/token, передавая следующие параметры:
grant_type = authorization_code
code
= КОД_ПОДТВЕРЖДЕНИЯclient_id
= ИДЕНТИФИКАТОР_ПРИЛОЖЕНИЯclient_secret
= ПАРОЛЬ ПРИЛОЖЕНИЯ
- Яндекс.OAuth передает ответ в формате JSON. Ключ
access_token
содержит OAuth-токен. Например:{"access_token": "0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"}
Полученный токен необходимо сохранить и использовать в запросах к API Директа.
Код скрипта
Для использования примера укажите идентификатор и пароль приложения.
<?php
// Идентификатор приложения
$client_id = 'ИДЕНТИФИКАТОР_ПРИЛОЖЕНИЯ';
// Пароль приложения
$client_secret = 'ПАРОЛЬ_ПРИЛОЖЕНИЯ';
// Если скрипт был вызван с указанием параметра "code" в URL,
// то выполняется запрос на получение токена
if (isset($_GET['code']))
{
// Формирование параметров (тела) POST-запроса с указанием кода подтверждения
$query = array(
'grant_type' => 'authorization_code',
'code' => $_GET['code'],
'client_id' => $client_id,
'client_secret' => $client_secret
);
$query = http_build_query($query);
// Формирование заголовков POST-запроса
$header = "Content-type: application/x-www-form-urlencoded";
// Выполнение POST-запроса и вывод результата
$opts = array('http' =>
array(
'method' => 'POST',
'header' => $header,
'content' => $query
)
);
$context = stream_context_create($opts);
$result = file_get_contents('https://oauth.yandex.ru/token', false, $context);
$result = json_decode($result);
// Токен необходимо сохранить для использования в запросах к API Директа
echo $result->access_token;
}
// Если скрипт был вызван без указания параметра "code",
// пользователю отображается ссылка на страницу запроса доступа
else
{
echo '<a href="https://oauth.yandex.ru/authorize?response_type=code&client_id='.$client_id.'">Страница запроса доступа</a>';
}
?>