Статусы заказа и операций¶
У заказа и у каждой операции над ним свои статусы:
- статус заказа (
paymentStatus) показывает итог по платежу в целом; - статус операции (
status) показывает результат конкретного действия: оплаты, списания, возврата, отмены.
Магазину нужны оба: решение «выдать заказ» принимается по статусу заказа, а результат возврата или отмены виден только в статусе операции.
Источник: Статусы платежей и операций в документации Яндекс Пэй. Столбец «Что делать магазину» — рекомендации этой документации, а не требования API.
Статус заказа — paymentStatus¶
| Статус | Значение | Что делать магазину |
|---|---|---|
PENDING |
Заказ создан и ожидает оплаты | Ждать вебхук или опрашивать статус. Заказ не выдавать |
AUTHORIZED |
Средства захолдированы, но не списаны (только двухстадийная оплата) | Подтвердить покупку методом /capture или отменить методом /cancel |
CAPTURED |
Платёж проведён, средства списаны | Считать заказ оплаченным и выдавать товар. Возможны возвраты |
PARTIALLY_REFUNDED |
Покупателю возвращена часть средств | Обновить заказ в своей системе. Возможны ещё частичные возвраты или возврат остатка |
REFUNDED |
Покупателю возвращена вся сумма | Закрыть заказ. Дальнейших операций по нему нет |
VOIDED |
Платёж отменён методом /cancel (двухстадийная оплата) или /rollback |
Закрыть заказ как отменённый |
FAILED |
Платёж отменён методом /rollback |
Закрыть заказ как неоплаченный |
CONFIRMED («покупатель подтвердил оформление заказа») встречается только в сценарии Сплит с оплатой при получении, который в этой документации не описан.
Во время возврата заказ остаётся в прежнем статусе
Пока полный возврат обрабатывается, заказ остаётся в CAPTURED. Пока обрабатывается частичный возврат — в CAPTURED, если это первый возврат, или в PARTIALLY_REFUNDED, если частичный возврат уже был.
Если возврат завершился ошибкой, заказ находится в CAPTURED. В этом случае Яндекс Пэй рекомендует обратиться в поддержку.
Результат возврата смотрите в статусе операции REFUND, а не заказа.
Переходы между статусами¶
stateDiagram-v2
[*] --> PENDING: POST /v1/orders
PENDING --> CAPTURED: одностадийная оплата, Сплит
PENDING --> AUTHORIZED: двухстадийная оплата
AUTHORIZED --> CAPTURED: /capture
AUTHORIZED --> VOIDED: /cancel
CAPTURED --> PARTIALLY_REFUNDED: частичный возврат
PARTIALLY_REFUNDED --> PARTIALLY_REFUNDED: ещё один частичный возврат
PARTIALLY_REFUNDED --> REFUNDED: возврат остатка
CAPTURED --> REFUNDED: полный возврат
Переход PENDING → CAPTURED для Сплита на странице статусов Яндекс Пэй отдельно не описан. Он подтверждён запросами в Sandbox — см. пример ниже.
Статус операции — status¶
| Статус | Значение |
|---|---|
PENDING |
Операция обрабатывается |
SUCCESS |
Операция успешно завершена |
FAIL |
Операция завершилась ошибкой |
PENDING у заказа и у операции — разные вещи
paymentStatus: PENDING значит, что покупатель ещё не оплатил заказ. status: PENDING у операции значит, что Яндекс Пэй обрабатывает конкретное действие, например возврат. Заказ при этом может быть давно оплачен (CAPTURED).
Тип операции — operationType¶
| Тип | Что происходит |
|---|---|
AUTHORIZE |
Оплата заказа покупателем: списание (одностадийная оплата) или холдирование (двухстадийная) |
CAPTURE |
Проведение платежа, списание средств |
REFUND |
Возврат средств |
VOID |
Отмена платежа до списания (/cancel или /rollback) |
В API есть и другие типы операций (BIND_CARD, RECURRING, PREPAYMENT, SUBMIT). Они относятся к сценариям, которые в этой документации не описаны.
Как возврат и отмена меняют статус заказа¶
| Операция | Статус операции | Статус заказа |
|---|---|---|
REFUND (полный возврат) |
PENDING |
Остаётся CAPTURED |
REFUND (частичный возврат) |
PENDING |
Остаётся CAPTURED или PARTIALLY_REFUNDED |
REFUND |
SUCCESS |
PARTIALLY_REFUNDED или REFUNDED |
REFUND |
Ошибка возврата | CAPTURED |
VOID через /cancel |
SUCCESS |
VOIDED |
VOID через /rollback |
SUCCESS |
FAILED или VOIDED |
Для операций оплаты (AUTHORIZE, CAPTURE) документация Яндекс Пэй не приводит однозначного соответствия статусам заказа. Как это выглядит на практике для Сплита — в примере ниже.
Пример: оплата Сплитом по логам Sandbox¶
Ответы GET /v1/orders/{order_id} из двух прогонов в Sandbox:
| Момент запроса | Статус заказа | Операции | Лог |
|---|---|---|---|
| После оплаты Сплитом | CAPTURED |
AUTHORIZE на 30 000.00 — SUCCESS |
04-get-order-captured.json |
| После полного возврата | REFUNDED |
AUTHORIZE на 30 000.00 — SUCCESS, REFUND на 30 000.00 — SUCCESS |
03-get-order.json |
В обоих случаях у заказа paymentMethod.methodType: SPLIT. Для магазина оплата Сплитом выглядит как одностадийная: одна операция AUTHORIZE на всю сумму заказа, без отдельного CAPTURE, и заказ сразу переходит в CAPTURED, хотя покупатель платит частями.