Тарифы Услуги Сим-карты

Необходимо авторизоваться перейти к вконтакте

Продолжаем просвещать новичков. На этот раз затронем тему программирования. Программировать будем на php авторизацию вконтакте .

Рассмотрим возможные способы авторизации вконтакте на php .
Зачем может понадобиться авторизация вконтакте? Впринципе каждый решает сам. Для тех, кто совсем не может предположить зачем входит вконтакт с помощью php, подскажу – можно, к примеру отправить сообщение, вставить рисунок вместо графити или добавить кучу фоток в свой аккаунт.
Хватит лишних слов, переходим непосредственно к способам авторизации .

Способ 1. Отправляем обычный http get-запрос к серверу авторизации контакта login.vk.com и получаем в ответ идентификатор сессии:

$login = "ваше@мыло"; $pass = "password"; $ans = file_get_contents("http://login.vk.com/?email={$login}&pass={$pass}" . "&act=login&to=&from_host=m.vkontakte.ru&pda=1"); $sid = substr($ans, strpos($ans, ""s" value="")+11, 60); echo $sid;

Теперь, чтобы получить страницу, доступную только авторизованным пользователям можно воспользоваться этим кодом:

$cookie = "remixsid=" . $sid; $ch = curl_init("http://m.vkontakte.ru/"); curl_setopt($ch, CURLOPT_COOKIE, $cookie); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $answer = curl_exec($ch); curl_close($ch);

В итоге в переменной $answer будет содержимое страницы. Можете делать с ним все что нужно

Здесь будет немного больше кода, но эффект будет аналогичным – мы получим версию страницы, доступную после авторизации вконтакте.

Привожу сразу код с пояснениями:

$user_agent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) " . "Gecko/20101203 Firefox/3.6.13 (.NET CLR 3.5.30729)"; $cookie = ""; $login = "ваше@мыло"; $password = "пароль"; $ch = curl_init(); // true т.к. мы будем отправлять post запрос: curl_setopt($ch, CURLOPT_POST, true); // чтобы сайт думал, что мы - браузер: curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); // ответ сервера будем записывать в переменную curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 10); // по редиректам будем переходить автоматически. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_URL, "http://login.vk.com/?act=login"); //Формирование запроса таким образом, я счел более наглядным $post = array("act" => "login", "q" => "", "al_frame" => "1", "expire" => "", "captcha_sid" => "", "captcha_key" => "", "from_host" => "vkontakte.ru", "email" => $login, "pass" => $password); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post)); $answer = curl_exec($ch); /* В $answer нам приходит javascript, который и устанавливает куки с названием: remixsid Нам нужно cпарсить эти 60 символов, идентификатора сессии. с помощью них vkontakte поймет, что мы авторизировались.*/ $sid = substr($answer, strpos($answer, "setCookieEx("sid", "") + 20, 60); $cookie = "remixsid=" . $sid; curl_setopt($ch, CURLOPT_POST, false); curl_setopt($ch, CURLOPT_COOKIE, $cookie); // укажем страницу, с которой мы получим данные для проверки curl_setopt($ch, CURLOPT_URL, "http://vkontakte.ru/"); $answer = curl_exec($ch); echo $answer; curl_close($ch);

В переменной $answer окажется содержимое страницы. С ним также вы можете делать все что вам угодно

Здравствуйте, дорогие друзья! Как-то недавно мне потребовалось сделать на одном из своих сайтов вход через «вконтакте». Это очень удобно, так как нет необходимости в регистрации на самом сайте, а сразу же пользоваться всеми его возможностями со своего аккаунта «вконтакте». Пришлось вникать в тонкости для осуществления этой задачи. Кстати, к слову сказать, в самой официальной документации по ВК API написано немного, да и всё очень запутано.

Итак, для того чтобы начать пользовать ВК API, нам нужно создать новое приложение «Вконтакте». Делаем это так: переходим по ссылке: http://vk.com/editapp?act=create , выбираем «веб-сайт», вводим имя нашего приложения, а также адрес сайта, к которому оно привязано и базовый домен нашего сайта.

После создания, нам стали известны ID нашего созданного приложения, а также секретный код, который потому и «секретный» что не стоит его публиковать, следовательно ниже написанный id и secret code вымышленные.:)

ID: 3328234
Secret Code: Q5f2PSwkiFw23TysdDgr

Теперь начинаем «кодить». Создаём файл «vklogin.php», например, в корне сайта. А шаблон или код вставляем следующую ссылку:

https://oauth.vk.com/authorize?client_id=3328234&scope=1&redirect_uri=http://www.mydomain.ru/vklogin.php&response_type=code

