Используйте устойчивую операцию со статусами, идемпотентным списанием и одним ключом обращения к провайдеру. Неизвестный результат сначала сверяют, а не сразу списывают или возвращают деньги повторно.
Как обеспечить надёжность при оплате мобильного телефона (списание у нас + начисление у МТС)?
Используйте устойчивую операцию со статусами, идемпотентным списанием и одним ключом обращения к провайдеру. Неизвестный результат сначала сверяют, а не сразу списывают или возвращают деньги повторно.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Используйте устойчивую операцию со статусами, идемпотентным списанием и одним ключом обращения к провайдеру. Неизвестный результат сначала сверяют, а не сразу списывают или возвращают деньги повторно.
Локальную запись операции и резервирование/списание фиксируют транзакционно вместе с outbox. Worker отправляет запрос и сохраняет подтверждённый результат; timeout означает неопределённость, если провайдер мог уже начислить деньги. Нужны запрос статуса, reconciliation и контролируемая компенсация. Гарантии зависят от реального API оператора: нельзя приписывать ему поддержку idempotency или общей распределённой транзакции без контракта.