Skip to content
8 / 15

Как спроектировать приём платежей?

Платежи — это не про RPS, а про то, чтобы никогда не списать дважды и не потерять факт списания. Три опоры решения: ключ идемпотентности от клиента, по которому повторный запрос возвращает результат первого; состояние платежа как конечный автомат с разрешёнными переходами и без обратного хода из терминальных состояний; вебхуки провайдера, которые приходят повторно и в произвольном порядке, поэтому обрабатываются идемпотентно и по версии события. Самый опасный сценарий — таймаут ответа провайдера: непонятно, прошло списание или нет, и единственный корректный выход — не гадать, а перевести платёж в pending и дозапросить статус. Поверх всего нужна сверка с выгрузкой провайдера: расхождения находятся именно там.

Как спроектировать приём платежей? | JScriptiser