В этом уроке описана
Серверная авторизация для подключения сайтов (Authorization Code Flow).
Процесс авторизации сайта состоит из 4-х шагов:
Открытие окна браузера для аутентификации пользователя на сайте ВКонтакте.
Разрешение пользователем доступа к своим данным.
Передача сайту значения code для получения ключа доступа.
Получение сервером приложения ключа доступа access_token для доступа к API ВКонтакте.
Общая суть хорошо описана в
официальной документации. Здесь я приведу пример с готовым кодом, чтобы понять его, вам нужно прочитать документацию, либо читать её в процессе изучения кода.
1. Создаём Вконтакте приложение
Заходим на
http://vk.com/editapp?act=create&site=1
Вводим название и выбираем «Веб-сайт».
В настройках приложения можно узнать его ID и Защищенный ключ.
2. Создаём файл настроек config.php
<?
// 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, на который будет перенаправлен пользователь, после авторизации
<?
require_once("config.php");
// получили параметр code
if($_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();
}
}
?>
Внимательно читайте официальную документацию! С момента публикации этой статьи могли произойти изменения. Например, сейчас (2012.11.04) написано, что при получении access_token нужно снова передать redirect_uri. В этом коде это не сделано, но тем не менее работает.
4. Файл redirect.php, который будет переадресовывать пользователя на страницу авторизации
<?
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>
6. Файл index.php
В этом скрипте мы получим профиль пользователя
<?
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");
}
?>