GazpromApi (Газпромнефть)¶
Обзор¶
Интеграция с Газпромнефть — API для управления картами Газпромнефть.
Класс¶
GazpromApiService
Расположение: FuelProcessing.Data/Services/ApiClients/Gazprom/GazpromApiService.cs
Аутентификация¶
| Поле | Тип | Описание |
|---|---|---|
ApiKey |
string | API ключ |
ApiLogin |
string | Логин |
ApiPassword |
string (зашифрован) | Пароль |
ApiBearer |
string | SessionId (сохраняется) |
Особенности¶
Защита от массового изменения (>500 карт)
Ночные отчёты через Excel файлы
Виртуальные карты:
ReleaseVirtualCard()Сравнение транзакций отчёт/БД
Методы¶
SaveSession¶
Сохранение сессии.
private void SaveSession(string sessionId)
{
settings.ApiBearer = sessionId;
await _context.SaveChangesAsync();
}
GetOrSaveReportKey¶
Управление ключами отчётов.
SendRequestReportTransaction¶
Запрос ключа отчёта.
private string SendRequestReportTransaction(...)
{
// Запускает генерацию отчёта на стороне ВИНКа
// Возвращает ключ для получения
}
GetReportsFromApi¶
Получение отчёта с ожиданием (до 20 попыток, интервал 180 сек).
CheckNotExistedTransactions¶
Проверка пропущенных транзакций.
Ночные отчёты¶
// 1. Запуск генерации отчёта
var reportKey = SendRequestReportTransaction(...);
// 2. Ожидание готовности (до 20 попыток по 3 минуты)
var reportData = GetReportsFromApi(reportKey);
// 3. Сравнение с БД
CheckNotExistedTransactions(reportData);
Защита от массовых операций¶
if (cards.Count > 500)
{
Log.Warning("Mass card change detected: {Count}", cards.Count);
// Отклонение операции
}
Специфичные задачи¶
| Задача | Интервал | Описание |
|---|---|---|
GazpromCreateReportsJob |
Ежечасно | Ночные отчёты |
Виртуальные карты¶
Пример запроса¶
# Получение карт
GET https://api.gazpromneft.ru/cards
Session-Id: {sessionId}
# Запрос отчёта
POST https://api.gazpromneft.ru/reports/request
Session-Id: {sessionId}
# Получение отчёта
GET https://api.gazpromneft.ru/reports/{key}
Session-Id: {sessionId}
Troubleshooting¶
| Проблема | Решение |
|---|---|
| >500 карт | Разбейте на группы |
| Отчёт не готов | Увеличьте время ожидания |
| SessionId истёк | Повторная аутентификация |