Описание REST API

Авторизация, методы, примеры работы

REST API в Альфа CRM


Данное описание предназначено для интеграции Альфа CRM с другими информационными сервисами. Мы дополняем этот документ описанием новых методов, моделей и параметров.

Всё взаимодействие через API должно осуществляться по протоколу REST. В качестве формата данных используется JSON. Прочие форматы и протоколы не поддерживаются.

Методы API реализуются в Контроллере (MVC) виде CRUD парадигмы вокруг каждой Модели (MVC). Модель — это отдельная сущность в CRM системе, например Ученик, или Урок, или Филиал под которую реализуется отдельный Контроллер.

Примеры запросов можно посмотреть в приложенных коллекциях Postman


Авторизация


Прежде чем обращаться к методам CRUD необходимо авторизоваться и получить временный токен. Этим токеном должен подписываться каждый CRUD запрос заголовке X-ALFACRM-TOKEN. Время жизни токена — 3600 секунд. Для получения токена нужно обратиться методом POST к URI /v2api/auth/login, а в теле запроса передать JSON объект с ключами email и api_key.

Авторизующийся пользователь должен иметь роль с предоставленным доступом к модулю v2api. Иначе запросы к CRUD будут возвращать исключение Access Denied.

Пример из командной строки Linux (утилита curl):
$ curl -i -X 'POST' -d '{"email":"{email}","api_key":"{api_key}"}' 'https://{hostname}/v2api/auth/login'
            
//Пример кода на PHP
$ch      = curl_init();
$data    = ['email' => 'ivan@mail.ru', 'api_key' => '123456'];
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Accept: application/json', 'Content-Type: application/json']);
curl_setopt($ch, CURLOPT_URL, 'https://demo.s20.online/v2api/auth/login');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = json_decode(curl_exec($ch), true);
$code   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_errno($ch))
    throw new \Exception('Curl error');
curl_close($ch);
if ($code !== 200)
    throw new \Exception($result['name'] . ' - ' . $result['message']);
$token = $result['token'];
            

Варианты ответа сервера:

  • ОК, код ответа 200, в теле — JSON вида {"token":"GENERATED-TOKEN"}
  • исключение, код ответа 4XX, 5XX, в теле — JSON вида {"name":"Forbidden","message":"Not Authorized","code":0,"status":403}

Значение некоторых параметров


  • {hostname} — клиентский идентификатор, являющийся Hostname в URL для доступа в систему. Например, для https://demo.s20.online это demo.s20.online;
  • {branch} — ID филиала, в который происходит обращение;
  • {email} — e-mail пользователя для авторизации в системе;
  • {api_key} — ключ API для авторизации в системе;
  • {token} — токен, полученный при авторизации (см. блок Авторизация);

Примеры возвращаемых значений в


CRUD


  • Метод Index — возвращает JSON вида {"total":2,"count":2,"page":0,"items":[]}, где total — количество записей всего, count — количество записей в текущей коллекции items, page — текущая страница результатов выдачи. В items содержится вся коллекция записей в виде объектов различных моделей.
  • Методы Create и Update — возвращает JSON вида {"success":true,"errors":[],"model":{"id":1,...}}, где success — результат выполнения запроса (true / false), errors — коллекция ошибок если success == false, model — JSON объект Модели с публичными свойствами.
  • Метод Delete — возвращает JSON вида {"success":true,"errors":[]}, где success — результат выполнения запроса (true / false), errors — коллекция ошибок если success == false.

Branch — сущность филиала

id
int
идентификатор
name
string(50)
наименование
is_active
bool
флаг активности
subject_ids
int array
массив идентификаторов предметов (Subject)

Location — сущность локации

id
int
идентификатор
branch_id
int
филиал (Branch)
is_active bool
флаг активности
name
string(50)
наименование

Customer — центральная сущность

