В этом уроке описана Серверная авторизация для подключения сайтов (Authorization Code Flow).
Процесс авторизации сайта состоит из 4-х шагов:
1. Открытие окна браузера для аутентификации пользователя на сайте ВКонтакте.
2. Разрешение пользователем доступа к своим данным.
3. Передача сайту значения code для получения ключа доступа.
4. Получение сервером приложения ключа доступа access_token для доступа к API ВКонтакте.
Общая суть хорошо описана в официальной документации. Здесь я приведу пример с готовым кодом, чтобы понять его, вам нужно прочитать документацию, либо читать её в процессе изучения кода.
1. Создаём Вконтакте приложение
Заходим на http://vkontakte.ru/editapp?act=create&site=1
Вводим название и выбираем «Веб-сайт».
В настройках приложения можно узнать его ID и Защищенный ключ.
2. Создаём файл настроек config.php
Код: Выделить всё
<?/* http://flapps.ru/forum/ - форум о создании приложений */ // id приложенияdefine("CLIENT_ID", "743131");// защищенный ключdefine("SECRET", "qweRtyuiop12asdFghjk");// куда перенаправим пользователя после авторизацииdefine("OAUTH_CALLBACK", "callback.php");// настройки доступаdefine("SCOPE", "friends,photos,wall");// путь к папке со скриптамиdefine("PATH", "http://flapps.ru/example/oauth20/"); // включим сессиюsession_start();?>
3. Файл callback.php, на который будет перенаправлен пользователь, после авторизации
Код: Выделить всё
<?/* http://flapps.ru/forum/ - форум о создании приложений */ require_once("config.php");// получили параметр codeif($_REQUEST['code']) { // получаем access_token $resp = file_get_contents('https://api.vk.com/oauth/access_token?client_id='.CLIENT_ID.'&code='.$_REQUEST['code'].'&client_secret='.SECRET); $data = json_decode($resp, true); if($data['access_token']){ // запишем данные в сессию $_SESSION['access_token'] = $data['access_token']; $_SESSION['user_id'] = $data['user_id']; // переадресуем пользователя на нужную страницу header('Location: '.PATH.'index.php'); exit(); }}?>
4. Файл redirect.php, который будет переадресовывать пользователя на страницу авторизации
Код: Выделить всё
<?/* http://flapps.ru/forum/ - форум о создании приложений */ require_once("config.php");//перенаправляем на авторизацию//header('Location: http://api.vk.com/oauth/authorize?client_id='.CLIENT_ID.'&redirect_uri='.PATH.OAUTH_CALLBACK.'&display=popup&scope='.SCOPE.'&response_type=code');header('Location: '.PATH.'login.php');?>
5. Файл login.php
Код: Выделить всё
<?require_once("config.php");$link = 'http://api.vk.com/oauth/authorize?client_id='.CLIENT_ID.'&redirect_uri='.PATH.OAUTH_CALLBACK.'&display=popup&scope='.SCOPE.'&response_type=code';?><button onclick="location.href='<? echo $link ?>';">Войти ВКонтакте</button><br /><a href="http://flapps.ru">http://flapps.ru</a>
6. Файл index.php
В этом скрипте мы получим профиль пользователя
Код: Выделить всё
<?/* http://flapps.ru/forum/ - форум о создании приложений */ require_once("config.php"); if(isset($_SESSION['access_token'])) { $uid = $_SESSION['user_id']; // получим профиль пользователя $resp = file_get_contents('https://api.vkontakte.ru/method/getProfiles?uids='.$uid.'&fields=photo_big&access_token='.$_SESSION['access_token']); $data = json_decode($resp, true); //print_r($data); // расскоментировать эту строчку, чтобы увидеть ответ сервера // выведем полученные данные echo 'Здравствуй, '.$data[response][0][first_name].' '.$data[response][0][last_name]. '<br /><img src="'.$data[response][0][photo_big].'" />'; } else { require_once("redirect.php");} /* http://flapps.ru/forum/ - форум о создании приложений */?>