goodport / laravel-vk-community-publisher
Publish posts and links with preview images to VK communities.
Package info
github.com/goodport/laravel-vk-community-publisher
pkg:composer/goodport/laravel-vk-community-publisher
Requires
- php: ^8.3
- illuminate/contracts: ^12.0
- illuminate/http: ^12.0
- illuminate/support: ^12.0
- intervention/image: ^2.5
- psr/log: ^3.0
Requires (Dev)
- laravel/pint: ^1.32
- orchestra/testbench: ^10.0
- phpunit/phpunit: ^11.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-11-05 17:42:55 UTC
README
Публикация постов и ссылок с превью на стены сообществ ВКонтакте.
Пакет не зависит от моделей, страниц и структуры хранения конкретного приложения. Данные сообщества передаются при каждом вызове, поэтому один пакет может публиковать в любое количество сообществ.
Требования
- PHP 8.3+
- Laravel 12
- Пользовательский токен ВК с доступом к стене сообщества. Пользователь должен иметь право публиковать от имени сообщества.
- Scope
photosне нужен: превью ВК забирает самостоятельно по публичному URL.
Установка
composer require goodport/laravel-vk-community-publisher
При необходимости опубликуйте конфиг:
php artisan vendor:publish --tag=vk-community-publisher-config
Настройка
Файл config/vk-community-publisher.php:
api_version— версия VK API (по умолчанию5.199);base_url— адрес API (по умолчаниюhttps://api.vk.ru/method);timeout— таймаут HTTP-запроса в секундах;log_channel— канал Laravel для логов; токены в логи не попадают;link_parse_attemptsиlink_parse_retry_delay_ms— повторыwall.parseAttachedLink, который иногда отвечает без фото;preview— максимальный и минимальный размеры превью, качество JPEG.
Токены и id сообществ в конфиг пакета не входят. Передавайте их через
CommunityCredentials.
Использование
use Goodport\VkCommunityPublisher\Contracts\CommunityPublisher; use Goodport\VkCommunityPublisher\Data\CommunityCredentials; use Goodport\VkCommunityPublisher\Data\CommunityPost; $publisher = app(CommunityPublisher::class); $credentials = new CommunityCredentials( groupId: 123456789, accessToken: config('services.vk.token'), ); $published = $publisher->publish(new CommunityPost( credentials: $credentials, message: "Текст поста\n\nhttps://example.com/page", linkUrl: 'https://example.com/page', )); $publisher->delete($credentials, $published->postId);
Ссылки и превью
Карточку ссылки ВК строит из linkUrl. Фото для превью берётся из результата
wall.parseAttachedLink для linkParseUrl (по умолчанию — linkUrl).
ВК принимает в link_photo_id только фото, которое сам подготовил для этой
ссылки. Если нужно отдать конкретный кроп, страница по linkParseUrl должна
показать его в vk:image или og:image. Пакет страницы не рендерит — этот
адаптер остаётся в приложении.
Если ВК закешировал превью, передайте в linkParseUrl уникальный параметр,
например метку времени. Пакет отправляет URL в ВК без изменений.
Подготовить JPEG 1200x630 можно через PreviewImageFactory:
use Goodport\VkCommunityPublisher\Preview\PreviewImageFactory; $preview = app(PreviewImageFactory::class)->make($binary); // $preview?->contents, $preview?->width, $preview?->height
По умолчанию фабрика не увеличивает картинку. Для старых источников, которые
нужно растянуть, передайте allowUpscale: true.
Ошибки
VkApiException выбрасывается при ошибке ВК, отсутствии фото для превью и
ответе без post_id. Пакет не подменяет ссылку постом без превью: либо пост
получает валидное фото, либо операция завершается ошибкой.
Тесты
composer install vendor/bin/phpunit
Тесты используют HTTP-фейки Laravel и не обращаются к реальному ВК.
Лицензия
MIT.