Написание приложения для Я.Ру с авторизацией через Yandex Oauth (пример на PHP)

Логотип Я.Ру (ya.ru)

Для чего можно использовать API Я.Ру?
Помимо публикации постов различных типов, включая комментарии в свой блог и клубы можно сделать авторизацию пользователей Я.Ру на своем сайте и получать/обновлять данные их профиля.
Я сделал простейшую авторизацию и решил поделиться примером.

Первое, что нужно сделать это зарегистрировать новый клиент по адресу https://oauth.yandex.ru/client/new. Важно выбрать права, которые будут необходимы для вашего приложения. В данном случае я предлагаю делать приложения для Я.Ру. Предлагается два типа прав — чтение и запись. Изменить их потом будет нельзя, поэтому если Вы не уверены, то отметьте оба, либо потом зарегистрируйте новое приложение. Второй важный параметр — «Callback URI» — это адрес скрипта на вашем сайте, который будет принимать данные от yandex oauth об авторизации.

После создания Вы получите новый ID клиента, который нужно сохранить для дальнейшего использования.

Сразу создайте файлик config.php, в котором будут хранится нужные данные.

1
2
3
4
5
6
//Ваш клиент ID
define("YANDEX_CLIENT_ID", "123k1k3j1nk2j3nk12j3n65k");
//Адрес страницы, куда сервер yandex oauth будет возвращать после получения подтверждения от пользователя.
define("OAUTH_CALLBACK", "http://www.example.com/yaru/callback.php");
//Включим сессию
session_start();

Во-вторых, создадим файл redirect.php, который будет перенаправлять пользователя на oauth.yandex.ru. В этом файле перед редиректом можно добавить строки для сохранения в сессию или в куки, а так же проверки авторизации локального пользователя и т.п.

1
2
3
require_once("./config.php");
//перенапрвляем на oauth.yandex.ru
header("Location: https://oauth.yandex.ru/authorize?response_type=code&client_id=".YANDEX_CLIENT_ID );

В-третьих, создадим файл callback.php, в котором нам нужно получить token, который будет использоваться для дальнейшей авторизации.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
require_once("./config.php");
//Если сервер вернул параметр code
if( $_REQUEST['code'] ) {
//Готовим данные для POST запроса
$data = array(
    "grant_type"=>"authorization_code",
    "client_id" => YANDEX_CLIENT_ID,
    "code" => $_REQUEST['code']    
);

$ch = curl_init();
// Настроим на URL
curl_setopt($ch, CURLOPT_URL, "https://oauth.yandex.ru/token");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// получаем овтет в формате json
$body = curl_exec($ch);
curl_close($ch);
$res = json_decode( $body );
   if( isset($res->access_token) ){
        //Сохраняем полученный токен в сессию (можно так же сохранить в базу данных или другое хранилище)
    $_SESSION['yandex_access_token'] = $res->access_token;
        //перенаправим на скрипт авторизации
    header("Location: ./auth.php");
    exit();
  }
}

И последний шаг — создать файл авторизации (auth.php), в котором так же и скачаем профиль пользователя с Я.ру.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
require_once("./config.php");
if( isset($_SESSION['yandex_access_token']) ) {
   
    $profile_path = "./data/".$_SESSION['yandex_access_token'].".xml";
    //используем кэширование, что бы не скачаивать файл повторно
  if( !is_file($profile_path) ){
        $ch = curl_init();
        //Адрес получения профиля
        curl_setopt($ch,CURLOPT_URL,"https://api-yaru.yandex.ru/me/");
        //Авторизация с token
        curl_setopt($ch,CURLOPT_HTTPHEADER,array("Authorization: OAuth ".$_SESSION['yandex_access_token'] ));
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
        curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
        $profile = curl_exec($ch);
        //Если произошла ошибка
   
        if( curl_error($ch) ) {
        echo curl_error($ch);
        exit();
        }else{
        //Сохраним данные
        fwrite(fopen($profile_path, "w"), $profile);
        }
    }

  if( is_file($profile_path ) ){
    // парсим XML
    $doc = simplexml_load_file($profile_path);
    $links = $doc->link;
    $name = $doc->name[0];
    $status = $doc->status->mood;
    foreach($links as $link ){
        $attr = $link->attributes();
        switch( $attr->rel ){
                case "www":
                    $www = $attr->href;
                break;
                case "userpic":
                    $userpic = $attr->href;
                break;
        }
    }

    echo '<h1>Привет, узнаешь?</h1><a href="'.$www.'"><img src="'.$userpic.'" style="float: left; padding:0 20px;" />';
    if( $name != '' )  
            echo $name;
        else
            echo $www;
    echo '</a>';
  }
}

По аналогии Вы сможете написать чтение ленты друзей, получение списка друзей и постинг в блог пользователя. Обратите внимание, что все данные яндекс возвращает в UTF-8, поэтому пример, включая все комментарии тоже сделан в UTF-8. Подробную документацию смотрите на сайте api.yandex.ru.

Об авторе AlexeyBalin

AlexeyBalin
Разрабатываю и поддерживаю большое количество сайтов, работающих на выделенных серверах и виртуальных хостинг-аккаунтах.


Запись опубликована в рубрике Программирование с метками , , , . Добавьте в закладки постоянную ссылку.


Поделиться с друзьями




11 комментариев: Написание приложения для Я.Ру с авторизацией через Yandex Oauth (пример на PHP)

        Добавить комментарий