Логин из вконтакта. Как это работает.

Недавно для простоты комментирования я сделал авторизацию из vkontakte.ru. Для этого потребовалось не так много ресурсов и времени, сейчас для заинтересованных покажу, как это делается.

Во-первых, надо создать свое приложение. Можно не загружать SWF-файл, достаточно получить так называемый «секретный ключ» и идентификатор. Это делается вконтакте, на вкладке с приложениями.

Во-вторых, куда-то на сайте воткнуть кнопку «войти вконтакте» (я ее вынес на отдельную страницу, нечего скриптами страницы блога нагружать).

Под приложение после логина установится куки вида vk_app_ID-приложения. Осталось только ее «поймать» и разобрать:

$vk_auth=trim($_COOKIE["vk_app_ID-приложения"]);
$secret_id='секр-ключ-приложения';
$vk=explode("&",$vk_auth);
$md5_vk=md5($vk[0].$vk[1].$vk[2].$vk[3].$secret);
list($a,$vk_login)=explode("=",$vk[1]);
$vk=explode("=",$vk[4]);

if ($md5_vk==$vk[1]) { // если подпись сходится...
$api_id = "ID_приложения";
$method = "getProfiles";
$uids=$vk_login;
$v="3.0";
// сигнатура для проверки
$sig=md5("api_id=".$api_id."method=".$method."uids=".$uids."v=".$v.$secret_id);
$e="http://api.vkontakte.ru/api.php?api_id=".$api_id."&method=".$method."&uids=".$uids."&v=".$v."&sig=".$sig;

// посылаем запрос, чтобы получить данные о пользователе
$p=file_get_contents($e);
}


Все, в принципе, описано в документации, но там не указан один забавный нюанс: параметры нужно передавать в алфавитном порядке. Почему - без понятия. Но это факт, я часа два получал от Вконтакта ошибку, пока мне не пришла в голову бредовая мысль выстроить параметры по алфавиту. В следующий раз я сделаю логин из Фейсбука. Надеюсь, там такого шаманства не будет.
Постников Вася (17 дек 2010г, 16:01) #
ееее!! секрет раскрыт:) бугога) вмемориз на лирушечке отправил Ж)
спасибо за инфо ^_^
Кобзарёв Михаил (14 янв 2011г, 18:15) #
Шаманство. Чем parse_url не устроила?