SeoLik

1 июня 2020, 14:20
150

В данной статье рассмотрим регистрацию на сайте через социальную сеть Одноклассники.

Создайте в корне своего сайта 2 папки, например social_login и social_login_callback. В первой будут храниться файлы для использования их в качестве прямых ссылок на инициализацию аутентификации в социальной сети, а во второй обработчики ответов от социальных сетей

Для добавления приложения на сайт Одноклассники необходимо:

  1. Зарегистрироваться на портале Одноклассники и привязать к своему аккаунту email – на этот email будут приходить письма, содержащие регистрационные данные приложений.
  2. Получить права разработчика по ссылке https://ok.ru/devaccess.

Регистрация нового приложения

Чтобы создать новое приложение перейдите по этой ссылке. Далее нажимаем на "Подключить oAuth" и заполняем форму.

создание приложения ok

Введите название приложения, путь к картинке размером 128x128. Укажите так же Список разрешённых redirect_uri, это список ссылок, на которые приложению разрешено делать редирект во время авторизации OAuth (параметр redirect_uri).

Теперь нажимаем на кнопку Сохранить и видим сообщеие об успешном содании приложения.

Проверяем почту и видим там письмо от Одноклассников, в котором:

Ваше приложение на Одноклассниках создано!

Но чтобы через него получать email пользователя вам необходимо прислать id приложения (можно взять из письма) и перечень нужных разрешений с описанием кейса их использования на адрес

api-support@ok.ru

Желательно написать с адреса вида admin@site.ru с примерным текстом:

Здравствуйте!

ID приложения: XXXXXXXXXX

Нужны права только на получение email юзера. Это нужно нам для того чтобы реализовать на сервисе https://site.ru авторизации/регистрации через социальную сеть ok.ru

Заранее благодарны!

Генерация ссылки для аутентификации

Создаем файл ok.php в папке social_login и записываем в него код:

$client_id = 'XXXXXXXXXXXX'; // Application ID
$public_key = 'XXXXXXXXXXXXXXXXXXX'; // Публичный ключ приложения
$client_secret = 'XXXXXXXXXXXXXXXXXXX'; // Секретный ключ приложения
$redirect_uri = 'https://site.ru/social_login_callback/ok.php'; // Список разрешённых redirect_uri

$url = 'https://connect.ok.ru/oauth/authorize';
$params = array(
    'client_id'     => $client_id,
    'scope'       => 'GET_EMAIL',
    'response_type' => 'code',
    'redirect_uri'  => $redirect_uri
);

header('Location: '. $url . '?' . urldecode(http_build_query($params)) ); exit();

 

Теперь ссылка вида http://site.ru/social_login/ok.php будет для того чтобы пользователь инициировал аутентификация через социальную сеть.

Для того, чтобы получить ответ от социальной сети и  email юзера создадим файл ok.php, но теперь в папке social_login_callback и запишем в него следующий код:

$client_id = 'XXXXXXXXXXXX'; // Application ID
$public_key = 'XXXXXXXXXXXXXXXXXXX'; // Публичный ключ приложения
$client_secret = 'XXXXXXXXXXXXXXXXXXX'; // Секретный ключ приложения
$redirect_uri = 'https://site.ru/social_login_callback/ok.php'; // Список разрешённых redirect_uri

if (isset($_GET['code'])) {

 $params = array(
        'code' => $_GET['code'],
        'redirect_uri' => $redirect_uri,
        'grant_type' => 'authorization_code',
        'client_id' => $client_id,
        'client_secret' => $client_secret
    );

    $url = 'https://api.ok.ru/oauth/token.do';
	
	
	$curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url); // url, куда будет отправлен запрос
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, urldecode(http_build_query($params))); // передаём параметры
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    $result = curl_exec($curl);
    curl_close($curl);

    $tokenInfo = json_decode($result, true);
	
	
	if (isset($tokenInfo['access_token']) && isset($public_key)) {
    $sign = md5("application_key={$public_key}format=jsonmethod=users.getCurrentUser" . md5("{$tokenInfo['access_token']}{$client_secret}"));

    $params = array(
        'method'          => 'users.getCurrentUser',
	    'access_token'    => $tokenInfo['access_token'],
		'application_key' => $public_key,
        'format'          => 'json',
		'sig'             => $sign
    );
}
	
 $userInfo = json_decode(file_get_contents('https://api.ok.ru/fb.do' . '?' . urldecode(http_build_query($params))), true);	
	
if (isset($userInfo['uid'])) {
$result = true;
}

$email = $userInfo['email'];

if ($result) {
 echo "email: " . $userInfo['email'];
    echo "Социальный ID пользователя: " . $userInfo['uid'];
    echo "Имя пользователя: " . $userInfo['name'];
    echo "Ссылка на профиль пользователя: " . 'httpы://ok.ru/profile/' . $userInfo['uid'];
    echo "Пол пользователя: " . $userInfo['gender'];
    echo "День Рождения: " . $userInfo['birthday'];
    echo $userInfo['pic_2'];
}	



}

 

Ссылки по теме