Перейти к содержанию

Сценарий 3. Возврат оплаты

Pay API


Описание сценария возврата

Сценарий возврата описывает действия, которые необходимо выполнить, чтобы вернуть покупателю оплаченную сумму. Сценарий может быть выполнен только при наличии уже завершённой операции оплаты.

Info

Приложение «Кошелёк» не участвует в процессе возврата — т.е. сканировать карту лояльности для оформления возврата не нужно.

Возврат оплаты по чеку

Обработка частных случаев возврата

Полный возврат

Для полного возврата необходимо указать:

  • товары (items), которые были были указаны в запросе оплаты.
  • количество товара (quantity), равное количеству, переданному в запросе оплаты;
  • сумму возврата (refundAmount), равную итоговой сумме оплаты (totalAmount).

Частичный возврат

Для частичного возврата необходимо указать:

  • только те товары (items), которые необходимо вернуть
  • только то количество товара (quantity), которое необходимо вернуть;
  • сумму возврата (refundAmount) меньше итоговой суммы оплаты (totalAmount).

Возврат нештучного товара

Для нештучного товара (т.е. товара, у которого единица измерения measure отличается от PIECE — например, весового товара) доступен только полный возврат нештучных позиций.

Альтернативные сценарии возврата и возможные ошибки

Для запуска сценария возврата на кассе необходимо инициировать отправку запроса возврата (POST /refund) на узел Кошелька. Если запрос дошёл до узла Кошелька, то инициируется процесс возврата. Отменить его будет невозможно.

  1. Если касса по каким-то причинам не получила ответ от Кошелька на этот запрос, то можно отправить повторный запрос с тем же значением параметра requestId — это обязательно, т.к. если первый запрос дошел до узла Кошелька, но ответ на него был потерян, то хост Кошелька поймёт, что это повторный вызов первого запроса — касса получит ответ на первый запрос (действует правило идемпотентности).

  2. Если первый запрос не дошёл до узла Кошелька, а второй дошёл, то он будет обработан, как первый.

  3. Если касса получила ответ от узла Кошелька, то в нём будет содержаться поле refTransactionId. Для получения информации по статусу этой операции возврата кассе нужно использовать запрос статуса по операции (POST /status), содержащий полученное значение параметра refTransactionId.

Warning

Если касса не получила ответ на первый запрос возврата (POST /refund) и инициирует новый запрос с изменённым значением параметра requestId, то узел Кошелька обработает его как новый запрос на возврат, и в таком случае возможен двойной возврат средств на счёт пользователя.

Статусы транзакции отмены / возврата

На диаграмме состояний приведены переходы между различными статусами транзакции в процессе выполнения сценариев отмены или возврата платежа через Koshelek Pay API.

  • Зелёным цветом отмечены успешные статусы.
  • Красным отмечены неуспешные статусы.
  • Серым отмечены промежуточные статусы.

Статусы транзакции отмены