Мощная, строго типизированная и удобная PHP-библиотека для работы с API GetCourse (v1). Библиотека построена на базе современного HTTP-клиента Saloon v3, что делает её легковесной, надежной и фреймворк-агностичной (отлично работает как в чистом PHP, так и в Laravel).
Установите пакет через Composer:
composer require aifire/getcourse-apiДля начала работы необходимо создать экземпляр главного клиента, передав домен вашей школы и ключи авторизации. Токен будет собран автоматически.
require __DIR__ . '/vendor/autoload.php';
use GetCourse\Api\GetCourseClient;
$client = new GetCourseClient(
schoolDomain: 'your-school.getcourse.ru',
developerKey: 'КЛЮЧ_РАЗРАБОТЧИКА',
schoolApiKey: 'КЛЮЧ_АПИ_ШКОЛЫ'
);Библиотека использует объекты Response от Saloon. Получить данные очень просто:
$response = $client->users()->getFields(email: 'test@example.com');
if ($response->successful()) {
// Получить массив данных (содержимое ключа 'data')
$data = $response->json('data');
} else {
// Обработка ошибки
$status = $response->status();
$errorMessage = $response->json('message');
}Библиотека включает в себя встроенный логгер на базе Monolog. Это невероятно полезно для отладки, сборки виджетов аналитики и проверки сырых JSON-ответов от серверов GetCourse (например, чтобы быстро подсмотреть оригинальную дату создания объекта created_at прямо из базы GK).
Включить запись логов всех запросов и ответов можно вызовом одного метода enableLogging(), передав туда полный путь к файлу лога.
// Инициализация клиента
$client = new \GetCourse\Api\GetCourseClient(
'your-school.getcourse.ru',
'DEV_KEY',
'API_KEY'
);
// Включаем логирование и указываем, куда писать файл
$client->enableLogging(__DIR__ . '/logs/getcourse_api.log');
// Выполняем запрос
$client->users()->getFields(userId: 12345);Пример того, что появится в файле логов: Библиотека автоматически фиксирует метод, полный URL запроса, отправленное тело (body) и полный ответ от сервера.
[2026-04-16T19:17:00.123456+00:00] getcourse-api.INFO: ➡️ [REQ] GET [https://your-school.getcourse.ru/pl/api/v1/user/get-fields?userId=12345](https://your-school.getcourse.ru/pl/api/v1/user/get-fields?userId=12345) {"body":null} []
[2026-04-16T19:17:00.654321+00:00] getcourse-api.INFO: ⬅️ [RES] 200 [https://your-school.getcourse.ru/pl/api/v1/user/get-fields?userId=12345](https://your-school.getcourse.ru/pl/api/v1/user/get-fields?userId=12345) {"body":{"success":true,"data":[{"id":12345,"email":"test@mail.ru","created_at":"2026-04-10 12:00:00"}]}} []
API разделено на логические ресурсы. Вызывайте нужный ресурс через методы клиента: $client->users(), $client->deals() и т.д.
getFields(?int $userId, ?string $email)— Получить базовые поля пользователя.addBalance(int $value, ?int $userId, ?string $email, string $type, string $comment)— Пополнить баланс.getBalance(?int $userId, ?string $email, string $type)— Узнать текущий баланс.getGroups(?int $userId, ?string $email)— Получить список групп пользователя.addGroups(array $groups, ?int $userId, ?string $email)— Добавить в группы (передайте массив ID).removeGroups(array $groups, ?int $userId, ?string $email)— Удалить из групп.setGroups(array $groups, ?int $userId, ?string $email)— Жестко задать список групп (остальные удалятся).getCustomFields(...)/updateCustomFields(...)— Чтение и запись дополнительных полей профиля.updateFields(array $fields, ...)— Обновить стандартные поля (имя, телефон, город и т.д.).setPersonalManager(?int $managerId, ...)— Назначить или удалить персонального менеджера.getPurchases(...)/getDeals(...)— Получить список покупок или заказов.- Обучение:
getAnswers(),getDiplomas(),getGoalRecords(),getLessonAnswers(),getSchedule(),getTrainings(). createDiploma(int $templateId, ...)— Выдать диплом (POST).getByTelegramChatId(int $chatId)— Найти пользователя по Telegram ID.
getFields(int $dealId)— Получить всю информацию о заказе.updateFields(int $dealId, array $fields)— Обновить заказ (изменить статус, менеджера, теги).addPositions(int $dealId, array $positions)— Добавить позиции в заказ (офферы).removePositions(int $dealId, array $positionIds)— Удалить позиции из заказа.addComment(int $dealId, int $userId, string $text)— Добавить комментарий к заказу.getComments(int $dealId)— Получить историю комментариев.getCalls(int $dealId)— Получить историю звонков.getCustomFields(int $dealId)— Получить дополнительные поля заказа.getCancelReasons()— Справочник причин отказа.getDealsTags(?int $limit, ?int $offset)— Массово получить заказы и их теги.
getAll()— Получить список всех предложений школы.getById(int $offerId)— Детальная информация по одному предложению.getTags(?int $limit, ?int $offset)— Получить теги предложений.
getHistory(int $dialogId, int $limit = 100)— Получить историю переписки.addComment(int $dialogId, string $commentText, array $transport, int $userId)— Написать сообщение пользователю.changeDepartment(int $dialogId, int $newDepartmentId)— Перевести диалог в другой отдел.close(int $dialogId)— Закрыть диалог.
getAnswers(int $lessonId)— Получить ответы учеников на урок.addComment(int $lessonAnswerId, string $text, int $userId)— Оставить комментарий к ответу.changeStatus(int $lessonAnswerId, string $status)— Принять/отклонить ответ (accepted,declined,viewed).
getAll()— Список всех вебинаров.getByIds(array $ids)— Получить вебинары по массиву ID.addComment(int $moderatorId, int $webinarId, string $text, array $optionalParams)— Написать в чат вебинара.moderateComment(int $webinarId, int $commentId, string $action, ?int $moderatorId)— Модерация сообщения (delete,premoderation_accept, и т.д.).moderateUser(int $webinarId, int $userId, int $userType, string $action, ...)— Изолировать (забанить) пользователя в чате.
getGroups()— Получить список всех групп школы.getPersonalManagers()— Список сотрудников с правами менеджера.getTrainings()— Список всех тренингов.
add(int $dialogId, string $text)— Оставить внутреннюю текстовую заметку.
setUri(string $uri, int $eventObjectId, int $eventId)— Подключить отправку эвентов (событий) из GetCourse на ваш внешний сервер.
Пример того, как можно выстроить логику скрипта: находим пользователя, проверяем баланс, создаем ему заказ и отправляем уведомление в диалог.
// 1. Ищем пользователя
$userRes = $client->users()->getFields(email: 'client@mail.ru');
$userId = $userRes->json('data.0.id');
// 2. Добавляем в группу
$client->users()->addGroups([15], userId: $userId);
// 3. Отправляем сообщение в диалог
$client->dialogs()->addComment(
dialogId: 12345,
commentText: "Привет! Доступ открыт.",
transport: [1, 3], // Email, Telegram
userId: 1 // ID менеджера
);