Получение токена

PHP версии 5, используется функция file_get_contents

  1. Callback URL
  2. Последовательность действий
  3. Код скрипта

Пример демонстрирует получение OAuth-токенa веб-сервисом. Рекомендации для других типов приложений (настольное, мобильное) приведены в документации Яндекс.OAuth.

Callback URL

При регистрации или редактировании параметров приложения на сервисе Яндекс.OAuth необходимо в поле Callback URL указать URL скрипта, выполняющего получение токена. Например:

 https://site.ru/get_token.php

Код скрипта приведен ниже.

Последовательность действий

При запросе токена требуется указывать идентификатор и пароль приложения, сгенерированные при регистрации на сервисе Яндекс.OAuth.

  1. Приложение направляет пользователя на страницу запроса доступа по ссылке вида
    https://oauth.yandex.ru/authorize?response_type=code&client_id=ИДЕНТИФИКАТОР_ПРИЛОЖЕНИЯ

    На открывшейся странице пользователь нажимает кнопку Разрешить.

  2. Яндекс.OAuth осуществляет редирект на адрес из Callback URL. При этом к адресу добавляется параметр code. Например:
     http://site.ru/get_token.php?code=КОД_ПОДТВЕРЖДЕНИЯ
  3. Скрипт выполняет POST-запрос на https://oauth.yandex.ru/token, передавая следующие параметры:
    • grant_type = authorization_code

    • code = КОД_ПОДТВЕРЖДЕНИЯ

    • client_id = ИДЕНТИФИКАТОР_ПРИЛОЖЕНИЯ

    • client_secret = ПАРОЛЬ ПРИЛОЖЕНИЯ

  4. Яндекс.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>';
    }
?>