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

Работа с возвратами через СБП

Принятые по QR-кодам платежи в статусе Accepted можно возвращать покупателю через СБП. Возврат бывает полным или частичным — главное, чтобы его сумма не превышала сумму поступления на счёт.

Важно

Через API можно вернуть только платежи по динамическим QR-кодам. Платежи по статическим, кассовым и B2B QR-кодам возвращаются через интернет-банк.

Шаг 1. Получите refTransactionId или trxId

Чтобы указать, какой платёж возвращаем, нужен один из двух идентификаторов:

  • refTransactionId — идентификатор транзакции
  • trxId — идентификатор операции в НСПК

Они работают по отдельности — для возврата достаточно любого одного.

Получить идентификатор можно так:

  • Через вебхук. Если подключён вебхук с событием incomingSbpPayment, при зачислении денег в нём придёт refTransactionId. Поле operationId в этом вебхуке — это и есть trxId.
  • Через статус QR-кода. Если вебхука нет, узнать trxId можно методом Get Qr Codes Payment Status.

Также сохраните qrcId — он понадобится на следующем шаге.

Шаг 2. Отправьте запрос на возврат

Вызовите метод Start Refund и укажите:

  • bankCode — БИК вашей компании, то есть плательщика, со счёта которого идёт возврат. Например, БИК Точка Банка — 044525104.
  • accountCode — идентификатор счёта, с которого идёт возврат.
  • amount — сумма возврата в рублях, не в копейках.
  • qrcId — идентификатор QR-кода, по которому зачислились деньги.
  • refTransactionId или trxId — идентификатор возвращаемой операции из Шага 1. Достаточно передать любой один.
  • purpose — назначение платежа. Можно не заполнять, если покупатель — резидент РФ.
Возврат нерезиденту

Если возвращаете деньги нерезиденту, назначение платежа должно начинаться с {VO99020} Возврат ошибочно полученной суммы <transactionId>, где <transactionId> — идентификатор оригинальной операции - refTransactionId или trxId из Шага 1.

Важно

Здесь amount указывается в рублях, тогда как при создании QR-кодов — в копейках.

Шаг 3. Отследите статус возврата

Проверьте статус возврата методом Get Refund Data. Финальный успешный статус — Accepted. Если возврат не прошёл — статус Rejected.