Полноценная библиотека для работы с VK Bot API, Callback API и Mini App в Laravel приложениях.
- 🤖 40+ методов Bot API - отправка сообщений, работа с пользователями, группами
- 📱 Mini App интеграция - валидация параметров, работа с пользователями
- ⌨️ Конструктор клавиатур - 7 типов кнопок с цветами
- 🔄 Callback API - полная поддержка Callback API
- 📡 Long Poll - поддержка Long Poll API
- 👥 Работа с сообществами - управление группами
- ✅ Автоматическая валидация - проверка всех данных перед отправкой
- 📊 Типы данных - удобные классы для User, Chat, Message
composer require letoceiling-coder/vkphp artisan vendor:publish --tag=vk-configVK_ACCESS_TOKEN=your_access_token_here
VK_SECRET_KEY=your_secret_key_here
VK_GROUP_ID=your_group_id
VK_API_VERSION=5.131
# Callback API
VK_CALLBACK_URL=https://your-domain.com/api/vk/callback
VK_CALLBACK_SECRET=your_callback_secret
VK_CONFIRMATION_CODE=your_confirmation_code
# VK Mini App
VK_APP_ID=your_app_id
VK_MINI_APP_URL=https://your-domain.com
VK_ADMIN_IDS=123456789,987654321use LetoceilingCoder\VK\VK;
// Простое сообщение
VK::send(123456789, 'Привет! 👋');
// С клавиатурой
$keyboard = VK::keyboard()
->row()
->text('Кнопка 1', 'btn1', 'primary')
->text('Кнопка 2', 'btn2', 'secondary')
->get();
VK::bot()->sendMessage(123456789, 'Выберите:', [
'keyboard' => $keyboard
]);use LetoceilingCoder\VK\VK;
// Полная клавиатура
$keyboard = VK::keyboard()
->row()
->text('🎰 Рулетка', 'wheel', 'primary')
->text('👥 Друзья', 'friends', 'secondary')
->row()
->link('📱 Сайт', 'https://example.com')
->row()
->openApp('🚀 Открыть приложение', config('vk.app_id'), -config('vk.group_id'))
->get();
// Inline клавиатура с callback
$keyboard = VK::keyboard()
->inline()
->row()
->callback('Кнопка 1', 'btn1')
->callback('Кнопка 2', 'btn2')
->get();
// Одноразовая клавиатура
$keyboard = VK::keyboard()
->oneTime()
->row()
->text('Отправить', 'send')
->get();
// Убрать клавиатуру
VK::bot()->sendMessage(123456789, 'Текст', [
'keyboard' => VK::keyboard()->remove()
]);use LetoceilingCoder\VK\MiniApp;
$miniApp = new MiniApp();
$queryString = $request->getQueryString();
if ($miniApp->validateParams($queryString)) {
$userId = $miniApp->getUserId($queryString);
$platform = $miniApp->getPlatformInfo($queryString);
}use LetoceilingCoder\VK\VK;
// Текстовое сообщение
VK::bot()->sendMessage(123456789, 'Текст сообщения');
// С вложениями
VK::bot()->sendMessage(123456789, 'Фото:', [
'attachment' => 'photo-123456_789012'
]);
// С клавиатурой
$keyboard = VK::keyboard()
->row()
->text('Да', 'yes', 'positive')
->text('Нет', 'no', 'negative')
->get();
VK::bot()->sendMessage(123456789, 'Выберите:', [
'keyboard' => $keyboard
]);use LetoceilingCoder\VK\VK;
$keyboard = VK::keyboard()
->row()
->text('Синяя', 'btn1', 'primary') // Синяя
->text('Белая', 'btn2', 'secondary') // Белая (по умолчанию)
->text('Красная', 'btn3', 'negative') // Красная
->text('Зелёная', 'btn4', 'positive') // Зелёная
->get();use LetoceilingCoder\VK\VK;
// Получить информацию о пользователях
$users = VK::bot()->getUsers([123, 456, 789], ['photo_200', 'city', 'bdate']);
// Получить одного пользователя
$user = VK::bot()->getUser(123456789, ['photo_200']);
// Отправить действие (typing)
VK::bot()->sendActivity(123456789, 'typing');use LetoceilingCoder\VK\VK;
// Получить настройки Callback
$settings = VK::bot()->getCallbackSettings($groupId);
// Установить настройки
VK::bot()->setCallbackSettings($groupId, [
'message_new' => 1,
'message_reply' => 1,
'message_edit' => 1,
]);
// Добавить callback сервер
VK::bot()->addCallbackServer($groupId, 'https://your-domain.com/api/vk/callback', 'Server Title', $secretKey);
// Получить код подтверждения
$code = VK::bot()->getCallbackConfirmationCode($groupId);use LetoceilingCoder\VK\LongPoll;
$longPoll = new LongPoll();
// Получить сервер для Long Poll
$server = $longPoll->getServer($groupId);
// Получить обновления
$updates = $longPoll->getUpdates($server['server'], $server['key'], $server['ts']);use LetoceilingCoder\VK\Community;
$community = new Community();
// Получить информацию о сообществе
$group = $community->getGroup($groupId);
// Получить участников
$members = $community->getGroupMembers($groupId);
// Проверить участника
$isMember = $community->isGroupMember($groupId, $userId);namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use LetoceilingCoder\VK\VK;
class VKCallbackController extends Controller
{
public function handle(Request $request)
{
// Подтверждение сервера
if ($request->input('type') === 'confirmation') {
return response(config('vk.callback.confirmation_code'), 200);
}
$update = $request->all();
if ($update['type'] === 'message_new') {
$this->handleMessage($update['object']['message']);
}
return response()->json(['ok' => true], 200);
}
protected function handleMessage($message)
{
$peerId = $message['peer_id'];
$text = $message['text'] ?? '';
if ($text === '/start') {
VK::send($peerId, 'Добро пожаловать!');
}
}
}namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use LetoceilingCoder\VK\MiniApp;
use LetoceilingCoder\VK\Exceptions\VKValidationException;
class VKAuth
{
public function handle(Request $request, Closure $next)
{
$queryString = $request->getQueryString();
if (!$queryString) {
return response()->json(['error' => 'Unauthorized'], 401);
}
try {
$miniApp = new MiniApp();
$userId = $miniApp->validateAndGetUserId($queryString);
$request->merge(['vk_user_id' => $userId]);
} catch (VKValidationException $e) {
return response()->json(['error' => 'Invalid signature'], 401);
}
return $next($request);
}
}VK- Фасад для быстрого доступаBot- Работа с Bot API (40+ методов)MiniApp- Валидация Mini AppCommunity- Работа с сообществамиLongPoll- Long Poll APIKeyboard- Конструктор клавиатур
sendMessage()- Отправить сообщениеeditMessage()- Редактировать сообщениеdeleteMessage()- Удалить сообщениеgetMessagesById()- Получить сообщения по IDgetHistory()- Получить историю сообщенийgetConversations()- Получить диалогиmarkAsRead()- Отметить как прочитанноеsendActivity()- Отправить действие (typing)
getUsers()- Получить информацию о пользователяхgetUser()- Получить информацию об одном пользователе
getGroup()- Получить информацию о сообществеgetGroupMembers()- Получить участниковisGroupMember()- Проверить участника
getCallbackSettings()- Получить настройкиsetCallbackSettings()- Установить настройкиgetCallbackServers()- Получить серверыaddCallbackServer()- Добавить серверdeleteCallbackServer()- Удалить серверgetCallbackConfirmationCode()- Получить код подтверждения
Полный список методов смотрите в src/README.md
use LetoceilingCoder\VK\Exceptions\VKException;
try {
VK::send(123456789, 'Hello');
} catch (VKException $e) {
Log::error('VK API error: ' . $e->getMessage());
}- src/README.md - Полная документация с примерами
- src/EXAMPLES.md - Примеры использования
- src/LIMITS.md - Лимиты и валидация
- src/FEATURES.md - Полный список возможностей
- src/SETUP.md - Подробная инструкция по установке
MIT License. См. LICENSE файл для деталей.
Если у вас есть вопросы или предложения, создайте Issue в репозитории.