Document VK API community-token photo-upload limitation; add Kate Mobile auth flow

VK's photos.getWallUploadServer only accepts user tokens — community tokens fail with error 27 ('Group authorization failed: method is unavailable with group auth') or error 15. The previous note hinted users could just enable the 'photos' right on a community token, which is wrong: the limitation is hard.

- Restore the accurate fallback warning (community token = photos as links)
- Add an explicit two-path help block: A) user token via Kate Mobile (app_id 2685278) implicit OAuth, with a prefilled authorize URL, B) community token for text-only

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
zuevav
2026-04-30 15:56:20 +03:00
parent 5d62158b1b
commit a0dd7b1ed4
2 changed files with 25 additions and 16 deletions
+1 -4
View File
@@ -292,10 +292,7 @@ class VKAPI
try {
$result = $this->wallPost($numericGroupId, $messageWithPhotos, []);
$firstError = $uploadErrors[0] ?? 'неизвестная ошибка';
$result['warning'] = 'Фото добавлены как ссылки — VK отказал в загрузке (' . $firstError . '). '
. 'Проверьте, что ключ сообщества создан с правом «Фотографии» и принадлежит ИМЕННО той группе, в которую вы постите. '
. 'Если используете пользовательский токен — у него должны быть права wall, photos, groups.';
$result['warning'] = 'Фото добавлены как ссылки. Метод photos.getWallUploadServer не работает с токеном сообщества (это ограничение VK API: error 27 «group auth» или error 15 «access denied»). Чтобы фото прикреплялись как вложения, нужен ПОЛЬЗОВАТЕЛЬСКИЙ access token с правами wall, photos, groups, offline.';
return $result;
} catch (Exception $e) {
throw new RuntimeException('Ошибка постинга: ' . $e->getMessage() . '. Также нет прав на загрузку фото.');
+24 -12
View File
@@ -625,21 +625,33 @@ foreach ($channels as $ch) {
</div>
<div class="form-group">
<details class="vk-help" open>
<summary>Как получить токен сообщества (рекомендуется)?</summary>
<ol style="margin: 10px 0; padding-left: 20px; font-size: 0.9em;">
<li>Откройте свою группу в VK → <strong>Управление</strong></li>
<li>В меню справа выберите <strong>«Работа с API»</strong> → вкладка <strong>«Ключи доступа»</strong> → <strong>«Создать ключ»</strong></li>
<li>Включите права: <strong>Управление сообществом</strong>, <strong>Сообщения сообщества</strong>, <strong>Фотографии</strong>, <strong>Стена</strong> (Wall)</li>
<li>Скопируйте созданный ключ и вставьте его в поле выше → «Сохранить»</li>
<summary>Как получить access token для VK?</summary>
<p style="font-size: 0.9em; margin: 10px 0;"><strong>VK API имеет ограничение:</strong> загружать фото на стену может только <em>пользовательский</em> токен. Токен сообщества постит только текст (фото уйдут как ссылки).</p>
<p style="font-size: 0.92em; margin: 12px 0 6px;"><strong>Вариант A — пользовательский токен через Kate Mobile (рекомендуется, фото работают)</strong></p>
<ol style="margin: 6px 0 10px; padding-left: 20px; font-size: 0.9em;">
<li>Перейдите по ссылке (откроется страница авторизации VK): <br>
<a href="https://oauth.vk.com/authorize?client_id=2685278&scope=photos,wall,groups,offline&redirect_uri=https://oauth.vk.com/blank.html&display=mobile&response_type=token&revoke=1&v=5.199" target="_blank" rel="noopener" style="word-break: break-all;">oauth.vk.com/authorize?client_id=2685278&scope=photos,wall,groups,offline&...</a>
</li>
<li>Нажмите <strong>«Разрешить»</strong> от лица Kate Mobile</li>
<li>В адресной строке после <code>#</code> найдите <code>access_token=...</code> — скопируйте значение до символа <code>&amp;</code></li>
<li>Вставьте в поле выше → «Сохранить»</li>
</ol>
<p style="font-size: 0.85em; color: var(--text-secondary); margin-top: 10px;">
<strong>Важно:</strong> ключ сообщества бессрочный и не блокируется VK. Он постит и грузит фото только в свою группу — для нескольких групп создайте отдельный ключ в каждой.
<p style="font-size: 0.82em; color: var(--text-secondary); margin: 6px 0 14px;">
Скоуп <code>offline</code> делает токен бессрочным. Kate Mobile (<code>app_id=2685278</code>) пока не заблокирован VK, в отличие от VK Admin.
</p>
<p style="font-size: 0.85em; color: var(--text-secondary); margin-top: 8px;">
<strong>Если фото уходят как ссылки</strong> (предупреждение в архиве) — значит у ключа нет права <strong>Фотографии</strong>, или ключ создан в другой группе. Удалите ключ и создайте заново в той же группе, в которую постите, отметив права: Управление, Стена, Фотографии, Сообщения сообщества.
<p style="font-size: 0.92em; margin: 12px 0 6px;"><strong>Вариант B — токен сообщества (только текст, без фото)</strong></p>
<ol style="margin: 6px 0 10px; padding-left: 20px; font-size: 0.9em;">
<li>Группа VK → <strong>Управление</strong> → <strong>Работа с API</strong> → <strong>Создать ключ</strong></li>
<li>Права: Управление, Стена, Фотографии, Сообщения сообщества</li>
<li>Вставьте ключ в поле выше → «Сохранить»</li>
</ol>
<p style="font-size: 0.82em; color: var(--text-secondary); margin-top: 6px;">
Бессрочный, но из-за ограничения VK <code>photos.getWallUploadServer</code> не работает с такими токенами — фото уходят ссылками в тексте.
</p>
<p style="font-size: 0.8em; color: var(--text-secondary); margin-top: 8px;">
Старый способ через <a href="https://vkhost.github.io/" target="_blank">vkhost.github.io</a> / VK Admin сейчас не работает — VK заблокировал это приложение (ошибка <code>[8] Application is blocked</code>).
<p style="font-size: 0.78em; color: var(--text-secondary); margin-top: 10px;">
Старый способ через <a href="https://vkhost.github.io/" target="_blank" rel="noopener">vkhost.github.io</a> (VK Admin) больше не работает — VK заблокировал это приложение (<code>[8] Application is blocked</code>).
</p>
</details>
</div>