Возврат платежей
Если вы используете решение Яндекс.Кассы для платформ, вы можете сделать возврат успешного платежа одним из двух способов: через личный кабинет или с помощью API Яндекс.Кассы.
Магазин тоже может возвращать платежи через личный кабинет. Чтобы узнавать о таких возвратах, настройте входящие уведомления о событии
refund.succeeded
.
Яндекс.Касса не отправляет уведомления о возвратах магазину, вам необходимо делать это самостоятельно.
 Создание полного возврата
Чтобы сделать возврат всего платежа, принятого вами от пользователя, отправьте Яндекс.Кассе запрос на создание возврата . В запросе передайте идентификатор платежа в параметре
payment_id
и сумму возврата в
amount
.
Запрос на создание возврата нужно передавать без объекта
receipt
. Чтобы сформировать чек возврата прихода, отправьте Яндекс.Кассе отдельный запрос.
Пример запроса на создание полного возврата
cURL
PHP
Python
curl https://payment.yandex.net/api/v3/refunds \
  -X POST \
  -u <Идентификатор магазина>:<Секретный ключ> \
  -H 'Idempotence-Key: <Ключ идемпотентности>' \
  -H 'Content-Type: application/json' \
  -d '{
        "payment_id": "24e89cb0-000f-5000-9000-1de77fa0d6df",
        "amount": {
           "value": "11000.00",
           "currency": "RUB"
        }
      }'
В ответ Яндекс.Касса отправит вам объект возврата  в актуальном статусе.
Пример ответа
JSON
{
  "id": "24eca812-0015-5000-9000-188e730d6114",
  "status": "succeeded",
  "amount": {
    "value": "11000.00",
    "currency": "RUB"
  },
  "created_at": "2019-08-19T12:21:38.575Z",
  "payment_id": "24e89cb0-000f-5000-9000-1de77fa0d6df",
  "sources": [
    {
      "account_id": "123",
      "amount": {
        "value": "2000.00",
        "currency": "RUB"
      }
    },
    {
      "account_id": "456",
      "amount": {
        "value": "9000.00",
        "currency": "RUB"
      }
    }
  ]
}
 Создание частичного возврата
Если вы хотите сделать частичный возврат нескольких товаров из разных магазинов, вам необходимо создать отдельный возврат для каждого магазина. Если все возвращаемые товары пользователь купил в одном магазине, нужно создать один возврат.
Чтобы сделать частичный возврат, отправьте Яндекс.Кассе запрос на создание возврата . В запросе передайте идентификатор платежа в параметре
payment_id
, сумму возврата в
amount
и массив
sources
с данными для возврата: идентификатором магазина и суммой, которую нужно вернуть.
Пример запроса на создание частичного возврата
cURL
PHP
Python
curl https://payment.yandex.net/api/v3/refunds \
  -X POST \
  -u <Идентификатор магазина>:<Секретный ключ> \
  -H 'Idempotence-Key: <Ключ идемпотентности>' \
  -H 'Content-Type: application/json' \
  -d '{
        "payment_id": "24e89cb0-000f-5000-9000-1de77fa0d6df",
        "amount": {
          "value": "9000.00",
          "currency": "RUB"
        },
        "sources": [
        {
          "account_id": "456",
          "amount": {
            "value": "9000.00",
            "currency": "RUB"
          }
        }]     
      }'
В ответ Яндекс.Касса отправит вам объект возврата  в актуальном статусе. Ответ будет содержать дополнительный параметр
sources
с распределением денег — в какой магазин и на какую сумму пользователь вернул товар.
Пример ответа
JSON
{
  "id": "24eca812-0015-5000-9000-188e730d6114",
  "status": "succeeded",
  "amount": {
    "value": "9000.00",
    "currency": "RUB"
  },
  "created_at": "2019-08-19T12:21:38.575Z",
  "payment_id": "24e89cb0-000f-5000-9000-1de77fa0d6df",
  "sources": [
  {
    "account_id": "456",
    "amount": {
       "value": "9000.00",
       "currency": "RUB"}}
 ]
}
При работе с двухстадийными платежами вы можете отменить платеж , если он находится в статусе
waiting_for_capture
. В этом случае платеж перейдет в статус
canceled
, деньги вернутся пользователю, а Яндекс.Касса не будет удерживать комиссию за проведение оплаты.
Если для отмененного платежа был сформирован чек прихода, необходимо сформировать чек возврата прихода.
 Что почитать еще
Прием платежей для платформОтправка чеков для платформОплата по 54-ФЗ