В данной статье рассмотрим регистрацию на сайте через социальную сеть Одноклассники.
Создайте в корне своего сайта 2 папки, например social_login и social_login_callback. В первой будут храниться файлы для использования их в качестве прямых ссылок на инициализацию аутентификации в социальной сети, а во второй обработчики ответов от социальных сетей
Для добавления приложения на сайт Одноклассники необходимо:
Чтобы создать новое приложение перейдите по этой ссылке. Далее нажимаем на "Подключить oAuth" и заполняем форму.
Введите название приложения, путь к картинке размером 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'];
}
}