Как узнать токен страницы вк. Как получить access_token Вконтакте

В данной статье для примера рассмотрено десктоп-приложение на Java, однако общие принципы и схема будут аналогичными для любого другого языка.

Как происходит авторизация?

Авторизация ВКонтакте ничем не отличается от любой другой авторизации через сторонний сервер. Этот процесс отлично описал пользователь StackOverflow qnub :

  1. На сервисе (в данном случае ВК) необходимо зарегистрировать приложение и получить ключ API.
  2. После этого приложение (сайт) могут делать запрос личных данных пользователя у стороннего сервиса через этот самый API, для чего:
    • перенаправить пользователя (браузер пользователя посредством посылки ему HTTP-ответа 302 Redirect) по специально сформированной ссылке на сервис предоставляющий API;
    • пользователь произведёт там какие-то действия, предположительно авторизуется и разрешит доступ к данным.
  3. По завершении действий пользователь будет перенаправлен сторонним сервисом посредством всё того же 302 Redirect на URL переданный в параметрах специально сформированной ссылки .

Шаг первый. Зарегистрировать своё приложение и получить ключ

Этот шаг самый простой. Нужно перейти на страницу ВК для разработчиков: https://vk.com/dev - и нажать на кнопку «Создать приложение». Тип указываем как «Standalone-приложение», имя, естественно, указываем произвольное. После этого в разделе «Мои приложения» появится (что бы вы думали?) ваше приложение. Смело нажимайте «редактировать», затем переходите в раздел «Настройки» - там первой же строкой вы увидите надпись «ID приложения: 1234567 ». Эти цифры - всё, что вам нужно запомнить для авторизации.

Заметьте, что нет никакого смысла скрывать ID приложения - он публично показывается, например, при отправке сообщения на стену через это приложение. Ни токены, ни любую другую информацию украсть, используя ID, нельзя. В общем-то, вы можете использовать даже ID моего приложения (если вам нужно написать небольшой скрипт для себя).

Шаг второй. Формирование специальной ссылки

Далее вам нужно направить пользователя по специально сформированному адресу (её упоминания выделены жирным цветом в первом разделе статьи), где он подтвердит, что хочет разрешить вашему приложению выполнять какие-то действия со своим аккаунтом. Как же формируется эта ссылка?

Этот процесс подробно описан в документации . Однако, если вы обратились к этой статье, я предполагаю, что вам не хватило информации в документации, и поэтому перескажу всё своими словами. Ссылка имеет следующий вид: хост?параметры. Параметры имеют вид нескольких пар вида ключ=значение разделённых символами & .

Хост всегда остаётся неизменным: https://oauth.vk.com/authorize . Набор параметров так же неизменен:

  • client_id . Здесь стоит указать те самые цифры, которые мы добыли в первом шаге.
  • redirect_uri . Адрес, по которому будет перенаправлен пользователь. Для Standalone приложений это только https://oauth.vk.com/blank.html .
  • display . Этот параметр отвечает за то, как будет показываться страница авторизации. Доступно три варианта: page , popup и mobile . Если не уверены, используйте page .
  • scope . В этом параметре вам следует через запятую перечислить параметры доступа, которые вам необходимы. Полный список доступных параметров приведён на соответствующей странице документации. Обращаю ваше внимание, что можно не указывать вообще ничего и просто не писать этот параметр. Чтобы узнать, какие опции доступа вам нужны посмотрите в документацию методов , которые вы собираетесь использовать.
  • response_type . Указываем token и идём дальше.
  • v . Версия API. Актуальная – 5.59 .

https://oauth.vk.com/authorize?client_id=1&display=page&redirect_uri=http://example.com/callback&scope=friends&response_type=token&v=5.59

Шаг третий. Что дальше?

http://REDIRECT_URI#access_token=TOKEN 3&expires_in=TIME &user_id=ID

Нас интересует TOKEN . Как же направить пользователя на страницу из Java-приложения и как получить адрес страницы, на которую его перенаправит ВК (чтобы извлечь из неё токен)? Существует два способа.

