Перейти к основному содержимому

Статусы платежа

Статус — в поле status объекта платежа. Статусов три.

statusЧто значитЧто делать магазину
pendingПлатёж создан. Покупатель ещё не заплатил.Ждать. Заказ не выполнять. Если покупатель хочет вернуться к оплате до expires_at, отправить его на тот же confirmation_url — только если сумма заказа не менялась. Если менялась — создать новый платёж с новым ключом идемпотентности.
succeededПокупатель заплатил. paid равно true.Сверить amount с суммой заказа и выполнить заказ один раз.
canceledПлатёж не оплачен: истёк срок, банк отказал или платёж остановила проверка. Причина — в cancellation_details.Заказ не выполнять. Чтобы покупатель заплатил снова, создать новый платёж с новым ключом идемпотентности.

Как меняется статус​

pending ──► succeeded
│
└──────► canceled
  • Новый платёж всегда в статусе pending.
  • Из pending платёж переходит в succeeded или в canceled.
  • succeeded — окончательный статус: дальше он не меняется. Возврат денег статус тоже не меняет: у возврата свой статус (Возвраты), а сколько вернули — в refunded_amount.

Правила для кода​

  1. Выполняйте заказ только при status = succeeded. Не смотрите для этого на paid, income_amount или факт возврата покупателя на сайт.
  2. Перед выполнением заказа сверьте amount.value и amount.currency с суммой заказа. Если сумма заказа изменилась после создания платежа (покупатель поменял корзину, открыл заказ в двух вкладках), создайте новый платёж с новым ключом идемпотентности. Платёж на старую сумму не засчитывайте; если его оплатят — верните деньги (как).
  3. Незнакомый статус считайте как pending: ждите и запросите платёж позже.

Кто отменил платёж​

У платежа со статусом canceled есть поле cancellation_details:

{
"party": "avantpay",
"reason": "expired_on_confirmation"
}

party — кто отменил:

partyКто
merchantМагазин. Сейчас не встречается: отменить платёж через API нельзя.
avantpayAvantPay: истёк срок оплаты, платёж остановила проверка безопасности или его не удалось создать.
payment_networkБанк покупателя, платёжная система или СБП.

Не стройте логику заказа на party и reason: для решения достаточно status. Эти поля нужны, чтобы объяснить покупателю, что случилось.

Причины отмены​

reason — почему отменён платёж. Что бы ни было в reason, заказ не выполняйте. Если покупатель хочет заплатить снова, создайте новый платёж с новым ключом идемпотентности.

reasonКто ставитЧто случилосьЧто сказать покупателю
3d_secure_failedpayment_networkПокупатель не прошёл проверку 3-D Secure: ввёл неверный код или не дождался его.Попробуйте оплатить ещё раз. Если не получится — обратитесь в свой банк.
call_issuerpayment_networkБанк покупателя отказал без объяснения причины.Обратитесь в свой банк или оплатите другим способом.
canceled_by_merchantmerchantПлатёж отменил магазин. Сейчас не встречается.—
card_expiredpayment_networkИстёк срок действия карты.Оплатите другой картой или другим способом.
country_forbiddenpayment_networkКартой этой страны здесь заплатить нельзя.Оплатите картой другого банка или другим способом.
expired_on_confirmationavantpay, payment_networkПокупатель не заплатил вовремя: прошёл expires_at или истёк срок QR-кода или ссылки у банка.Время на оплату вышло. Начните оплату заново.
fraud_suspectedavantpay, payment_networkПлатёж остановлен из-за подозрения в мошенничестве. У avantpay — покупатель заблокирован или превысил лимиты магазина: открытые и неоплаченные ссылки, частота покупок, сумма.Оплатить сейчас нельзя. Если это ошибка — напишите в поддержку магазина.
general_declineavantpay, payment_networkПричина не уточняется.Попробуйте ещё раз или оплатите другим способом.
insufficient_fundspayment_networkНе хватает денег на счёте покупателя.Пополните счёт или оплатите другим способом.
internal_timeoutpayment_networkБанк или платёжная система не ответили вовремя.Попробуйте оплатить ещё раз.
invalid_card_numberpayment_networkНеверный номер карты.Проверьте номер карты и оплатите ещё раз.
invalid_cscpayment_networkНеверный код CVV2/CVC2.Проверьте код и оплатите ещё раз.
issuer_unavailablepayment_networkБанк покупателя недоступен.Попробуйте позже или оплатите другим способом.
payment_method_limit_exceededavantpay, payment_networkИсчерпан лимит платежей для способа оплаты или карты. У avantpay — списание по сохранённому способу превысило лимит автоплатежей.Попробуйте позже, на другую сумму или другим способом.
payment_method_restrictedpayment_networkОперации этим способом запрещены, например карта заблокирована.Обратитесь в свой банк или оплатите другим способом.
permission_revokedavantpayСписание по сохранённому способу невозможно: покупатель отключил автоплатежи.Оплатите заново и снова сохраните способ оплаты.

Если придёт значение, которого нет в таблице, обработайте его как general_decline.