Оглавление
- Посетитель сайта наживает кнопку "Войти через соц.сеть Вконтакте", на сайте открывается специальная страница запрашивающая доступ к определённым данным пользователя (например личные данные и список контактов)
- После подтверждения, пользователь будет перенаправлен на специальную страницу сайта, куда Вконтакте передаст код авторизации
- Далее сайт выполнит запрос с этим кодом и ключом доступа полученным от vk ранее при регистрации сайта в API, в случае успеха Вконтакте вернёт сайту специальный ключ access_token, которым сайт будет пользоваться для получения параметров пользователя VK и последующей авторизации его на сайте. Обычно происходит сверка email адреса в VK и далее поиск и авторизация пользователя на сайте по полученному от vk email-адресу.
Регистрация приложения
В первую очередь создайте приложение на странице https://vk.com/editapp?act=create . В свойстве «Платформа» нужно выбрать флажок «Сайт», а так же указать полный адрес сайта и базовый домен.
Далее нужно заполнить форму описания приложения. Здесь обязательно нужно указать ссылки на страницы с пользовательским соглашением и политикой конфиденциальности вашего сайта.

Теперь перейдите в раздел «Настройки», здесь вам будут доступны такие параметры как «ID приложения», а так же «защищённый ключ» и «сервисный ключ доступа» которые потребуются нам при написании скрипта авторизации. Так же обязательно укажите «Доверительный Redirect URI» (отдельная страница на вашем сайте, это необходимо для сохранности данных пользователя и защиты от злоумышленников).

Готово, можно приступать к написанию скрипта.
Настройка ссылки для входа
Первым делом сформируем ссылку используя которую пользователь нашего сайта сможет дать необходимые разрешения, на запрошенные нашим сайтом действия, например доступ к контактам.
$vkApiUrl = 'https://oauth.vk.com/authorize';
$params = [
'client_id' => 'Идентификатор приложения, со страницы настроек',
'redirect_uri' => 'https://it-svalka.ru/verify/', //Доверительный редирект
'scope' => 'email',
'response_type' => 'code',
'state' => 'https://it-svalka.ru/vk.php'
];
$url = $vkApiUrl . '?' . urldecode(http_build_query($params));
echo '<a href="' . $url . '">Войти на сайт через ВКонтакте</a>';
При переходе по ссылке, вы попадёте на страницу запроса разрешения.
После того как пользователь дал согласие, его перенаправит на страницу указанную в параметре redirect_uri, в моём случае это такой URL:
https://it-svalka.ru/verify/?code=71706d4fb3edf76692&state=https://it-svalka.ru/vk.php
Обратите внимание на параметр code=71706d4fb3edf76692 это специальный ключ, который vk выдал сайту для работы с разрешёнными данными пользователя.
Получение данных из Вконтакте
И так, пропишем скрипт получения данных от vk по только что присланному code.
if (!empty(trim($_GET['code']))) {
$params = [
'client_id' => 'ID приложения',
'client_secret' => 'Защищённый ключ приложения',
'redirect_uri' => 'https://it-svalka.ru/verify/',
'code' => $_GET['code'] //Код полученный от VK
];
//Запрашиваем токен доступа access_token
$data = file_get_contents('https://oauth.vk.com/access_token?' . urldecode(http_build_query($params)));
$data = json_decode($data, true);
if (!empty($data['access_token'])) {
if($data['email']){
//Выполняем авторизацию пользователя по email
}
}
}
В рамках 1С Битрикс, организовать авторизацию по email можно так:
if (!empty(trim($_GET['code']))) {
$params = [
'client_id' => 'ID приложения',
'client_secret' => 'Защищённый ключ',
'redirect_uri' => 'https://it-svalka.ru/verify/',
'code' => $_GET['code'] //Код полученный от VK
];
//Запрашиваем токен доступа access_token
$data = file_get_contents('https://oauth.vk.com/access_token?' . urldecode(http_build_query($params)));
$data = json_decode($data, true);
if (!empty($data['access_token'])) {
if($data['email']){
//Выполняем арторизацию пользователя по email
$userByEmail = \Bitrix\Main\UserTable::getList([
'select' => ['ID'],
'filter' => ['EMAIL'=>$data['email']]
])->fetch();
if($userByEmail['ID']){
$USER->Authorize($userByEmail['ID']);
LocalRedirect('/auth/'); //Редирект на страницу авторизации, для лучшего эффекта
} else {
echo 'Пользователя с emial <b>' . $data['email'] . '</b> на сайте не зарегистрировано<br/>';
}
}
}
}
Конечно в 1С Битрикс предусмотрен модуль социальных сетей позволяющий организовать подобную авторизацию без написания кода. Данный пример следует воспринимать как учебный. Однако вы так же можете реализовать упрощённую регистрацию пользователей запросив данные о контактах, чтобы сразу найти уже зарегистрированных «друзей» на вашем сайте и т.д. Сценарии могут быть любыми.