RAPI

FLOW

Создать магазин

Как оформить возврат денег покупателю без повторной операции

Порядок полного и частичного возврата онлайн-платежа: исходная операция, сумма и товарные строки, неизвестный статус, чек и сверка заказа. Учебный пример.

Белый кот смотрит на чек и терминал, соединённые линией возврата

Возврат денег оформляйте по исходному платежу: определите уже возвращённую и доступную сумму, выберите полный или частичный возврат, отправьте один запрос и дождитесь проверенного результата. Затем отдельно сверьте кассовый чек и состояние заказа. Нажатие кнопки не доказывает ни завершённый возврат, ни готовность товара к повторной продаже.

Ниже рассматриваем уже согласованное требование по онлайн-оплате. Основания, сроки и физический приём товара разобраны в руководстве по возвратам. Здесь задача оператора — вернуть правильную сумму, сохранить связь с покупкой и избежать дубля.

Найдите исходную операцию

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

Проверьте состояние денег. Платёж мог быть подтверждён, только авторизован, отменён или ещё ожидать результата. Для неподтверждённой двухстадийной оплаты провайдер может предусматривать отмену авторизации; это отличается от возврата уже принятой оплаты. Не выбирайте операцию по правилу «в день покупки отмена, позже возврат» без проверки фактического состояния.

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

Как определить сумму и строки

Что сверитьПочему это меняет действие
Первоначальная оплатаВерхняя граница исходной операции
Успешные предыдущие возвратыУменьшают доступный остаток
Запросы в обработке или с неизвестным результатомМогут уже исполняться; нельзя игнорировать их при новом запросе
Скидки и частично возвращаемое количествоОпределяют фактическую стоимость возвращаемых позиций
Доставка и другие строкиИх судьба зависит от согласованного и законного основания, а не от желания округлить сумму

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

Учебный частичный возврат

Вымышленный заказ оплачен на 3 600 ₽: два разных товара по 1 500 ₽ и доставка 600 ₽. Ранее денег не возвращали. Согласован возврат одного товара за 1 500 ₽; в этом учебном основании доставка и второй товар сохраняются. Это допущение примера, а не универсальное правило о доставке.

  1. Оператор находит исходный успешный платёж на 3 600 ₽ и проверяет отсутствие других запросов возврата.
  2. Выбирает частичный возврат 1 500 ₽, связывает его с нужной товарной строкой и сохраняет внутренний номер действия.
  3. После отправки сохраняет идентификатор операции возврата у провайдера и её состояние.
  4. Получает подтверждение завершения, проверяет необходимые чековые сведения и уведомление покупателя.
  5. Сверяет остаток оплаченной суммы: 3 600 − 1 500 = 2 100 ₽. В заказе остаются второй товар за 1 500 ₽ и доставка 600 ₽.

Если провайдер ответил состоянием обработки, шаг завершения ещё не пройден. Например, в ЮKassa нужно проверить сведения о возврате в истории операции; у других решений названия и переходы могут различаться. Универсального смысла одного английского слова для всех провайдеров нет.

Альтернатива: заказ полностью отменён, а платёж авторизован, но ещё не подтверждён продавцом. В API ЮKassa это состояние waiting_for_capture: для него проверяют отмену авторизации. Для уже подтверждённого платежа в состоянии succeeded применяется возврат. Действие меняется из-за фактического состояния платежа, даже если сумма заказа та же; у другого провайдера уточните соответствующие названия и операции.

Если запрос завис или ответ потерялся

Тайм-аут означает неизвестный результат запроса. Деньги могли начать возвращаться, хотя оператор не получил подтверждение. Не нажимайте повторно «вернуть» с новым номером действия только потому, что экран не обновился.

Сначала найдите возврат по исходному платежу, идентификатору запроса и времени. Проверьте кабинет, API или журнал интеграции. Если результат установить не удалось, передайте провайдеру номера операций и остановите повторные денежные действия по этой сумме до выяснения. Внутренний статус «проверяем» полезнее ложного «ошибка, можно повторять».

При API-интеграции разработчик должен использовать предусмотренную провайдером защиту от повторного исполнения: например, ключ идемпотентности для одной логической операции. Условия срока действия такого ключа и повтора запроса зависят от API. Наличие ключа не заменяет проверку уже выполненных возвратов при новом частичном действии.

Если операция окончательно отклонена, запишите причину и допустимый следующий шаг по инструкции провайдера. Не обещайте покупателю точную дату поступления, которую магазин не контролирует: различайте отправку возврата, его подтверждение сервисом и отражение у банка клиента.

Деньги и кассовый чек проверяются отдельно

При применении ККТ возврат принятой оплаты сопровождается необходимым кассовым документом с признаком «возврат прихода» по вашей схеме расчёта. Для отмены авторизации отдельно проверьте, был ли уже сформирован исходный чек: состояние банковского платежа этого не устанавливает. Если чек прихода уже создан, выполните предусмотренное выбранным кассовым решением действие по его возврату; если его не было, нельзя вывести необходимость такого чека только из слова «отмена» на экране.

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

Уточните, кто формирует чек: ваш модуль, собственная касса или договорный кассовый сервис. Для частичного возврата нужны соответствующие позиции, количество, стоимость с учётом скидок и применимые реквизиты. Если предусмотрена автоматическая отправка через ЮKassa, сверяйте результат регистрации и правила выбранной услуги; если чеки формируете самостоятельно, возврат не должен остаться без кассового события.

В примере для «Чеков от ЮKassa» частичный возврат содержит одну возвращаемую позицию, количество 1 и сумму 1 500 ₽ с её действительными кассовыми реквизитами. Доставку 600 ₽ и второй товар в эти строки не включают при принятом основании примера. При API-подключении данные чека передаются вместе с запросом по правилам этого сервиса, а результат регистрации проверяют отдельно, в том числе по полю receipt_registration. Для сторонней или собственной ККТ используйте её согласованный обмен, а не дублируйте эту отправку.

Если деньги вернулись, а чек не зарегистрирован, исправляйте кассовую часть. Повторно возвращать ту же сумму ради получения чека нельзя. Распределение ответственности и состояния обмена полезно проверить ещё при тестировании платежей.

Как закрыть обращение

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

В учебном примере после подтверждения возврата в 1 500 ₽ товар может ещё находиться в обратной доставке. Его учитывают в соответствующем состоянии, а не добавляют в доступный остаток. При получении отдельно решают вопрос качества и пригодности.

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

Заказ, исходный платёж, дата и сумма:
Основание и согласованные строки возврата:
Предыдущие и незавершённые запросы:
Сумма текущего действия и внутренний номер:
ID возврата провайдера, состояние и время проверки:
Кто формирует чек, результат регистрации/доставки:
Баланс заказа после операции:
Отдельный статус товара и приёмки:
Сообщение покупателю и следующее действие:
Подтверждение закрытия:

Чек-лист денежного возврата

Весь функционал бесплатно на 3 месяца

Далее 990 рублей в месяц

Создать магазин