POST на /v2api/{branch}/customer/update?id={id} в теле {"name":"Test Customer 2"}
Пример из командной строки Linux (утилита curl):
$ curl -i -X 'POST' -H 'X-ALFACRM-TOKEN: {token}' -d '{"name":"Test Customer 2"}' 'https://{hostname}/v2api/{branch}/customer/update?id={id}'
                            
Пример на PHP:
$ch     = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-ALFACRM-TOKEN: {token}', 'Accept: application/json', 'Content-Type: application/json']);
curl_setopt($ch, CURLOPT_URL, 'https://{hostname}/v2api/{branch}/customer/update?id={id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"name":"Test Customer 2"}');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = json_decode(curl_exec($ch), true);
$code   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_errno($ch))
    throw new \Exception('Curl error');
curl_close($ch);
if ($code !== 200)
    throw new \Exception($result['name'] . ' - ' . $result['message']);
var_dump($result);
                            

Group — сущность групп

Lesson — сущность урока

POST на /v2api/{branch}/lesson/create
В Body указываются поля для добавления разового урока:

Обязательные поля к заполнению:
{
  "lesson_date" // дата урока, date (формат: "DD.MM.YYYY")
  "time_from" // время начала урока, datetime (формат: "HH:MM")
  "duration" // длительность урока в минутах, int
  "lesson_type_id" // id типа урока, int
  "subject_id" // id предмета, int
}
                                

Необязательные поля к заполнению:
{
  "teacher_ids" // id педагога, int array
  "is_confirmed" // подтверждение урока (по умолчанию да (1)), int
  "is_public" // возможна запись онлайн (по умолчанию нет (0)), int
  "note" // комментарий, string
  "topic" // тема, string
  "room_id" // id аудитории, int
  "group_ids" // id группы (для типов уроков с системным типом “Группа или несколько”), int array
  "customer_ids" // id клиента (для типов уроков с системным типом “Индивидуально” или “Лид, клиент или несколько”), int array
  "custom_name" // дополнительные поля, string
}
                                
Пример из командной строки Linux (утилита curl):
$ curl -i -X 'POST' -H 'X-ALFACRM-TOKEN: {token}' -d '' 'https://{hostname}/v2api/{branch}/lesson/create'
                            
Пример на PHP:
$ch     = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-ALFACRM-TOKEN: {token}', 'Accept: application/json', 'Content-Type: application/json']);
curl_setopt($ch, CURLOPT_URL, 'https://{hostname}/v2api/{branch}/lesson/create');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, '');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = json_decode(curl_exec($ch), true);
$code   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_errno($ch))
    throw new \Exception('Curl error');
curl_close($ch);
if ($code !== 200)
    throw new \Exception($result['name'] . ' - ' . $result['message']);
var_dump($result);
                            

CGI — связь клиенты-группы

Subject — предметы обучения

StudyStatus — статусы обучения

LeadStatus — этапы воронки продаж

LeadSource — источники

Pay — платежи

Communication — коммуникации

CustomerTariff — получение списка


абонементов клиента

Discount — сущность скидок

Log — получение списка истории


изменений

RegularLesson — сущность


регулярных уроков

Tariff — сущность абонемента

Task — сущность задач

Teacher — сущность педагога

POST на /v2api/{branch}/teacher/create в теле
Пример из командной строки Linux (утилита curl):
$ curl -i -X 'POST' -H 'X-ALFACRM-TOKEN: {token}' -d '' 'https://{hostname}/v2api/{branch}/teacher/create'
                            
Пример на PHP:
$ch     = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-ALFACRM-TOKEN: {token}', 'Accept: application/json', 'Content-Type: application/json']);
curl_setopt($ch, CURLOPT_URL, 'https://{hostname}/v2api/{branch}/teacher/create');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, '');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = json_decode(curl_exec($ch), true);
$code   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_errno($ch))
    throw new \Exception('Curl error');
curl_close($ch);
if ($code !== 200)
    throw new \Exception($result['name'] . ' - ' . $result['message']);
var_dump($result);
                            
Empty

По вашему запросу ничего не найдено

Перейти

Навигация

Esc

Закрыть