Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про PHP: idempotency, duplicate, payment

Ключи идемпотентности — как избежать дублирования операций (например, двойной оплаты) при потере соединения?

Этот вопрос объясняет использование ключей идемпотентности для предотвращения повторного выполнения операций при сбоях сети.

Короткий ответ

Ключи идемпотентности — это уникальные идентификаторы, которые позволяют серверу определять повторяющиеся запросы и обрабатывать их только один раз. Клиент генерирует уникальный ключ для каждой операции (например, платежа) и отправляет его с запросом. Сервер проверяет, не обрабатывался ли уже запрос с таким ключом, и если да — возвращает предыдущий результат вместо выполнения операции повторно.

Длинный ответ

Идемпотентность гарантирует, что повторный запрос с теми же параметрами не вызовет побочных эффектов.

Как работают ключи идемпотентности:

  1. Генерация ключа

    • Клиент создает уникальный UUID для операции

    • Ключ привязывается к конкретной бизнес-операции

    • Сохраняется на клиенте для повторной отправки

  2. Обработка на сервере

    • Сервер проверяет наличие ключа в хранилище

    • Если ключ новый — выполняется операция

    • Если ключ уже использован — возвращается кэшированный ответ

Пример реализации:

class PaymentController {
    public function processPayment(Request $request) {
        $idempotencyKey = $request->header('Idempotency-Key');
        
        // Проверка в Redis
        $cacheKey = "idempotency:{$idempotencyKey}";
        if ($result = Redis::get($cacheKey)) {
            return json_decode($result);
        }
        
        // Выполнение платежа
        $paymentResult = $this->process($request);
        
        // Сохранение результата
        Redis::setex($cacheKey, 3600, json_encode($paymentResult));
        
        return $paymentResult;
    }
}

Типичное использование:

  • Финансовые операции (платежи, переводы)

  • Создание заказов

  • Критичные изменения данных

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • PHP

    PHP

Ключевые слова

#idempotency

#duplicate

#payment

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.