Это может быть текстовая ссылка на сайте, ссылка-картинка или даже переадресация из js скрипта. Главное, что нажав на неё, пользователь перешёл по этом адресу. Теперь о передаваемых параметрах: client_id – это идентификатор нашего приложения ВК, redirect_uri – адрес на нашем сайте, куда будет переадресован пользователь, после получения прав «Вконтакте», response_type – это тип авторизации, который в нашем случае с использование кода. После перехода по данной ссылки, пользователь увидит следующую страницу сайта «Вконтакте»:


После того как пользователь нажмёт «Разрешить», тем самым делегирует права вашему сайту, он будет переадресован на наш скрипт «vklogin.php». Далее привожу сам скрипт, пояснение позже.

‹?php $VK_APP_ID = "3328234"; $VK_SECRET_CODE = " Q5f2PSwkiFw23TysdDgr "; if(!empty($_GET["code"])) { $vk_grand_url = "https://api.vk.com/oauth/access_token?client_id=".$VK_APP_ID."&client_secret=".$VK_SECRET_CODE."&code=".$_GET["code"]."&redirect_uri=http://www.mydomain.ru/vklogin.php"; // отправляем запрос на получения access token $resp = file_get_contents($vk_grand_url); $data = json_decode($resp, true); $vk_access_token = $data["access_token"]; $vk_uid = $data["user_id"]; // обращаемся к ВК Api, получаем имя, фамилию и ID пользователя вконтакте // метод users.get $res = file_get_contents("https://api.vk.com/method/users.get?uids=".$vk_uid."&access_token=".$vk_access_token."&fields=uid,first_name,last_name,nickname,photo"); $data = json_decode($res, true); $user_info = $data["response"]; echo $user_info["first_name"]." ".$user_info["last_name"]."
"; echo "‹img .$user_info["photo"]."" border="0" /›"; } ?›

Итак, с переменными ID и Sercet Code думаю всё ясно. Далее проверяем, передали ли нам ВК при редиректе параметр «code», который мы добавляем во вновь созданный url и опять обращаемся к «контакту», но уже напрямую из нашего скрипта. Для этого используем функцию «file_get_contents».

На данном этапе, следует заострить внимание на нескольких важных замечаниях:

1. Данный код врят-ли получится тестировать на локальном сервере(например, на «Дервере»), а также, на используемом сервере, в настройка php.ini, директива «allow_url_fopen» должна быть установлена в «1».
2. На используемом сервере должен быть установлено расширение json для PHP.
3. И самое коварное, на чём я споткнулся. Параметры «redirect_uri» в обоих запросах к API, должны быть абсолютно одинаковыми.

Осталось только упомянуть о самой работе с ВК API. Как вы заметили, после второго запроса к ВК, мы получили параметры «access_token» и «user_id». На данном этапе мы уже авторизированны на ВК и можем обращаться к API, используя 2 эти переменные.

В последнем запросе к ВК API, мы используя метод «users.get», получаем имя пользователя ВК, фамилию, а также ID пользователя и просто выводим их. Для конкретной реализации логина на сайте через ВК, всё зависит от используемой CMS. Если у Вас собственноручно написанная CMS, вы может поступить следующий образом. Например, сохранять ID пользователя в сессионных переменных $_SESSION[‘vk_id’] и $_SESSION[‘vk_login’] предварительно обнулив первую. И проверят авторизацию пользователя по значению «vk_id».

Более подробно, о работе с ВК API вы сможете прочитать, по следующим ссылкам:

Официальная документация по ВК API.

Давно хотелось написать какое-нибудь приложение, используя VK API. Решено было написать некий каркас, добавляя плагины к которому можно было бы реализовать какие-то мелкие задачи, которые нужны в данный момент: от скачивания музыки до банального поддержания аккаунта онлайн. Запускать данное творение планировалось как на сервере, так и на ПК. С проблемами, вставшими на моем пути во время разработки, включая озвученную в заголовке, я и хотел бы вас познакомить.

Шаг 0. Изучение документации

Итак, задача поставлена, теперь необходимо изучить платформу VK API. Ознакомившись с методами было замечено, что многие из них требуют получения access_token , или, проще говоря, авторизации пользователя.
  1. OAuth-авторизация
  2. Прямая авторизация
  3. Авторизация с использованием официального приложения (предоставляется в SDK)
Теперь подробнее о методах в порядке возрастания их полезности:
Авторизация с использованием официального приложения
Приложение состыковывается с официальным приложением для Android или iOS, которое дает ему интерфейс для взаимодействия с API.
Собственно, без комментариев, способ совсем для других платформ и задач.
OAuth-авторизация
Необходимо открыть страницу авторизации в браузере, где пользователь, если он еще не авторизован на сайте, введет свой логин и пароль и разрешит доступ к его аккаунту.
Этот способ не понравился сразу по двум причинам: во-первых, токен таким образом необходимо получать каждые 24 часа, во-вторых, для его получения нужно каждый раз заходить на сервер, открывать lynx, авторизовываться и разрешать доступ. Не очень удобно. Есть, конечно, такой вариант, но всё-таки решено было поискать что-то другое.
Прямая авторизация
Передача логина и пароля непосредственно GET-запросом на определенный URL. Токен в итоге получается бессрочный и без привязки по IP.
Идеально подходящий, казалось бы, способ, если бы не одно «но»:
Внимание! Доступ к этому типу авторизации может быть получен только после предварительного согласования с администрацией ВКонтакте.

Для подачи заявки на получение доступа Вам необходимо обратиться в службу поддержки по адресу vk.com/support , указав ID Вашего приложения.

В настоящий момент эта возможность предоставляется только для платформ, не поддерживающих стандартную авторизацию. В заявке необходимо кратко описать функционал приложения.


Объяснять, что пишу просто каркас для любой своей будущей идеи, думаю, было бессмысленно, поэтому пришлось искать какие-то обходные пути.

Шаг 1. Обходные пути

Расстроившись тем фактом, что простым смертным получить доступ к прямой авторизации достаточно сложно, я уже чуть было не похоронил свою идею.
Однако, в один прекрасный день, во время чтения ленты новостей в официальном приложении VK на планшете под управлением Windows 8, в голову пришла мысль: а почему бы не взять access_token из этого приложения, он ведь бессрочный и без привязки к IP. Ну, или еще круче, перехватить app_id и app_secret во время авторизации официального приложения. Всё бы ничего, если бы не авторизация, конечно же, по https протоколу.
Загоревшись идеей кражи app_id и app_secret пришла в голову еще одна идея — декомпилировать клиент и попробовать поискать там.
Сказано — сделано: наверняка metro-приложение VK написано на C#, значит нужно найти C# декомпилятор. Первым в Google нашёлся JetBrains dotPeek . Хорошо, попробуем.
Далее неплохо было бы найти само приложение VK. После не очень долгого поиска было выяснено, что metro-приложения в Windows 8.1 хранятся в скрытой папке C:\Program Files\WindowsApps.
Отлично! Пытаемся зайти и видим:

Мы, вроде бы, с правами администратора, нажимаем на «Продолжить»:

Весело, зайдём на вкладку «Безопасность», там нам предложат задать особые разрешения в «Дополнительно», зайдем в «Дополнительно»:

Поменяем владельца на себя, щелкнув на «Изменить», введя в диалоге свой email учетной записи microsoft, либо имя локального пользователя и щелнув на «Проверить имена». Сохраним всё это и теперь мы можем зайти в папку с нашими metro-приложениями. Ищем папку с VK, забираем оттуда VK.exe и скармливаем его нашему декомпилятору. Структура приложения видна для нас идеально, все названия функций и классов сохранились, недолгим гулянием по классам находим функцию Authorize, содержащую строку req, в которой есть два замечательных параметра:

Вуаля! client_id и client_secret наши.

client_id и client_secret для копирования

client_id=3697615
client_secret=AlVXZFMUqyrnABp8ncuU


Теперь мы можем авторизовываться, используя прямую авторизацию!
Попользовавшись данными client_id и client_secret мне все-таки стало интересно, что ответит поддержка на возможность их использования. После небольшой дискуссии был получен следующий ответ:

Интересная, конечно, позиция. Хорошо, расслабляемся и пользуемся.

Шаг 2. Собственно каркас

Желаемый каркас всё-таки был написан. В качестве языка программирования был выбран Python.
Состоит он из ядра и подключаемых плагинов. Ядро осуществляет авторизацию, работу с sqlite базой данных, импорт плагинов, опрос longpoll-сервера.
Плагины гибко взаимодействуют с ядром. О структуре плагина:
Чтобы ядро восприняло файл как плагин, в нем должна быть объявлена переменная:

Vkbuddyplugin__ = True
Для того, чтобы добавить параметры в конфиг-файл, плагину необходимо объявить переменную config_parameters :

Config_parameters = [ {"name": "parameter_name", # имя параметра "required": False, # bool, является ли параметр обязательным "description": "parameter_description", # описание параметра "default": "parameter_value", # значение параметра по умолчанию "typ": str}, # тип параметра... ]
Чтобы создать таблицы в БД (если они еще не существуют), необходимо объявить переменную sql_tables :

Sql_tables = [ {"name": "table_name", # имя таблицы "structure":(# структура таблицы: пары (имя столбца, тип столбца) ("id", int), ("column_name", float))}, ... ]
Также реализован набор стандартных хендлеров (добавить новые хендлеры можно и в плагинах, так уже реализован хендлер текстовых команд).

Стандартные хендлеры:

  • before_auth_handlers — функции вызываются перед авторизацией, с единственным параметром — основным объектом, в котором можно получить доступ к VK API, хоть это и бесполезно перед авторизацией
  • after_auth_handlers — функции вызываются после авторизации, с тем же единственным параметром
  • exit_handlers — функции вызываются перед выходом, так же с единственным параметром
  • longpoll_handlers — функции вызываются при получении сообщения от longpoll-сервера, параметров здесь много, что они значат можно посмотреть в документации по VK API: (vkbuddy, code, msgid, flags, from_id, ts, subj, text, attachments)
На github можно ознакомиться с результатом, примерами плагинов и прочим, а также поучаствовать в разработке.

Спасибо за внимание!

Иногда случается так, что вам нужно зайти на сайт ВКонтакте, но из данных аккаунта у вас имеется только access_token. Никаких логинов или паролей, и даже не hash, только токен. Как тогда быть? ВКонтакте не предоставляет возможности авторизовываться таким образом, поэтому мы отыскали несколько хитрых способов заходить в ВК через акцесс в обход самой социальной сети.


Заходим на сайт сервиса VKApi: vkapi.zf-projects.ru и проходим авторизацию через любой аккаунт ВКонтакте, от которого у вас имеется логин или пароль. Как только закончили, открываем Cookie Manager. Справа в окне Domains ищем сайт vkapi.zf-projects.ru и кликаем на него. Затем в центре в окне Cookies находим строку с заголовком token и кликаем, после чего справа, ищем поле Value , удаляем из него токен от текущего аккаунта (с которого авторизовались) и вставляем токен от аккаунта, на который нужно зайти. Сохраняем изменения кнопкой Save (дискетка). Готово! После обновления страницы на VKApi произойдёт переавторизация на новый аккаунт!
Заключение
В заключение хочу добавить, что для авторизации в самом ВКонтакте одного лишь акцесса недостаточно. Но его более чем достаточно, чтобы читать и отправлять сообщения, просматривать и оценивать фотографии, прослушивать музыку и много другое при помощи сервисов APIdog и VKApi.

Доброго времени суток уважаемые читатели! Сегодня мы с вами поговорим про API ВКонтакте, точней об использовании API в Delphi. Я буду использовать в этой статье Delphi 2010, в принципе вам ее использовать не обязательно, данный материал будет применим к любой версии Delphi. И так, сегодня мы с вами рассмотрим метод авторизации в VK.COM с помощью indy, настройку компонентов indy для работы с API VK. На самом деле все очень-очень просто и 100 раз находится в гуглояндексе и других поисковиках. Но большинство из них написаны еще под vkontakte.ru, API тогда естественно было другое. Ну да ладно, давайте начинать. Для начала нам понадобятся компоненты:

  • IdHTTP
  • IdSSLIOHandlerSocketOpenSSL
  • IdCookieManager

Ну и стандартно:

  • TLabel
  • TEdit
  • TButton

Настраиваем компоненты

ВАЖНО! В папку с исполнительным файлом программы копируем эти DLL

Они есть в архиве к этому материалу.
И так, настройка компонентов для авторизации вконтакте завершена, необходимые DLL библиотеки скопированы, теперь напишем немного кода.

Procedure TForm1.Button1Click(Sender: TObject); var TmpStr: string ; json: TJSONObject ; client_id ,client_secret: string ; Token, IdUser: string ; begin client_id:= Ваш ID полученный на сайте Вконтакте; client_secret:= Секрет от туда же; try TmpStr:= IdHTTP.Get("https://oauth.vk.com/token?grant_type=password&client_id="+client_id+"&client_secret="+client_secret+"&username="+EdtEmail.Text+"&password="+EdtPass.Text); except on E: Exception do begin MessageBox(Application.Handle, PChar(Format("Ошибка: %s",)), "Error", MB_ICONHAND); exit ; end; end; json:= TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(TmpStr),0) as TJSONObject; Token:= json.Get(0).JsonValue.ToString; Token:= StringReplace(Token, """, "", ); IdUser:= json.Get(2).JsonValue.ToString; end;

я осознанно опускаю ту часть в которой обычно рассказывают про то как получить ID и секрет от вконтакте, это вы уже читали в предыдущих постах. У нас же будет только самое необходимое, не какого левого материала).
Объясню код:
Первое что вы наверное не видели в других уроках это json: TJSONObject, да да, я правильно разбираю ответы от сервера, так как того просит религия;). Другими словами это правильная переменная для хранения ответа от сервера на наш GET запрос. Инициализируется она просто: json:= TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(TmpStr),0) as TJSONObject; поля вытащить из нее тоже не составляет большого труда: Token:= json.Get(0).JsonValue.ToString;
Токен и айди пользователя нужны для дальнейшего выполнения API функций, о которых мы поговорим с вами в следующих статьях.
Ну собственно и все на этом по коду. Проверку авторизации не делаю, оставляю это вам)))