+7 (499) 408 08 75
г. Люберцы, Октябрьский пр-т, 111/119
пн-пт: 10:00-18:00
Заказать звонок
Войти

Как получить access_token для публикации на стене групп ВК

28 окт 2024
Сервис ВК API и панель управления их приложениями изменилась, поэтому стоит выделить актуальный способ получения access_token для приложений до марта 2025 и после. Теперь для получения access_token в целях публикации на стене группы ВК необходимо сначала создать подходящее приложение, а затем получить access_token путём oauth авторизации.

2 способа: делать посты в ВК и получить access_token

Через VK Постинг Самостоятельно (написав код)

Как создать подходящее Standalone-приложение в новой панели ВК

  1. Предварительно авторизоваться в id.vk.com и подтвердить свои данные (физ. лица или юридического)
  2. Перейти в панель управления приложениями VK ID и нажать кнопку "Создать приложение"
  3. Отметить галочками "Web", затем указать url сайта, с которого планируются обращения к VK API, подтвердить создание приложения.
  4. Затем перейти в редактирование данного приложения, копируем в нём ID приложения и Защищенный ключ, затем переходим во вкладку "Доступы" и листаем чуть ниже до области "Расширенные доступы", там необходимо убедиться, чтобы были включены: стена, сообщества, фотографии, документы, заметки.

Снимок экрана 2024-10-28 в 15.34.34.png

Для получения необходимого доступа по API должно быть достаточно стены, сообщества и фотографии, НО в моём случае положительный ответ по API я получил после того, как отметил еще документы и заметки, возможно просто совпадение, перепроверять я не стал. Теперь переходим к тому, чтобы получить access_token.

Получаем access_token для публикации в на стену группы VK в 2 этапа к приложениям до 2024 года

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

Этап 1 для старых приложений:
Открываем ссылку предварительно подставив необходимые данные

https://oauth.vk.com/authorize?client_id=ID_ПРИЛОЖЕНИЯ&display=page&redirect_uri=https://api.vk.com/blank.html&scope=offline,wall,photos&response_type=code



Этап 2 для старых приложений:
Открываем ссылку предварительно подставив необходимые данные

https://oauth.vk.com/access_token?client_id=ID_ПРИЛОЖЕНИЯ&client_secret=ЗАЩИЩЕННЫЙ_КЛЮЧ&redirect_uri=https://api.vk.com/blank.html&code=СЕКРЕТНЫЙ_КОД

Получение access_token для новых приложений с 2025 года

Этап 1
Делаем GET-запрос на адрес предварительно подставив необходимые данные

https://id.vk.com/authorize?response_type=code&client_id=ID_ПРИЛОЖЕНИЯ&scope=offline,wall,photos
&redirect_uri=https://oauth.vk.com/blank.html&state=12345&code_challenge=K8KAyQ82WSEncryptedVerifierGYUDj8K&code_challenge_method=S256

Нужно убедиться, что redirect_uri актулен и добавлен в список доверенных в созданном приложении. Далее state должен быть не менее 32 символов с содержанием A-Z, a-z, 0-9, знака - и _ , по аналогии должен быть создан code_challenge, который генерируется из code_verifier в sha256, закодированный в base64. То есть, сначала нужно придумать уникальную строку с учетом ранее перечисленных требований к её содержанию, затем закодировать её в base64, а чтобы получить code_challenge — получившуюся строку кодируем в sha256. Ловко придумано, не правда ли? :)  


Этап 2

Теперь просто открыть ссылку и подставить в неё данные не получится, так как ВК вдруг захотел получить их POST-запросом и с другим содержанием:

Делаем POST-запрос на URL: https://id.vk.com/oauth2/auth

$params = array(
 'grant_type' => 'authorization_code',
 'code_verifier' => $code_verifier,
 'redirect_uri' => $my_url,
 'code' => $code,
 'client_id' => $app_id,
 'device_id' => $device_id,
 'state' => $state
);


В теле POST запроса нужно указать ранее отправленные и затем полученные параметры и если у вас это удастся, то вы молодец. А если не удастся, то WELCOME для обсуждения этого вопроса в телеграм чат: https://t.me/agmarketing_chat

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

Внимание! Еще одно обновление VK в 2025 году затронуло доступы к фотографиям и запретило их получать "по умолчанию" или в настройках приложения. Теперь многие могут получить ошибку access denied: no access to call this method. It cannot be called with current scopes, например при работе с методами photos, wall. 

Цитирую — "Теперь запрос дополнительных доступов может быть рассмотрен только в рамках обращения в Поддержку. Чтобы мы могли проверить возможность предоставления разрешений, нужно подробно описать как будет использоваться доступ, в рамках своего приложения. Предоставить ссылку на сайт и сообщество, о которых идет речь.".

Следовательно, для возможности публикации постов на стене группы ВК с загрузкой фотографии через API теперь необходимо получать токен к приложению, у которого есть необходимые права доступа scope=photos,wall,groups. В старых версиях приложений это было предусмотрено и были соответствующие доступы, сейчас уже нет. Поэтому придется обращаться в поддержку если вам нужно больше прав, чем предусмотрено самим приложением.

А для тех, кто хочет реализовать автопостинг новостей в ВК и Телеграм на CMS DLE — я подготовил плагин, позволяющий получить ACCESS_TOKEN автоматически без этих страданий и продолжить работу дальше, дублируя публикации на стену группы ВК и Телеграм. Думаю данная заметка многим будет полезна.

Обсуждение: Чат в ТелеграмЧат в Телеграм