Перейти к содержанию

TrackApi (Трасса)

Обзор

Интеграция с Трасса — API для управления топливными картами на АЗС Трасса.

Клиент

TrackApiClient

Расположение: FuelProcessing/TrackApi/Client/TrackApiClient.cs

Низкоуровневый клиент для взаимодействия с API Трасса. Использует RestHelper для выполнения HTTP-запросов.

RestHelper

Расположение: FuelProcessing/TrackApi/Client/RestHelper.cs

Вспомогательный класс для выполнения HTTP-запросов через RestSharp.

Базовые URL: - Legacy: http://lkcard.trassagk.ru:8080/pws/ - API v1: https://account.trassagk.ru/api/v1/ - API v2: https://account.trassagk.ru/

Аутентификация

Поле Тип Описание
ApiPassword string (зашифрован) Пароль API
ApiLogin string Логин API
TrackApiLogin string Логин для токена
TrackApiPassword string Пароль для токена
IdContractTrack string? ID контракта (сохраняется)
Token string Bearer токен для запросов
ApiToken string Токен аутентификации

Особенности

  • ✅ Пагинация при получении карт (page/limit)
  • ✅ HTML-парсинг баланса через regex
  • ✅ Асинхронная установка лимитов
  • ⚠ Максимальный лимит: 99999
  • ✅ Двойственная реализация: старая логика и Swagger Integration

Методы TrackApiClient

Класс содержит методы двух регионов: OldLogic (устаревшая реализация) и Swagger Integration (современная реализация).

Region: OldLogic

GetToken(string apiPass, string apiRecordKey)

Получение токена аутентификации.

public LoginResponse GetToken(string apiPass, string apiRecordKey)

Параметры: - apiPass — пароль API - apiRecordKey — ключ записи (логин)

Возвращает: LoginResponse с токеном

Endpoint: POST /api/v1/user/login


GetCompany()

Получение информации о компании.

public CompanyResponse GetCompany()

Возвращает: CompanyResponse с данными компании

Endpoint: GET /user/accounts


GetCards(CardRequest request)

Получение списка карт (устаревший метод).

public CardResponse GetCards(CardRequest request)

Параметры: - request.CompanyTrackId — ID компании - request.page — номер страницы - request.limit — лимит записей

Возвращает: CardResponse

Endpoint: GET /companies/{CompanyTrackId}/cards?page={page}&limit={limit}


BlockCard(BlockRequest request, Action<string, string, string> logAction = null)

Блокировка карты (устаревший метод).

public HttpStatusCode BlockCard(BlockRequest request, Action<string, string, string> logAction = null)

Параметры: - request.CompanyTrackId — ID компании - request.CardTrackId — ID карты - logAction — опциональный callback для логирования

Возвращает: HttpStatusCode

Endpoint: PUT /companies/{CompanyTrackId}/cards/{CardTrackId}/block


UnblockCard(UnblockRequest request, Action<string, string, string> logAction = null)

Разблокировка карты (устаревший метод).

public HttpStatusCode UnblockCard(UnblockRequest request, Action<string, string, string> logAction = null)

Параметры: - request.CompanyTrackId — ID компании - request.CardTrackId — ID карты - logAction — опциональный callback для логирования

Возвращает: HttpStatusCode

Endpoint: PUT /companies/{CompanyTrackId}/cards/{CardTrackId}/unblock


GetTransactionsOld(DateTime start, DateTime end)

Получение транзакций (устаревший синхронный метод).

public TransactionResponse GetTransactionsOld(DateTime start, DateTime end)

Параметры: - start — начальная дата - end — конечная дата

Возвращает: TransactionResponse

Endpoint: POST /public-api/transactions.do


GetTransactions(DateTime start, DateTime end)

Получение транзакций с пагинацией (асинхронный метод).

public async Task<FinanceTransactionReponse> GetTransactions(DateTime start, DateTime end)

Параметры: - start — начальная дата - end — конечная дата

Возвращает: FinanceTransactionReponse со списком транзакций

Особенности: - Автоматическая пагинация с задержкой 30 секунд между страницами - Фильтрация транзакций по датам

Endpoint: GET /integration/v1/transactions


GetBalance()

Получение баланса аккаунта.

public String GetBalance()

Возвращает: HTML-страница с балансом (парсится через regex)

Endpoint: POST /login.do?oper=logon


Region: Swagger Integration

GET Methods

GetTransactions(int page = 1, string cardId = null, string dateFrom = null, string dateTo = null)

