В данной статье рассмотрим регистрацию на сайте через Яндекс.
Создайте в корне своего сайта 2 папки, например social_login и social_login_callback. В первой будут храниться файлы для использования их в качестве прямых ссылок на инициализацию аутентификации в социальной сети, а во второй обработчики ответов от социальных сетей.
Чтобы создать новое приложение перейдите по этой ссылке. Заполняем поля формы, достаточно заполнить название и указать платформу Веб сервисы, указав в поле Callback URI #1: полный путь в файлу yandex.php в папке social_login_callback на вашем сайте. И выбираем "Доступы", в нашем случае для того чтобы зарегистрировать юзера на своем сайте нужен его e-mail, поэтому выбираем в Яндекс Паспорт поле доступа к адресу почты.
Теперь, в самом низу страницы, нажимаем на кнопку Создать приложение
Нам доступны данные созданного приложения, которые нужно записать в файл, а именно нам нужны такие данные как: ID и пароль.
Создаем файл yandex.php в папке social_login и записываем в него код:
$client_id = 'XXXXXXXXXXXXXXXXXXXXXXX'; // Id приложения
$client_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; // Пароль приложения
$redirect_uri = 'https://seolik.ru/social_login_callback/yandex.php'; // Callback URI
$url = 'https://oauth.yandex.ru/authorize';
$params = array(
'response_type' => 'code',
'client_id' => $client_id,
'display' => 'popup'
);
header('Location: '. $url . '?' . urldecode(http_build_query($params)) ); exit();
Теперь ссылка вида http://site.ru/social_login/yandex.php будет для того чтобы пользователь инициировал регистрацию через Яндекс.
Для того, чтобы получить ответ от Яндекса и email юзера создадим файл yandex.php, но теперь в папке social_login_callback и запишем в него следующий код:
$client_id = 'XXXXXXXXXXXXXXXXXXXXXXX'; // Id приложения
$client_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; // Пароль приложения
$redirect_uri = 'https://seolik.ru/social_login_callback/yandex.php'; // Callback URI
if (isset($_GET['code'])) {
$result = false;
$params = array(
'grant_type' => 'authorization_code',
'code' => $_GET['code'],
'client_id' => $client_id,
'client_secret' => $client_secret
);
$url = 'https://oauth.yandex.ru/token';
$curl = curl_init();
curl_setopt($curl, CURLOPT_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'])) {
$params = array(
'format' => 'json',
'oauth_token' => $tokenInfo['access_token']
);
$userInfo = json_decode(file_get_contents('https://login.yandex.ru/info' . '?' . urldecode(http_build_query($params))), true);
if (isset($userInfo['id'])) {
$userInfo = $userInfo;
$result = true;
}
}
$email = $userInfo['default_email']; // тут e-mail юзера
/*
print_r($userInfo);
*/
}
Ссылки по теме: