Menu — Документация

Идемпотентность

Поведение при повторных запросах и сетевых сбоях

Гарантии платформы

Операции создания (Pay In, Pay Out, операции платёжной формы) идемпотентны по полю idTransactionMerchant в пределах одного мерчанта.

Гарантируется, что на пару (IDDomainEntity, idTransactionMerchant) существует не более одной операции. При повторной отправке запроса с использованным значением idTransactionMerchant возвращается ответ:

  • status: "Warning";
  • codeError: "duplicateIdentifier";
  • data: null.

Новая операция не создаётся. Состояние существующей операции получается через GET /operation/operation/platform/{idPlatform}.

Требования к значению idTransactionMerchant

ТребованиеОписание
Уникальностьзначение не должно повторяться между разными заказами в пределах мерчанта, в том числе по истечении любого срока
Устойчивостьодной бизнес‑сущности в системе мерчанта соответствует одно неизменное значение
Детерминированностьзначение не должно регенерироваться при повторных действиях пользователя, инициирующих один и тот же платёж
Совместимость с URLдопустимые символы — алфавитно‑цифровые, _, -

При повторных попытках оплаты одного заказа применяется суффикс с номером попытки, например, order-42-attempt-2.

Порядок действий при сетевом сбое

Сценарий: запрос на создание операции отправлен, ответ не получен в результате таймаута или разрыва соединения. Состояние операции на стороне платформы неизвестно.

Порядок действий:

  1. Создание операции с новым значением idTransactionMerchant не выполняется.
  2. Запрос повторяется с тем же значением idTransactionMerchant после интервала ожидания.
  3. При получении ответа Success операция считается созданной.
  4. При получении ответа Warning с codeError: "duplicateIdentifier" операция уже существует на платформе. Состояние получается через GET /operation/operation/platform/{idPlatform}. Идентификатор idPlatform определяется одним из способов:
    • значение data.id из ответа на первый запрос, если ответ был получен и сохранён;
    • получение операции через эндпойнт POST /operation/operation/list с поиском по idTransactionMerchant.

Код ошибки duplicateIdentifier не определяет состояние операции. Финальное состояние получается отдельным запросом.

Повторная отправка на стороне платформы

СценарийРеализация
Pay Out не принят провайдером с первой попыткиповторная отправка выполняется платформой; операция находится в статусе pending_retry; вмешательство мерчанта не требуется
Доставка webhook не подтверждена 2xxповторная доставка выполняется платформой; гарантируется доставка финального события не менее одного раза

Создание дублирующей операции на стороне мерчанта при наличии статуса pending_retry не требуется и приводит к нарушению учёта.

Реакция мерчанта на различные ответы

УсловиеДействие
HTTP 5xx, сетевой таймаут, разрыв соединенияповтор с тем же idTransactionMerchant, экспоненциальная задержка
Successпродолжение штатного сценария
Warning, codeError = duplicateIdentifierполучение состояния существующей операции
Warning, codeError = internalErrorповтор с экспоненциальной задержкой
Warning, прочие кодыобработка в соответствии с разделом Ошибки
AuthError, AccessErrorпрекращение попыток, уведомление эксплуатации