Я разрабатываю плагин для WordPress (
lakend-crossposter.php), который должен автоматически публиковать посты из блога в VK (стена группы). Использую официальный PHP SDK (
vkcom/vk-php-sdk). Возникла проблема с загрузкой изображений: пост уходит, но без картинки. В логах две ошибки VK API:
1.
Access denied: no access to call this method. It cannot be called with current scopes. (Code: 15)
2.
One of the parameters specified was missing or invalid: Violated: link_photo_sizing_rule. No photo given (Code: 100)
Контекст и архитектура:
Плагин WordPress использует стандартные хуки (
publish_post) для отправки.
Версия VK API:
5.131.
Токены:
group_token: Токен сообщества (используется для вызова wall.post).
user_token: Токен пользователя (планировался для загрузки фото, но сейчас не используется).
Сценарий: Плагин пытается загрузить миниатюру поста и прикрепить её к посту на стене.
Фрагменты кода (упрощенно):
Вот как происходит загрузка фото и отправка поста в классе
CPA_VKontakte:
1. Инициализация и проверка токенов (__construct):
public function __construct() {
$options = get_option('cpa_settings');
$this->group_token = $options['vk_group_token'] ?? '';
$this->group_id = $options['vk_group_id'] ?? '';
// user_token загружается, но дальше не используется для фото
error_log('CPA VK Construct: group_token ' . (!empty($this->group_token) ? '✅ найден' : '❌ отсутствует'));
}
2. Основной метод отправки (send_post):
public function send_post($post, $is_anniversary = false) {
// ...
$params = [
'owner_id' => -intval($this->group_id),
'from_group' => 1,
'message' => $message,
'v' => $this->api_version
];
// Пытаемся загрузить фото (использует group_token)
$attachments = $this->upload_post_attachments($post->ID);
if (!empty($attachments)) {
$params['attachments'] = implode(',', $attachments);
} else {
// Если нет фото, добавляем ссылку как вложение
$params['attachments'] = get_permalink($post);
}
// Отправляем пост используя group_token
$response = $this->vk->wall()->post($this->group_token, $params);
// ...
}
3. Метод загрузки фото (upload_post_attachments):
private function upload_post_attachments($post_id) {
// ...
// ⚠️ ИСПОЛЬЗУЕМ ТОЛЬКО ТОКЕН СООБЩЕСТВА ДЛЯ ЗАГРУЗКИ ФОТО
if (empty($this->group_token)) { /* ... */ }
// 1. Получаем сервер для загрузки (через group_token)
$upload_server = $this->vk->photos()->getWallUploadServer($this->group_token, [
'group_id' => intval($this->group_id)
]);
// 2. Скачиваем и загружаем файл на сервер VK
$temp_file = $this->download_image($photo_url);
$upload_response = $this->upload_file_to_vk($upload_server['upload_url'], $temp_file);
// 3. Сохраняем фото на стене группы (тоже через group_token)
$save_response = $this->vk->photos()->saveWallPhoto($this->group_token, [
'group_id' => intval($this->group_id),
'photo' => $upload_response['photo'],
'server' => $upload_response['server'],
'hash' => $upload_response['hash']
]);
// ...
}
Логи:
[22-Feb-2026 09:57:41 UTC] CPA VK Construct: group_token ✅ найден
[22-Feb-2026 09:57:41 UTC] CPA VK Construct: group_id 236177157
[22-Feb-2026 09:57:41 UTC] CPA VK Construct: VK API client initialized
[22-Feb-2026 09:57:41 UTC] CPA VK (Post ID: 302): Photo upload failed: Access denied: no access to call this method. It cannot be called with current scopes. (Code: 15)
[22-Feb-2026 09:57:41 UTC] CPA VK (Post ID: 302) [DEBUG]: Sending post to VK...
[22-Feb-2026 09:57:41 UTC] CPA VK (Post ID: 302): VK API Error: One of the parameters specified was missing or invalid: Violated: link_photo_sizing_rule. No photo given (Code: 100)
Вопрос:
Ошибка
Code: 15 возникает на этапе
getWallUploadServer или
saveWallPhoto (это видно по логу "
Photo upload failed"). Я использую токен сообщества для всех вызовов, включая загрузку фото.
Почему токен сообщества, который успешно работает для
wall.post (логов об ошибке
wall.post нет), не имеет прав (
scopes) для вызова
photos.getWallUploadServer и
photos.saveWallPhoto?
Документация VK гласит, что для загрузки фото на стену группы нужны права
photos и
wall, а также токен сообщества или пользователя с правами редактора. Токен сообщества генерировался в настройках сообщества с галочками напротив
photos и
wall. Этого недостаточно?
Нужно ли мне обязательно использовать токен пользователя (
user_token) для шагов загрузки фото (получение сервера и сохранение), или проблема в другом (например, в правах самого приложения VK ID)?
Заранее спасибо за помощь! Полный код классов плагина приложил к вопросу для контекста.