Ошибка API ВК 15 и 100 при публикации фотографий на стене сообщества через WordPress: «Доступ запрещен» и «Нет фотографиPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Ошибка API ВК 15 и 100 при публикации фотографий на стене сообщества через WordPress: «Доступ запрещен» и «Нет фотографи

Сообщение Anonymous »

Я разрабатываю плагин WordPress (lakend-crossposter.php), который автоматически публикует записи блога на стене сообщества ВК. Я использую официальный PHP SDK (vkcom/vk-php-sdk). У меня возникла проблема с загрузкой изображений: сообщение публикуется, но без прикрепленной фотографии. В логах видно две ошибки API ВК:
  • Access denied: no access to call this method. It cannot be called with current scopes. (Code: 15)
  • 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.199
  • Токены:

    group_token: токен сообщества (предназначен для всех вызовов API, включая wall.post).
  • user_token: токен пользователя (планировался для загрузки фотографий, но в настоящее время не используется в логике загрузки).
[*]Цель: Плагин пытается загрузить изображение публикации и прикрепить его к сообщению на стене.

Фрагменты кода (упрощенно):
Вот как выглядит фотография загрузка и отправка сообщений обрабатываются в классе CPA_ВКонтакте:
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 is loaded but not used for photos
error_log('CPA VK Construct: group_token ' . (!empty($this->group_token) ? '✅ found' : '❌ missing'));
}

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
];

// Attempt to upload photos (uses group_token)
$attachments = $this->upload_post_attachments($post->ID);
if (!empty($attachments)) {
$params['attachments'] = implode(',', $attachments);
} else {
// If no photo, add the link as an attachment
$params['attachments'] = get_permalink($post);
}

// Send the post using group_token
$response = $this->vk->wall()->post($this->group_token, $params);
// ...
}

3. Способ загрузки фотографий (upload_post_attachments):
private function upload_post_attachments($post_id) {
// ...
// ⚠️ USING ONLY GROUP TOKEN FOR PHOTO UPLOAD
if (empty($this->group_token)) { /* ... */ }

// 1. Get upload server (via group_token)
$upload_server = $this->vk->photos()->getWallUploadServer($this->group_token, [
'group_id' => intval($this->group_id)
]);

// 2. Download and upload file to VK server
$temp_file = $this->download_image($photo_url);
$upload_response = $this->upload_file_to_vk($upload_server['upload_url'], $temp_file);

// 3. Save photo to group wall (also via 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 ✅ found
[22-Feb-2026 09:57:41 UTC] CPA VK Construct: group_id #0000000
[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 (это подтверждает журнал «Ошибка загрузки фотографии»). Я использую токен группы для всех звонков, включая процесс загрузки фотографий.
  • Почему токен группы, который успешно работает для wall.post (в журналах нет ошибок для этого звонка), не имеет необходимых разрешений (scopes) для вызова photos.getWallUploadServer и photos.saveWallPhoto?
  • В документации ВК указано, что для загрузки фотографии на стену сообщества требуются разрешения на фотографии и стену, а также токен группы или токен пользователя с правами редактора. Токен группы был создан в настройках сообщества с установленными флажками для фотографий и стены. Разве этого недостаточно?
  • Нужно ли мне использовать токен пользователя (user_token) для этапов загрузки (получение сервера и сохранение) или проблема в чем-то другом (например, в разрешениях самого приложения VK ID)?
Спасибо за помощь! Для контекста я прикрепил полный код классов плагина.


Подробнее здесь: https://stackoverflow.com/questions/798 ... press-acce
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»