Решение проблемы загрузки изображений в VK при кросс-постинге из WordPress
При разработке плагина WordPress для автоматической публикации постов в группу ВКонтакте возникла проблема с загрузкой изображений. Пост публикуется, но без картинки. В логах фиксируются две ключевые ошибки API VK.
Контекст и архитектура решения
Плагин использует стандартные хуки WordPress (publish_post) для отправки контента. Для работы с VK применяется официальный PHP SDK (vkcom/vk-php-sdk) версии API 5.131. В архитектуре задействованы два типа токенов:
- group_token: токен сообщества, используемый для вызова wall.post
- user_token: токен пользователя, который планировалось использовать для загрузки фото, но в текущей реализации не задействован
Сценарий работы: плагин пытается загрузить миниатюру поста и прикрепить её к публикации на стене группы.
Ключевые ошибки в логах
- Code: 15: "Access denied: no access to call this method. It cannot be called with current scopes." - возникает на этапе загрузки фото
- Code: 100: "One of the parameters specified was missing or invalid: Violated: link_photo_sizing_rule. No photo given" - появляется при отправке поста без изображения
Анализ текущей реализации
В текущем коде для всех операций, включая загрузку изображений, используется исключительно токен сообщества (group_token). Это вызывает проблему, поскольку методы photos.getWallUploadServer и photos.saveWallPhoto требуют других прав доступа.
Основные этапы процесса:
- Инициализация с проверкой наличия токена сообщества
- Попытка загрузки фото с использованием group_token через методы getWallUploadServer и saveWallPhoto
- Отправка поста на стену через wall.post с тем же токеном
Корень проблемы и возможные решения
Ошибка Code: 15 указывает на недостаточность прав токена сообщества для вызова методов работы с фотографиями. Несмотря на то, что токен был сгенерирован с отмеченными правами photos и wall в настройках сообщества, этого оказывается недостаточно.
Существует два основных пути решения:
- Использование токена пользователя для этапов загрузки изображений (getWallUploadServer и saveWallPhoto), сохраняя токен сообщества только для wall.post
- Проверка прав приложения VK ID, которое может требовать дополнительной настройки scope в личном кабинете разработчика
Документация VK подтверждает, что для загрузки фото на стену группы действительно необходимы права photos и wall, но часто требуется именно пользовательский токен с соответствующими scope, либо дополнительная настройка приложения.