Памятка разработчику 1С: интеграция с EXZOTRON API для учета выдачи топлива
Документ описывает базовые методы EXZOTRON API, которые нужны для загрузки данных в 1С, получения операций выдачи топлива и управления RFID-картами: добавление, переименование, блокировка, лимиты, привязка к автомобилям и двойная идентификация.
Актуальная документация API:
- Swagger UI: https://5g.exzotron.ru/swagger-ui/
- OpenAPI JSON: https://5g.exzotron.ru/v3/api-docs
Базовый адрес:
https://5g.exzotron.ru
Все методы ниже находятся в префиксе /api/v1.
1. Авторизация#
API защищен стандартной авторизацией Spring Security. Для интеграции из 1С обычно используется один из вариантов:
- HTTP Basic Auth, если он разрешен для учетной записи.
- Авторизация через форму /login с сохранением cookie JSESSIONID.
CSRF в проекте отключен, поэтому отдельный CSRF-токен для POST/PUT/PATCH не нужен.
Права зависят от роли пользователя. Для управления картами обычно нужны ROLE_ADMIN или ROLE_ADVANCED_USER. Для чтения отчетов часто достаточно ROLE_USER, но часть методов доступна только администратору.
Пример проверки через curl с Basic Auth:
curl -u "login:password" "https://5g.exzotron.ru/api/v1/get_products"
Пример через cookie-сессию:
curl -c cookies.txt -X POST "https://5g.exzotron.ru/login" \ -H "Content-Type: application/x-www-form-urlencoded" \ --data "username=login&password=password&lang=ru" curl -b cookies.txt "https://5g.exzotron.ru/api/v1/get_products"
2. Общий шаблон HTTP-запроса из 1С#
Функция ВыполнитьGET(Путь, Параметры = Неопределено) Экспорт Сервер = "5g.exzotron.ru"; Соединение = Новый HTTPСоединение(Сервер, 443,,,,, Новый ЗащищенноеСоединениеOpenSSL); Если Параметры <> Неопределено Тогда Путь = Путь + "?" + Параметры; КонецЕсли; Запрос = Новый HTTPЗапрос(Путь); Запрос.Заголовки.Вставить("Accept", "application/json"); // Вариант 1: Basic Auth // СтрокаАвторизации = "login:password"; // Запрос.Заголовки.Вставить("Authorization", "Basic " + Base64Строка(СтрокаАвторизации)); // Вариант 2: cookie после логина // Запрос.Заголовки.Вставить("Cookie", "JSESSIONID=" + ИдентификаторСессии); Ответ = Соединение.Получить(Запрос); Если Ответ.КодСостояния < 200 Или Ответ.КодСостояния >= 300 Тогда ВызватьИсключение "Ошибка EXZOTRON API: " + Ответ.КодСостояния + " " + Ответ.ПолучитьТелоКакСтроку(); КонецЕсли; ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); Возврат ПрочитатьJSON(ЧтениеJSON); КонецФункции
Для POST, PUT, PATCH JSON передается в тело запроса:
Функция ВыполнитьJSON(Метод, Путь, Данные) Экспорт Соединение = Новый HTTPСоединение("5g.exzotron.ru", 443,,,,, Новый ЗащищенноеСоединениеOpenSSL); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, Данные); Тело = ЗаписьJSON.Закрыть(); Запрос = Новый HTTPЗапрос(Путь); Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8"); Запрос.Заголовки.Вставить("Accept", "application/json"); Запрос.УстановитьТелоИзСтроки(Тело, КодировкаТекста.UTF8); Если Метод = "POST" Тогда Ответ = Соединение.ОтправитьДляОбработки(Запрос); ИначеЕсли Метод = "PUT" Тогда Ответ = Соединение.Записать(Запрос); ИначеЕсли Метод = "PATCH" Тогда Ответ = Соединение.ВызватьHTTPМетод("PATCH", Запрос); КонецЕсли; Если Ответ.КодСостояния < 200 Или Ответ.КодСостояния >= 300 Тогда ВызватьИсключение "Ошибка EXZOTRON API: " + Ответ.КодСостояния + " " + Ответ.ПолучитьТелоКакСтроку(); КонецЕсли; Возврат Ответ.ПолучитьТелоКакСтроку(); КонецФункции
3. Справочники, которые желательно загрузить в 1С#
Компании#
GET /api/v1/get_list_company_transformed
Назначение: получить список доступных компаний и их идентификаторы.
Основные поля ответа:
- id - ID компании в EXZOTRON.
- name, nameRu, nameEn - наименование.
- telegram - Telegram ID пользователя/компании, часто нужен в старых API-методах как idUserTelegram.
- utc, workFactUtc - часовой пояс.
- rfidInsertStatus - тип RFID по умолчанию при добавлении.
Пример:
curl -u "login:password" "https://5g.exzotron.ru/api/v1/get_list_company_transformed"
Виды топлива/продукты#
GET /api/v1/get_products
Назначение: получить виды продукта, по которым ведется учет.
Основные поля: id, name, nameRu, price.
Пример:
curl -u "login:password" "https://5g.exzotron.ru/api/v1/get_products"
Модули ТРК / IMEI#
GET /api/v1/report_list_imei_current_user
Назначение: получить список модулей/объектов, доступных текущему пользователю.
Основные поля:
- id - внутренний ID объекта.
- imei - IMEI модуля.
- name - наименование.
- companyId - компания.
- productId, productName - продукт/топливо.
- divisionId, divisionName - подразделение.
- trkTypeId, trkTypeName - тип ТРК.
- status, licenseDate, lastReceivedPackageTime.
Пример:
curl -u "login:password" "https://5g.exzotron.ru/api/v1/report_list_imei_current_user"
Типы RFID-карт/объектов#
GET /api/v1/object_rfid_type
Назначение: получить справочник типов RFID-объектов.
Из базы проекта используются типы:
| ID | Тип | Назначение |
|---|---|---|
| 1 | Employee / Сотрудник | Карта сотрудника/водителя |
| 2 | Vehicles / Автомобиль | Карта автомобиля, используется для двойной идентификации |
| 3 | Capacity / Емкость | Емкость |
| 4 | Provider / Поставщик | Поставщик |
| 5 | Counterparty / Контрагент | Контрагент |
| 6 | Operator / Оператор | Оператор |
Пример:
curl -u "login:password" "https://5g.exzotron.ru/api/v1/object_rfid_type"
Типы лимитов#
GET /api/v1/get_limit_types
Назначение: получить справочник типов лимита. В карточке RFID также есть поле status:
| status | Значение |
|---|---|
| 0 | Лимитная |
| 1 | Безлимитная |
| 2 | Заблокированная |
Пример:
curl -u "login:password" "https://5g.exzotron.ru/api/v1/get_limit_types"
4. Загрузка RFID-карт в 1С#
Список RFID-карт#
GET /api/v1/rfid_list_api
Параметры:
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
| idUserTelegram | string | да | Telegram ID пользователя |
| idCompany | string | да | ID компании |
| idProduct | int | да | ID продукта/топлива |
Пример:
curl -u "login:password" \ "https://5g.exzotron.ru/api/v1/rfid_list_api?idUserTelegram=123456&idCompany=10&idProduct=1"
Ответ приходит как объект с наборами obj1, obj2, ... В 1С его удобнее разбирать как соответствие и сохранять только нужные поля карты.
Для детальной карточки лучше использовать:
GET /api/v1/get_rfid_object?rfid=123456789&companyId=10&productId=1
Основные поля детальной карточки:
- id - внутренний ID RFID-объекта.
- rfid - номер карты.
- name - имя карты.
- typeId, typeName - тип RFID-объекта.
- status - лимитная/безлимитная/заблокированная.
- dailyLimit - суточный лимит.
- balance - текущий баланс.
- dailyBalance - остаток суточного лимита.
- pinCode - PIN.
- vehicleId, vehicleName - связанный автомобиль.
- employeeId, employeeName - связанный сотрудник.
- divisionId, divisionName - подразделение.
- partnerId, partnerName - контрагент/партнер.
- expireDate - срок действия.
5. Управление RFID-картами из 1С#
Добавить RFID-карту#
POST /api/v1/add_rfid
Тело JSON:
{ "idUserTelegram": "123456", "rfid": "1234567890", "name": "Иванов И.И.", "typeRfid": "1", "companyId": "10", "productId": "1" }
Пример:
curl -u "login:password" -X POST "https://5g.exzotron.ru/api/v1/add_rfid" \ -H "Content-Type: application/json" \ -d '{"idUserTelegram":"123456","rfid":"1234567890","name":"Иванов И.И.","typeRfid":"1","companyId":"10","productId":"1"}'
Примечание: в контроллере /add_rfid companyId и productId есть в DTO, но фактически метод опирается на текущего пользователя и его текущий продукт/подразделение. Если нужна жесткая привязка к компании/продукту, стоит согласовать использование /add_rfid_api или текущего контекста пользователя.
У /add_rfid_api (в отличие от большинства других мутирующих методов этого документа) нет проверки, что вызывающий пользователь действительно принадлежит переданной companyId — значение компании там доверяется телу запроса напрямую. Использовать эту разновидность стоит только из доверенного сервера интеграции, а не передавать companyId от конечного пользователя без своей проверки на стороне 1С.
Переименовать RFID-карту#
PUT /api/v1/set_name_rfid_tag_api
Параметры:
| Параметр | Тип | Описание |
|---|---|---|
| companyId | string | ID компании |
| productId | string | ID продукта |
| rfid | string | Номер карты |
| name | string | Новое имя |
Пример:
curl -u "login:password" -X PUT \ "https://5g.exzotron.ru/api/v1/set_name_rfid_tag_api?companyId=10&productId=1&rfid=1234567890&name=Иванов%20И.И."
Установить лимитная/безлимитная#
PUT /api/v1/set_rfid_type_limit
Параметры:
| Параметр | Тип | Описание |
|---|---|---|
| idUserTelegram | string | Telegram ID пользователя |
| idCompany | string | ID компании |
| idProduct | long | ID продукта |
| rfid | string | Номер карты |
| limitType | boolean | Тип лимита |
В коде обработки bulk-режима используется логика:
- limitType=false - безлимитная карта.
- limitType=true - лимитная карта.
Пример установки лимитной карты:
curl -u "login:password" -X PUT \ "https://5g.exzotron.ru/api/v1/set_rfid_type_limit?idUserTelegram=123456&idCompany=10&idProduct=1&rfid=1234567890&limitType=true"
Установить суточный лимит#
PUT /api/v1/set_day_limit
Параметры:
| Параметр | Тип | Описание |
|---|---|---|
| idUserTelegram | string | Telegram ID пользователя |
| idCompany | string | ID компании |
| idProduct | long | ID продукта |
| rfid | string | Номер карты |
| limitDay | string | Суточный лимит, например 100 или 100.5 |
Пример:
curl -u "login:password" -X PUT \ "https://5g.exzotron.ru/api/v1/set_day_limit?idUserTelegram=123456&idCompany=10&idProduct=1&rfid=1234567890&limitDay=100"
Начислить топливо на баланс RFID-карты#
PATCH /api/v1/move_count_api
Параметры:
| Параметр | Тип | Описание |
|---|---|---|
| idUserTelegram | string | Telegram ID пользователя |
| idCompany | string | ID компании |
| idProduct | long | ID продукта |
| rfid | string | Номер карты |
| count | string | Количество топлива |
Возвращает строку с результатом/ID операции.
Пример:
curl -u "login:password" -X PATCH \ "https://5g.exzotron.ru/api/v1/move_count_api?idUserTelegram=123456&idCompany=10&idProduct=1&rfid=1234567890&count=250"
Сторнирование / списание с баланса. Отдельного метода «сторно» нет — count в PATCH /move_count_api принимает и отрицательные значения: положительное число начисляет топливо на баланс карты, отрицательное — списывает (сторнирует) ранее начисленное. Сервер не проверяет знак — проверка идёт только на достаточность баланса у оператора, который выполняет операцию.
Пример сторнирования 100 л, ранее ошибочно начисленных на карту:
curl -u "login:password" -X PATCH \
"https://5g.exzotron.ru/api/v1/move_count_api?idUserTelegram=123456&idCompany=10&idProduct=1&rfid=1234567890&count=-100"
Заблокировать карту#
PATCH /api/v1/rfid_lock
Параметры:
| Параметр | Тип | Описание |
|---|---|---|
| idUserTelegram | string | Telegram ID пользователя |
| rfid | string | Номер карты |
Пример:
curl -u "login:password" -X PATCH \ "https://5g.exzotron.ru/api/v1/rfid_lock?idUserTelegram=123456&rfid=1234567890"
Разблокировать карту#
PATCH /api/v1/rfid_delock
curl -u "login:password" -X PATCH \ "https://5g.exzotron.ru/api/v1/rfid_delock?idUserTelegram=123456&rfid=1234567890"
Установить PIN#
PUT /api/v1/set_pin
curl -u "login:password" -X PUT \ "https://5g.exzotron.ru/api/v1/set_pin?companyId=10&productId=1&rfid=1234567890&pinCode=1234"
Установить подразделение карты#
PUT /api/v1/rfid/set_division
curl -u "login:password" -X PUT \ "https://5g.exzotron.ru/api/v1/rfid/set_division?productId=1&rfid=1234567890&divisionId=5"
Установить срок действия карты#
PUT /api/v1/rfid/set_expire_date
curl -u "login:password" -X PUT \ "https://5g.exzotron.ru/api/v1/rfid/set_expire_date?companyId=10&productId=1&rfid=1234567890&date=2026-12-31%2023:59:59"
Добавить RFID-карту (новый вариант, с явной компанией/продуктом)#
POST /api/v1/add_rfid_new
В отличие от /add_rfid, здесь companyId/productId реально используются (а не берутся из контекста текущего пользователя), и сервер дополнительно проверяет, что вызывающий пользователь действительно принадлежит указанной компании. Позволяет сразу указать привязку к автомобилю, подразделение, тип карты, статус и срок действия — без отдельных вызовов.
Тело JSON:
{
"name": "Иванов И.И.",
"companyId": 10,
"productId": 1,
"rfid": "1234567890",
"vehicleId": null,
"status": 0,
"typeId": 1,
"divisionId": null,
"expireDate": null
}
| Поле | Тип | Описание |
|---|---|---|
| name | string | Имя владельца карты |
| companyId | int | ID компании (обязателен, реально проверяется) |
| productId | int | ID вида топлива |
| rfid | string | Номер карты |
| vehicleId | int, опц. | Сразу привязать к автомобилю |
| status | int | 0 — активна, иное — по внутренней схеме статусов |
| typeId | int | Тип RFID-объекта (см. раздел 3, «Типы RFID-карт/объектов») |
| divisionId | int, опц. | Подразделение |
| expireDate | datetime, опц. | Срок действия карты |
Пример:
curl -u "login:password" -X POST "https://5g.exzotron.ru/api/v1/add_rfid_new" \
-H "Content-Type: application/json" \
-d '{"name":"Иванов И.И.","companyId":10,"productId":1,"rfid":"1234567890","typeId":1,"status":0}'
Добавить сразу несколько карт (пакетно)#
POST /api/v1/add_rfid_bulk
Принимает список карт построчно в одном текстовом поле — удобно для разовой загрузки готового списка без цикла из отдельных запросов /add_rfid. Формат строки (через запятую, поля после rfid — необязательны):
rfid,name,pin,mode,type_rfid,product
| Поле | По умолчанию | Описание |
|---|---|---|
| rfid | обязателен | Только цифры |
| name | = rfid | Имя владельца |
| pin | 0 | PIN-код |
| mode | 0 | 0 — без доп. действия, 1 — сделать безлимитной, 2 — сделать лимитной, 3 — сразу заблокировать |
| type_rfid | 1 | 1–7, см. «Типы RFID-карт/объектов» |
| product | 0 (текущий продукт пользователя) | Допустимы только 0, 1, 2 или 9 |
Пример — добавить две карты, одну сразу лимитной:
curl -u "login:password" -X POST "https://5g.exzotron.ru/api/v1/add_rfid_bulk" \
-H "Content-Type: application/json" \
-d '{"text":"1234567890,Иванов И.И.,0,2,1\n0987654321,Петров П.П."}'
Ответ — список результатов по каждой строке (номер строки, распознанный текст, признак успеха, сообщение).
Привязать существующего сотрудника к RFID-карте#
Отдельного метода вида set_employee_id_to_rfid нет — привязка идёт через общий метод обновления карты:
PUT /api/v1/set_name_rfid_tag
Это не тот же метод, что /set_name_rfid_tag_api из раздела «Переименовать RFID-карту» — здесь компания и продукт берутся из контекста пользователя, чей логин/пароль передан в запросе (как и у /add_rfid), а не из параметров запроса. Метод многофункциональный: одним вызовом можно переименовать карту, задать суточный лимит, тип лимита, тип карты, склад и привязку к сотруднику/автомобилю — какие поля передать, то и обновится.
| Параметр | Тип | Описание |
|---|---|---|
| idUserTelegram | string | Telegram ID пользователя, от имени которого выполняется запрос |
| rfid | string | Номер карты |
| pinCode | int | Обязателен, если передаётся employeeId — привязка сотрудника выполняется только когда оба параметра заданы одновременно; если PIN не меняется, передайте текущее значение (или 0) |
| employeeId | int | ID сотрудника для привязки |
| vehicleId, divisionId, partnerId, limitTypeId, status | int, опц. | Можно передать в том же вызове — см. соответствующие разделы этого документа |
Пример:
curl -u "login:password" -X PUT \
"https://5g.exzotron.ru/api/v1/set_name_rfid_tag?idUserTelegram=123456&rfid=1234567890&pinCode=0&employeeId=42"
Создать сотрудника и сразу привязать карту#
POST /api/v1/create_employee_from_rfid
Если сотрудника ещё нет в справочнике — создаёт его с ФИО из имени карты и сразу привязывает. Удобно, когда карта уже была заведена (например, синхронизирована), а сотрудника под неё завести отдельно не хочется.
curl -u "login:password" -X POST \
"https://5g.exzotron.ru/api/v1/create_employee_from_rfid?companyId=10&productId=1&rfid=1234567890"
Ответ: {"employeeId": 42}.
Удалить RFID-карту#
DELETE /api/v1/delete_rfid
Удаление настоящее (запись пропадает из базы), а не просто блокировка. Работает только если по карте не было ни одной операции выдачи топлива — иначе сервер вернёт ошибку «Невозможно удалить карту по которой есть движения». Для карты с историей используйте блокировку (раздел «Заблокировать карту»), а не удаление.
| Параметр | Тип | Описание |
|---|---|---|
| rfid | string | Номер карты |
Пример:
curl -u "login:password" -X DELETE \
"https://5g.exzotron.ru/api/v1/delete_rfid?rfid=1234567890"
6. Автомобили и двойная идентификация#
Двойная идентификация в EXZOTRON означает, что при выдаче топлива могут участвовать две RFID-метки:
- rfid_tag1 / rfidUser - карта пользователя/водителя/сотрудника.
- rfid_tag2 / rfidVehicle - карта автомобиля.
- Дополнительно может быть rfid_tag3 / rfidRandomObject - произвольный объект.
В 1С для корректной загрузки двойной идентификации рекомендуется хранить:
- справочник RFIDКарты: номер RFID, тип, статус, лимит, баланс;
- справочник Автомобили: ID EXZOTRON, госномер, наименование, IMEI, RFID автомобиля;
- связь RFIDКартаАвтомобиль: rfid, vehicleId, productId, companyId;
- в документах выдачи топлива: rfidUser, rfidVehicle, vehicleId, vehicleName, imei.
Загрузить список автомобилей#
GET /api/v1/vehicle
Параметры:
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
| companyId | int | нет | ID компании. Если не передан, берется компания текущего пользователя |
| search | string | нет | Поиск |
| control | boolean | нет | Фильтр режима контроля |
Пример:
curl -u "login:password" "https://5g.exzotron.ru/api/v1/vehicle?companyId=10"
Основные поля автомобиля:
- id - ID автомобиля.
- name, nameRu, nameEn - наименование.
- licensePlate - госномер.
- garageNumber - гаражный номер.
- rfid - RFID автомобиля для двойной идентификации.
- imei - IMEI объекта мониторинга.
- divisionId, divisionName - подразделение.
- companyId - компания.
Добавить автомобиль#
POST /api/v1/vehicle
Тело JSON:
{ "companyId": 10, "name": "КАМАЗ А123ВС", "licensePlate": "А123ВС777", "garageNumber": "42", "rfid": 987654321, "imei": "865513073778264", "divisionId": 5 }
Метод возвращает id созданного автомобиля.
Пример:
curl -u "login:password" -X POST "https://5g.exzotron.ru/api/v1/vehicle" \ -H "Content-Type: application/json" \ -d '{"companyId":10,"name":"КАМАЗ А123ВС","licensePlate":"А123ВС777","garageNumber":"42","rfid":987654321,"imei":"865513073778264","divisionId":5}'
Изменить автомобиль#
PUT /api/v1/vehicle
Передается объект Vehicle с заполненным id.
curl -u "login:password" -X PUT "https://5g.exzotron.ru/api/v1/vehicle" \ -H "Content-Type: application/json" \ -d '{"id":25,"companyId":10,"name":"КАМАЗ А123ВС","licensePlate":"А123ВС777","garageNumber":"42","rfid":987654321,"imei":"865513073778264","divisionId":5}'
Привязать автомобиль к RFID-карте#
PATCH /api/v1/set_vehicle_id_to_rfid
Параметры:
| Параметр | Тип | Описание |
|---|---|---|
| vehicleId | int | ID автомобиля |
| productId | int | ID продукта |
| companyId | int | ID компании |
| rfid | string | Номер RFID-карты |
Пример:
curl -u "login:password" -X PATCH \ "https://5g.exzotron.ru/api/v1/set_vehicle_id_to_rfid?vehicleId=25&companyId=10&productId=1&rfid=987654321"
Создать автомобиль и сразу привязать карту (короткий путь)#
POST /api/v1/create_vehicle_from_rfid
Заменяет шаги 1–3 сценария ниже одним вызовом, если карта уже создана с типом «Автомобиль»: берёт имя и RFID из самой карты, создаёт автомобиль и сразу привязывает.
curl -u "login:password" -X POST \
"https://5g.exzotron.ru/api/v1/create_vehicle_from_rfid?companyId=10&productId=1&rfid=987654321"
Ответ: {"vehicleId": 25}.
Практический сценарий для 1С:
- Создать/обновить автомобиль через /api/v1/vehicle.
- Создать RFID-карту типа Vehicles, то есть typeRfid = "2".
- Привязать карту к автомобилю через /api/v1/set_vehicle_id_to_rfid.
- При загрузке операций сохранять и карту водителя, и карту автомобиля.
7. Отчеты и загрузка операций выдачи топлива#
Журнал операций по RFID-картам#
GET /api/v1/report_by_rfid
Параметры:
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
| accounts | string/list | да | RFID-карты. Можно передавать несколько значений |
| dateFrom | string | нет | Начало периода |
| dateTo | string | нет | Конец периода |
Пример:
curl -u "login:password" \ "https://5g.exzotron.ru/api/v1/report_by_rfid?accounts=1234567890&accounts=987654321&dateFrom=2026-06-01%2000:00:00&dateTo=2026-06-02%2023:59:59"
Основные поля операции:
- accountOperationId - ID операции.
- operationLogId - ID записи журнала.
- dateTime, operationDateTime - дата операции.
- account - счет/RFID.
- quantity - количество топлива.
- debit, credit - движение по счету.
- count, finalBalance - количество/остаток.
- productId, product - продукт.
- imei, objectName - ТРК/модуль.
- rfidUser - RFID водителя/сотрудника.
- rfidVehicle - RFID автомобиля.
- rfidRandomObject - RFID произвольного объекта.
- rfidName - имя RFID.
- vehicleId, vehicleName, vehicleImei - автомобиль.
- tankStart, tankEnd, tank - топливо в баке.
- totalCounterIn, totalCounterOut, fuelCounter, totalAccount - счетчики.
Журнал транзакций по IMEI за период#
GET /api/v1/report_by_objects_income
Параметры:
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
| imeis | string/list | нет | IMEI объектов. Можно передавать несколько значений |
| dateFrom | string | нет | Начало периода |
| dateTo | string | нет | Конец периода |
Пример:
curl -u "login:password" \ "https://5g.exzotron.ru/api/v1/report_by_objects_income?imeis=865513073778264&dateFrom=2026-06-01%2000:00:00&dateTo=2026-06-02%2023:59:59"
Для 1С это основной метод для загрузки фактических транзакций по ТРК/IMEI за период. Для двойной идентификации обязательно сохраняйте поля rfidUser, rfidVehicle, vehicleId, vehicleName.
8. Рекомендуемая последовательность обмена с 1С#
Первичная загрузка справочников#
- GET /api/v1/get_products - загрузить продукты/виды топлива.
- GET /api/v1/get_list_company_transformed - загрузить компании и определить companyId.
- GET /api/v1/object_rfid_type - загрузить типы RFID.
- GET /api/v1/get_limit_types - загрузить типы лимитов.
- GET /api/v1/report_list_imei_current_user - загрузить ТРК/IMEI.
- GET /api/v1/vehicle - загрузить автомобили.
- GET /api/v1/rfid_list_api или GET /api/v1/get_rfid_object - загрузить RFID-карты.
Регулярная загрузка операций выдачи топлива#
- Взять период обмена из регистра 1С, например последние 1-3 дня с перекрытием.
- Получить операции по IMEI: /api/v1/report_by_objects_income.
- Сопоставить операции по ключу operationLogId или accountOperationId.
- Обновить/создать документы выдачи топлива.
- Сохранить rfidUser, rfidVehicle, vehicleId, imei, quantity, dateTime, productId.
Управление картами из 1С#
- Добавить карту: /api/v1/add_rfid.
- Если это автомобильная карта: создать/найти автомобиль и привязать /api/v1/set_vehicle_id_to_rfid.
- Установить тип лимита: /api/v1/set_rfid_type_limit.
- Установить суточный лимит: /api/v1/set_day_limit.
- При необходимости установить PIN, подразделение, срок действия.
- При увольнении/выводе из эксплуатации блокировать карту через /api/v1/rfid_lock, а не удалять.
9. Минимальная модель данных в 1С#
Справочник ЭкзотронКомпании#
- ИдентификаторEXZOTRON
- Наименование
- Telegram
- UTC
Справочник ЭкзотронПродукты#
- ИдентификаторEXZOTRON
- Наименование
- Цена
Справочник ЭкзотронRFIDКарты#
- RFID
- Наименование
- Компания
- Продукт
- ТипКарты
- Статус
- СуточныйЛимит
- Баланс
- PIN
- СрокДействия
- Автомобиль
- Сотрудник
- Подразделение
Справочник ЭкзотронАвтомобили#
- ИдентификаторEXZOTRON
- Наименование
- ГосНомер
- ГаражныйНомер
- RFIDАвтомобиля
- IMEI
- Подразделение
Документ/регистр ЭкзотронВыдачаТоплива#
- ИдентификаторОперации
- ИдентификаторЖурнала
- ДатаОперации
- IMEI
- ОбъектТРК
- Продукт
- Количество
- RFIDПользователя
- RFIDАвтомобиля
- Автомобиль
- ОстатокДо
- ОстатокПосле
- Счетчики
10. Важные замечания для 1С-разработчика#
- Даты передавайте URL-encoded, например 2026-06-01%2000:00:00.
- Числа RFID храните строкой. Большие RFID-номера безопаснее не превращать в число 1С.
- Для повторной загрузки операций используйте идемпотентность по operationLogId/accountOperationId.
- Для двойной идентификации не ограничивайтесь полем account: в отчетах отдельно есть rfidUser и rfidVehicle.
- Для автомобильных карт используйте тип RFID 2 и связь через /api/v1/set_vehicle_id_to_rfid.
- Блокировка карты меняет доступ, но сохраняет историю операций. Это предпочтительнее удаления.
- idUserTelegram берите из карточки компании/пользователя, если метод его требует.
- Методы /api/v1/rfid_list_api, /api/v1/set_rfid_type_limit, /api/v1/set_day_limit, /api/v1/move_count_api дополнительно проверяют доступ к компании.
11. Короткая таблица методов#
| Метод | HTTP | Назначение |
|---|---|---|
| /api/v1/get_list_company_transformed | GET | Компании |
| /api/v1/get_products | GET | Виды топлива |
| /api/v1/report_list_imei_current_user | GET | Модули ТРК / IMEI |
| /api/v1/object_rfid_type | GET | Типы RFID-карт |
| /api/v1/get_limit_types | GET | Типы лимитов |
| /api/v1/rfid_list_api | GET | Список RFID-карт |
| /api/v1/get_rfid_object | GET | Детальная RFID-карта |
| /api/v1/add_rfid | POST | Добавление RFID |
| /api/v1/set_name_rfid_tag_api | PUT | Переименование RFID |
| /api/v1/set_rfid_type_limit | PUT | Лимитная/безлимитная |
| /api/v1/set_day_limit | PUT | Суточный лимит |
| /api/v1/move_count_api | PATCH | Начисление топлива |
| /api/v1/rfid_lock | PATCH | Блокировка RFID |
| /api/v1/rfid_delock | PATCH | Разблокировка RFID |
| /api/v1/set_pin | PUT | PIN карты |
| /api/v1/rfid/set_division | PUT | Подразделение карты |
| /api/v1/rfid/set_expire_date | PUT | Срок действия карты |
| /api/v1/vehicle | GET/POST/PUT/DELETE | Автомобили |
| /api/v1/set_vehicle_id_to_rfid | PATCH | Привязка автомобиля к RFID |
| /api/v1/report_by_rfid | GET | Операции по RFID |
| /api/v1/report_by_objects_income | GET | Транзакции по IMEI |
/api/v1/add_rfid_new |
POST | Добавление RFID (с явной компанией/продуктом) |
/api/v1/add_rfid_bulk |
POST | Пакетное добавление RFID |
/api/v1/delete_rfid |
DELETE | Удаление RFID (только без движений) |
/api/v1/set_name_rfid_tag |
PUT | Универсальное обновление карты: имя, суточный лимит, тип лимита, тип карты, склад, привязка сотрудника/автомобиля |
/api/v1/create_employee_from_rfid |
POST | Создать сотрудника и привязать карту |
/api/v1/create_vehicle_from_rfid |
POST | Создать автомобиль и привязать карту |