Получение транзакций с фильтрацией.

public IRestResponse GetTransactions(int page = 1, string cardId = null, string dateFrom = null, string dateTo = null)

Параметры: - page — номер страницы (по умолчанию 1) - cardId — фильтр по ID карты - dateFrom — начальная дата (формат: yyyy-MM-dd HH🇲🇲ss) - dateTo — конечная дата

Возвращает: IRestResponse

Endpoint: GET /integration/v1/transactions


GetCards(int page = 1, string cardNumber = null)

Получение списка карт.

public CardResponse GetCards(int page = 1, string cardNumber = null)

Параметры: - page — номер страницы (по умолчанию 1) - cardNumber — фильтр по номеру карты

Возвращает: CardResponse

Endpoint: GET /integration/v1/cards


GetWallets(int page = 1)

Получение списка кошельков.

public IRestResponse GetWallets(int page = 1)

Параметры: - page — номер страницы (по умолчанию 1)

Возвращает: IRestResponse

Endpoint: GET /integration/v1/wallets


GetServices(int page = 1, Action<string, string, string> logAction = null)

Получение списка сервисов.

public RootServiceModel GetServices(int page = 1, Action<string, string, string> logAction = null)

Параметры: - page — номер страницы (по умолчанию 1) - logAction — опциональный callback для логирования

Возвращает: RootServiceModel или null при ошибке

Endpoint: GET /integration/v1/service


GetCardCosts(string cardId)

Получение затрат по карте.

public IRestResponse GetCardCosts(string cardId)

Параметры: - cardId — ID карты

Возвращает: IRestResponse

Endpoint: GET /integration/v1/card/{cardId}/costs


GetCardLimits(string cardId)

Получение лимитов карты.

public CardLimitsResponse GetCardLimits(string cardId)

Параметры: - cardId — ID карты

Возвращает: CardLimitsResponse с данными лимитов

Endpoint: GET /integration/v1/cards/{cardId}/limits


PUT Methods

BlockCard(string cardId, Action<string, string, string> logAction = null)

Блокировка карты.

public async Task<(HttpStatusCode, string)> BlockCard(string cardId, Action<string, string, string> logAction = null)

Параметры: - cardId — ID карты - logAction — опциональный callback для логирования

Возвращает: Кортеж (HttpStatusCode, string) со статусом и контентом ответа

Особенности: - Задержка 6 секунд после выполнения - Логирование статуса и пути запроса

Endpoint: PUT /integration/v1/cards/{cardId}/block


UnblockCard(string cardId, Action<string, string, string> logAction = null)

Разблокировка карты.

public async Task<(HttpStatusCode, string)> UnblockCard(string cardId, Action<string, string, string> logAction = null)

Параметры: - cardId — ID карты - logAction — опциональный callback для логирования

Возвращает: Кортеж (HttpStatusCode, string) со статусом и контентом ответа

Особенности: - Задержка 6 секунд после выполнения - Логирование статуса и пути запроса

Endpoint: PUT /integration/v1/cards/{cardId}/unblock


POST Methods

SetCardLimit(string cardId, LimitRequest limitRequest, Action<string, string, string> logAction = null)

Установка лимита на карту.

public SetCardLimitResponse SetCardLimit(string cardId, LimitRequest limitRequest, Action<string, string, string> logAction = null)

Параметры: - cardId — ID карты - limitRequest — объект с параметрами лимита - logAction — опциональный callback для логирования

Возвращает: SetCardLimitResponse

При ошибке: Возвращает ответ с Result = false и сообщением "Неизвестная ошибка при выполнении запроса."

Endpoint: POST /integration/v1/cards/{cardId}/limit


Методы TrackApiService

GetToken

Получение токена аутентификации.

private string GetToken()
{
    var response = _restClient.Execute<TokenRequest>(...);
    return response.Token;
}

GetCompany

Получение информации о компании.

GetFuelList

Синхронизация типов топлива с маппингом названий.

Синхронизация

Операция Интервал Описание
Cards 2 часа Пагинация по страницам
Transactions 35 мин С фильтрацией по датам
Balance 20 мин Извлечение из HTML

Пример запроса

# Получение карт
GET https://api.track.ru/cards?page=1&limit=100
Authorization: Bearer {token}

# Получение баланса
GET https://api.track.ru/balance
Authorization: Bearer {token}

Troubleshooting

Проблема Решение
Лимит не устанавливается Проверьте значение <= 99999
Баланс не парсится Проверьте regex-шаблон

Назад к обзору