Возврат платежей
Если вы используете решение Яндекс.Кассы для платформ, вы можете сделать возврат успешного платежа одним из двух способов: через личный кабинет или с помощью API Яндекс.Кассы.
Магазин тоже может возвращать платежи через личный кабинет. Чтобы узнавать о таких возвратах, настройте входящие уведомления о событии
refund.succeeded
.
 Особенности возврата
При полном возврате с помощью API Яндекс.Кассы комиссия, которую вы удержали при оплате, возмещается за счет магазинов, в которых были приобретены товары и услуги. Если вы хотите сделать возврат всего платежа и вернуть комиссию за свой счет, создайте несколько частичных возвратов — отдельно для каждого магазина. В каждом запросе на частичный возврат передайте дополнительный параметр
platform_fee_amount
с суммой комиссии к возврату.
Если вы делаете возврат через личный кабинет, комиссия, которую вы удержали при оплате, не возвращается.
Яндекс.Касса не отправляет уведомления о возвратах магазину, вам необходимо делать это самостоятельно.
 Создание полного возврата
Чтобы сделать возврат всего платежа, принятого вами от пользователя, отправьте Яндекс.Кассе запрос на создание возврата . В запросе передайте идентификатор платежа в параметре
payment_id
и сумму возврата в
amount
. Запрос передается без объекта
platform_fee_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"
          },
          "platform_fee_amount": {
            "value": "90.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"},
    "platform_fee_amount": {
       "value": "90.00",
       "currency": "RUB"
    }}
 ]
}
При работе с двухстадийными платежами вы можете отменить платеж , если он находится в статусе
waiting_for_capture
. В этом случае платеж перейдет в статус
canceled
, деньги вернутся пользователю, а Яндекс.Касса не будет удерживать комиссию за проведение оплаты.
Если для отмененного платежа был сформирован чек прихода, необходимо сформировать чек возврата прихода.
 Что почитать еще
Прием платежей для платформОтправка чеков для платформОплата по 54-ФЗ