aifire/getcourse-api

There is no license information available for the latest version (v1.0.1) of this package.

Удобный API-клиент для GetCourse

Maintainers

Package info

github.com/homeonfire/getcourse-php-api

pkg:composer/aifire/getcourse-api

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 2

Open Issues: 0

v1.0.1 2026-04-16 17:30 UTC

This package is auto-updated.

Last update: 2026-04-17 10:20:13 UTC


README

GetCourse API PHP Client

Мощная, строго типизированная и удобная 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() и т.д.

👤 Пользователи ($client->users())

  • 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.

💰 Заказы ($client->deals())

  • 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) — Массово получить заказы и их теги.

🛍 Предложения ($client->offers())

  • getAll() — Получить список всех предложений школы.
  • getById(int $offerId) — Детальная информация по одному предложению.
  • getTags(?int $limit, ?int $offset) — Получить теги предложений.

💬 Диалоги ($client->dialogs())

  • getHistory(int $dialogId, int $limit = 100) — Получить историю переписки.
  • addComment(int $dialogId, string $commentText, array $transport, int $userId) — Написать сообщение пользователю.
  • changeDepartment(int $dialogId, int $newDepartmentId) — Перевести диалог в другой отдел.
  • close(int $dialogId) — Закрыть диалог.

🎓 Уроки ($client->lessons())

  • getAnswers(int $lessonId) — Получить ответы учеников на урок.
  • addComment(int $lessonAnswerId, string $text, int $userId) — Оставить комментарий к ответу.
  • changeStatus(int $lessonAnswerId, string $status) — Принять/отклонить ответ (accepted, declined, viewed).

📹 Вебинары ($client->webinars())

  • 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, ...) — Изолировать (забанить) пользователя в чате.

🌍 Общие справочники ($client->common())

  • getGroups() — Получить список всех групп школы.
  • getPersonalManagers() — Список сотрудников с правами менеджера.
  • getTrainings() — Список всех тренингов.

📝 Заметки ($client->notes())

  • add(int $dialogId, string $text) — Оставить внутреннюю текстовую заметку.

⚙️ Вебхуки ($client->webhooks())

  • 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 менеджера
);