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

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 Ежечасно Ночные отчёты

Виртуальные карты

public void ReleaseVirtualCard(Card card)
{
    // Создание виртуальной карты на стороне ВИНКа
}

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

# Получение карт
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 истёк Повторная аутентификация

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