Если вы решили пойти по этому пути, то вы просто открываете браузер системы по умолчанию с полученной выше ссылкой, а пользователю каким-то образом сообщаете, что он должен скопировать из URL токен и вставить его в какое-то поле. Понятно, что у этого метода отвратительный UX, однако его можно реализовать легко и быстро. Вполне подойдёт, если вы пишете приложение для себя - чтобы скачать музыку или получать уведомления. Реализуется он следующим образом:

Public String askToken(String link) throws IOException, URISyntaxException{ //Opens link in default browser Desktop.getDesktop().browse(new URI(link)); //Asks user to input token from browser manually return JOptionPane.showInputDialog("Please input access_token param from browser: "); }

Буржуазный, через веб-компоненты

Если вы решили пойти по этому пути, то вам потребуется использовать какую-либо стороннюю GUI-библиотеку (или по крайней мере JavaFX), у которой в арсенале есть свой компонент браузера. Над таким бразуером ваша программа будет иметь полную власть, и вы сможете извлечь адрес, на который вас перенаправил ВК, программными средствами. На JavaFX это можно реализовать следующим образом:

Import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.Scene; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; public class Main extends Application{ public static final String REDIRECT_URL = "https://oauth.vk.com/blank.html"; public static final String VK_AUTH_URL = ""; //TODO!!! public static String tokenUrl; public static void main(String args){ System.out.println(Main.getTokenUrl()); } public static String getTokenUrl(){ launch(Main.class); return tokenUrl; } @Override public void start(Stage primaryStage) throws Exception { final WebView view = new WebView(); final WebEngine engine = view.getEngine(); engine.load(VK_AUTH_URL); primaryStage.setScene(new Scene(view)); primaryStage.show(); engine.locationProperty().addListener(new ChangeListener(){ @Override public void changed(ObservableValue observable, String oldValue, String newValue) { if(newValue.startsWith(REDIRECT_URL)){ tokenUrl=newValue; primaryStage.close(); } } }); } }

Заключение

Таким образом, мы научились получать access token ВКонтакте, с помощью которого можно вызывать методы API. Если эта статья вызовет у сообщества интерес, в следующей статье я опишу, как вызывать те или иные API-методы с помощью токена, как проверять токен на валидность (метод secure.checkToken() , конечно), и напишу какое-нибудь демонстрационное приложение, например, для сохранения всей музыки из плейлиста на компьютер. Кстати, не стоит забывать, что на самом деле всё придумано до нас, и уже есть библиотеки для работы с VK API почти для любого языка. У нас есть , в которой мы постарались собрать лучшие из них.

Если есть какие-то идеи или вопросы - добро пожаловать в комментарии (я их читаю и всем отвечаю). Так же вопросы можно задать

Разработчикам довольно часто приходится сталкиваться с приложениями и сервисами, которые в процессе взаимодействия с социальной сетью Вконтакте, требуют ключ доступа — access_token.

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

Как будет проходить процесс

Все что от нас потребуется, подставить в URL адрес id приложения. Также доступно редактирования разделов, к которым мы разрешаем доступ через создаваемый access_token.

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

Ссылка для получения ключа

Вот готовый url адрес. Здесь нас, прежде всего, интересуют данные после знака =. В примере ниже там написано ID-Приложения . Мы, в свою очередь, подставим там конкретное число.

Https://oauth.vk.com/authorize?client_id=ID-приложения&scope=notify,photos,friends,audio,video,notes,pages,docs,status,questions,offers,wall,groups,messages,notifications,stats,ads,offline&redirect_uri=https://api.vk.com/blank.html&display=page&response_type=token

Также обратите внимание на данные, после слова «scope» . Здесь мы перечисляем разделы, к которым ключ откроет доступ. Для того чтобы запретить приложения доступ к разделу с нашими друзьями, уберите из ссылки текст «friends» . Остальное по аналогии.

Теперь осталось только получить ID.

Получаем ID через собственное приложение

Для его создания, нам нужно перейти в соответствующий раздел, доступный в кабинете для разработчиков. Перейдите туда по ссылке.

Https://vk.com/apps?act=manage

И нажмите на кнопку «Создать приложение» .

Укажите название и тип приложения (см. ). Затем нажмите на кнопку «Подключить приложение» .

С недавнего времени, все операции в кабинете для разработчиков, нужно подтверждать через СМС. В открывшемся окне выберите пункт «Подтвердить через СМС» . Получите код на свой мобильный телефон, затем введите его в форму.

Приложение будет создано. Теперь перейдите на вкладку «Настройки» . Здесь в блоке , будет указан нужный нам набор цифр. Скопируйте его.

Теперь у нас есть все необходимое.

Используем ID официального приложения Вконтакте

Второй способ получения айдишника — это просто взять готовое приложение. И лучше всего — официальное приложение Вконтакте для Android. Его ID — «2890984» . Можете использовать.

Получаем Access_token

Https://oauth.vk.com/authorize?client_id=2890984&scope=notify,photos,friends,audio,video,notes,pages,docs,status,questions,offers,wall,groups,messages,notifications,stats,ads,offline&redirect_uri=https://api.vk.com/blank.html&display=page&response_type=token

В браузере откроется страница, на которой указано уведомление о том, что не стоит предоставлять ключ доступа третьим лицам. А в адресной строке браузера — сформированный ключ. Он находится между значениями «access_token=» и «&expires_in» . Скопируйте его.

Заключение

Ключ можно обновить, повторив описанные шаги. Воздержитесь от его распространения третьим лицам, а также от получения ключа, используя не надежные приложения и сервисы. Рассмотренный способ самый безопасный.

В последнее время появляется огромное количество онлайн-сервисов, компьютерных или мобильных приложений, скриптов, которые предназначены для ВКонтакте, но для их работы необходимо пройти авторизацию через access_token.

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

Где взять access_token?

Сегодня мы разберем то, как авторизоваться в ВКонтакте, используя прямую ссылку API ВКонтакте (на базе протокола OAuth ) или, как его еще называют, Implicit flow . Авторизация, если вы используете этот метод, производится через приложение Вк, которое указывается как ID . Сегодня такой метод считается самым безопасным. Вы можете натолкнуться на статьи, в которых рассказывается о методах получения access_token с использованием приложений, которые вызывают (и не зря!) подозрение. Но сегодня мы поговорим о том, как авторизоваться через официальные приложения ВКонтакте.

ID_ПРИЛОЖЕНИЯ

Если с этим разобрались, закономерно всплывает следующий вопрос: где взять эту самую ссылку?

Получение токена через собственное приложение.

  • С использованием собственного приложения. Этот метод заведомо рассчитан на то, что у вас есть приложение собственной разработки. Если у вас его нет – самое время создать. Сделать это очень легко: достаточно перейти по ссылке vk.com/apps?act=manage и кликнуть на «Создать приложение ».

Система попросит ввести название для приложения. Как пример, можете использовать «Получение access_token ». Проверьте, если ли галочка «Standalone-приложение ». Далее нажимайте на «Подключить приложение ».

Чтобы подтвердить приложение, надо будет ввести код, который вам придет на указанный номер телефона. На этом этапе создания приложения можно зафиксировать мобильное устройство к странице Вк. Чтобы это сделать, надо кликнуть на «Привязать устройство ». Можно и без привязки к аккаунту. Тогда просто необходимо перейти по ссылке «Подтвердить через SMS ».

После того, как вы подтвердите регистрацию, откроется страница, на которой изложена информация о приложении, которое было создано. Нажмите на «Настройки », которые расположены в левом углу. Там расположен client_id – ID приложения ВКонтакте.

https://oauth.vk.com/authorize?client_id=5563738 &scope=notify,photos,friends,audio,video,notes,pages,docs,status,questions,offers,wall,groups,messages,notifications,stats,ads,offline&redirect_uri=http://api.vk.com/blank.html&display=page&response_type=token

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

Получение токена через официальное приложение VK.

Метод отличается от того, который был описан ранее, лишь тем, что вам не нужно создавать собственное приложение. Используйте уже созданное. Ему можно стопроцентно доверять.

Метод будет рассматривать на примере ВКонтакте для Android. ID такой: 2890984 . Именно эту комбинацию надо подставить в ссылку.

Получится следующее:

https://oauth.vk.com/authorize?client_id=2890984 &scope=notify,photos,friends,audio,video,notes,pages,docs,status,questions,offers,wall,groups,messages,notifications,stats,ads,offline&redirect_uri=http://api.vk.com/blank.html&display=page&response_type=token

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

✅ Права доступа:

  • В примерах, которые описаны выше, параметр scope содержит многие названия разделов социальной сети ВКонтакте: audio, photos, notify, friends. Это те разделы, которые будут открыты для приложения. Аccess_token может быть использован по-разному. ID, который вы используете, принадлежит доверенному приложению. Именно поэтому вы можете создать access_token, у которого есть все права доступа. Он становится универсальным, так что может быть использован везде.

✅ access_token:

Последний вопрос, которого надо коснуться, так это то, как получить непосредственно сам ключ access_token . После того, как вы получите ссылку (использовав один из методов), надо будет перейти по ней, чтобы открыть право доступа.

Уже после этого в вашей адресной строке появится необходимый ключ. Он копируется вручную: после access_token= и перед &expires_in.

Ну и закончить стоит несколькими советами:

  • Не передавайте ключ access_token посторонним лицам.
  • Не стоит проходить авторизацию с использованием приложений, которые не вызывают доверия. Рекомендуется использовать только собственные или официальные.
  • Удалите ключ после того, как вы его использовали. Если понадобится, вы всегда сможете создать новый.
  • Все активные сеансы стоит завершить после того, как в них исчезнет необходимость. Это вы можете сделать через настройки безопасности аккаунта.

Социальные сети стали неотъемлемым инструментом продвижения сайтов. Для раскрутку сайта через соц. сети следует создать группу или страничку данного сайта. Набирать подписчиков, выкладывать новости на стену и много чего ещё (это тема отдельной заметки). Многие эти процессы можно автоматизировать используя API (интерфейс прикладного программирования) соответствующей социальной сети. В этой заметке я разберу как подключиться к vk api (вконтакте), как начать работать c вк апи, а так же приведу несколько примеров работы с api вконтакте.

Создание приложения вконтакте

И так приступим. Vk api имеет много методов, но одним из основных их различий является то, что для выполнения запросов к вк апи через некоторые методы требуется специальный ключ доступа - токен (access_token). Получить его можно создав своё приложение. Нам предлагают несколько видов приложений, но я выбираю тип Standalone. Мне его хватает. Для начала создания приложения переходим по ссылке и попадаем в следующее окно.


Здесь мы выбираем тип и название нашего приложения. Нажимаем подключить приложение и получаем на номер телефона, привязанному к аккаунту вк из которого мы создаём приложение, смс с кодом. Вводим его и переходим в следующее окно. В этом окне переходим в вкладку настройки.


В вкладке настройки мы видим поля с названием ID приложения и защитный ключ. Записываем куда нибудь эти данные. Больше ничего в вкладках я не делал. Состояние приложения оставил в положении отключено. Жмём сохранить настройки. Всё, мы создали приложение вконтакте.

Получение токена (access_token) api вк

Https://oauth.vk.com/authorize?client_id= &display=[вид окна] &redirect_uri=https://oauth.vk.com/blank.html&scope=[права приложения] &response_type=token&v=5.52

  • client_id - ID нашего приложения, полученный раньше.
  • display - вид окна, в котором будет происходить авторизация. Может быть page, popup, touch и wap
  • scope - права доступа нашего приложения относительно данных пользователя. О правах поподробнее ниже.

Права приложения вк относительно заданного пользователя могут задаваться в текстовом и цифровом виде. В текстовом это будет выглядеть так scope=friends,messages,groups . Этой строкой кода мы разрешили приложению vk доступ к друзьям, сообщениям и группам пользователя. Так же права задаются и в цифровом виде. Для каждого правила есть битовая маска и сумма этих масок и будет разрешать приложению определённые действия. Например право friends(+2), messages(+4096), groups(+262144), в итоге сумма битовых масок будет 266242 и код scope=266242 будет аналогом scope=friends,messages,groups . Отдельное внимание хочу уделить праву offline . Установка этого права делает получаемый нами токен бесконечным. Если это право не задать через определённое время токен нужно будет получать снова. Подробнее о правах приложения вк можно почитать здесь . В итоге давайте составим адрес для получения токена приложению с правами доступа к друзьям, сообщениям и группам пользователя, а так же с бессмертным токеном. Id приложения пусть будет 123456. Данный адрес будет выглядеть так:

Https://oauth.vk.com/authorize?client_id=123456&display=page&redirect_uri=https://oauth.vk.com/blank.html& scope=friends,messages,groups,offline&response_type=token&v=5.52


Подтверждаем действие и попадаем на страницу с предупреждением, из адресной строки браузера берём наш полученный токен. Это будет после #access_token= , код expires_in=0 говорит нам что токена (access_token) api вк бессмертный. Соответственно user_id= это id пользователя, для которого мы получили токен.

Зайдём в настройки аккаунта во вкладку настройки приложений и увидим наше приложение.


Теперь у нас всё готово для работы с апи вконтакте.

Примеры работы с api vk

Для работы с api вк я использую язык программирования php. Поэтому и примеры я буду приводить на php. Для того, что бы выполнить какое либо действие, нам нужно послать запрос к api vk. Запрос мы можем послать и через адресную строку браузера. Тоесть запрос это есть определённый урл адрес с заданными в нём определёнными параметрами. Синтаксис составления такого урл описан ниже.

Https://api.vkontakte.ru/ method/[ВЫЗЫВАЕМЫЙ МЕТОД]?[ПАРАМЕТРЫ ВЫЗЫВАЕМОГО МЕТОДА]

Список методов api vk находится здесь .Больше пока заострять на этом внимания не будем, потом на реальных примерах всё станет ясно. Осталось только разобраться как запрос к апи вконтакте отправить средствами php. Для этого будем использовать php функцию file_get_contents , а так же функцию json_decode так как ответ от сервера мы получим в формате json. Вот шаблон выполнения запроса к вк на php.

$result=json_decode(file_get_contents("https://api.vkontakte.ru/ method/[ВЫЗЫВАЕМЫЙ МЕТОД]?[ПАРАМЕТРЫ ВЫЗЫВАЕМОГО МЕТОДА]"));

ну а теперь несколько примеров работы с апи vk

$userid=12345; $mytoken=56789; /*вернёт объект с значениями пола и дня рождения пользователя*/ $request_params = array("user_id" => $userid, "fields" => "sex", "fields" => "bdate"); $get_params = http_build_query($request_params); $result = json_decode(file_get_contents("https://api.vk.com/method/users.get?". $get_params)); /*проверка пользователя на бан вк*/ $request_params = array("user_id" => $user_id, "fields" => "deactivated"); $get_params = http_build_query($request_params); $result = json_decode(file_get_contents("https://api.vk.com/method/users.get?". $get_params)); if(isset($result->response->deactivated)){ echo "Страница заморожена или удалена"; } /*отправим сообщение пользователю с user_id=222222*/ $mesage="Привет, как дела?"; //кодируем строку $msg=urlencode($mesage); $result = json_decode(file_get_contents("https://api.vkontakte.ru/method/ messages.send?user_id=222222& message=".$msg."&access_token=".$mytoken)); /*приглосим в друзья пользователя с user_id=222222*/ $mesage="Давайте дружить"; $msg=urlencode($mesage); $result=json_decode(file_get_contents("https://api.vkontakte.ru/ method/friends.adduser_id=222222& text=".$msg."&access_token=".$mytoken));

Методов у апи много, так что советую читать документацию. Конечно запросы не всегда выполняются правильно и возвращают коды ошибок. Ошибки можно посмотреть здесь . Так что вот так вот просто можно подключиться к api vk и автоматизировать свои действия в контакте.