Чеки при возвратах
В этой статье описано, как проводить возвраты при использовании решения ЮKassa по автоматической регистрации чеков в сервисе Мой налог.
Как это работает
При полном возврате платежа ЮKassa аннулирует чек прихода в сервисе Мой налог.
При частичном возврате ЮKassa аннулирует старый чек и зарегистрирует новый чек для той части заказа, которая осталась после возврата. Данные для чека нужно передавать в объекте
receipt
в том же запросе, что и данные для возврата.
Если вы создали платеж до включения автоотправки чеков, а возвращаете его уже после включения опции, то откорректировать или аннулировать чек вам нужно самостоятельно. Управлять этими чеками по API не получится.
Полный возврат
Если вы делаете полный возврат, данные для чека передавать не нужно.
Для возврата отправьте стандартный запрос на создание возврата . Объект
receipt
не передавайте.
Пример запроса полный возврат с данными для чека
cURL
PHP
Python
curl https://api.yookassa.ru/v3/refunds \
  -X POST \
  -u <Идентификатор магазина>:<Секретный ключ> \
  -H 'Idempotence-Key: <Ключ идемпотентности>' \
  -H 'Content-Type: application/json' \
  -d '{
        "amount": {
          "value": "1000.00",
          "currency": "RUB"
        },
        "payment_id": "<Идентификатор возвращаемого платежа>"
      }'
При возврате ЮKassa автоматически аннулирует чек прихода.
Частичный возврат
Если вы делаете частичный возврат, в запросе на создание возврата  нужно передать объект
receipt
с данными для чека. Необходимо указать контактные данные пользователя (электронную почту или номер телефона) и данные о тех товарах и услугах, которые пользователь возвращает.
Название товара (
item.description
) и стоимость единицы товара (
item.amount
) должны полностью совпадать с теми данными, которые указаны в зарегистрированном чеке. Почему это важно
Пример запроса на частичный возврат с данными для чека
cURL
curl https://api.yookassa.ru/v3/refunds \
  -X POST \
  -u <Идентификатор магазина>:<Секретный ключ> \
  -H 'Idempotence-Key: <Ключ идемпотентности>' \
  -H 'Content-Type: application/json' \
  -d '{
        "payment_id": "<Идентификатор возвращаемого платежа>",
        "amount": {
          "value": "750.00",
          "currency": "RUB"
        },
        "receipt": {
          "customer": {
            "email": "user@example.com"
          },
          "items": [
            {
              "description": "Ложка",
              "quantity": "10",
              "amount": {
                "value": "50.00",
                "currency": "RUB"
              },
              "vat_code": "1"
            },
            {
              "description": "Чашка чайная",
              "quantity": "1",
              "amount": {
                "value": "150.00",
                "currency": "RUB"
              },
              "vat_code": "1"
            },
            {
              "description": "Блюдце",
              "quantity": "1",
              "amount": {
                "value": "100.00",
                "currency": "RUB"
              },
              "vat_code": "1"
            }
          ]
        }
      }'
Как только возврат будет создан, ЮKassa отменит старый чек прихода и создаст новый — с данными о товарах, оставшимися после возврата.
Вы можете узнать, сформировался ли чек, по значению параметра
receipt_registration
в объекте возврата  и в личном кабинете ЮKassa в истории платежей. Если что-то пойдет не так, сформируйте чек вручную в сервисе Мой налог и самостоятельно пришлите пользователю ссылку на чек.
Особенности формирования чеков при частичном возврате
В запросе на создание возврата вы передаете данные о возвращаемых товарах. Чтобы сформировать новый чек для оставшихся товаров, ЮKassa возьмет данные, которые вы указали при возврате, и сравнит их с теми данные, которые есть в зарегистрированном чеке.
Если данные товаров совпадут, ЮKassa сформирует детальный чек: исключит возвращаемые товары и сформирует новый чек с детальным описанием каждой товарной позиции.
Если ЮKassa не найдет в исходном чеке какие-то возвращаемые товары, например из-за опечатки в названии, она сформирует общий чек с одной фиксированной позицией —
Заказ после возврата
и скорректированной суммой.
Пример
При проведении платежа вы передали такие данные:
Название (description)Стоимость (amount)Количество (quantity)
Ложка50.0010
Чашка чайная150.002
Блюдце100.002
Общая сумма заказа — 1000 рублей.
Вы хотите вернуть чашку и блюдце. Общая сумма возврата — 250 рублей, общая сумма оставшейся части заказа — 750 рублей.
Пример корректных данных при возврате
Название (description)Стоимость (amount)Количество (quantity)
Чашка чайная150.001
Блюдце100.001
Названия товаров есть в том чеке, который зарегистрирован в сервисе Мой налог. В этом случае ЮKassa сформирует детальный чек:
Название (description)Стоимость (amount)Количество (quantity)
Ложка50.0010
Чашка чайная150.001
Блюдце100.001
Пример некорректных данных при возврате
Название (description)Стоимость (amount)Количество (quantity)
Чашка чайн.150.001
Блюдце100.001
Названия некоторых товаров отличаются. В этом случае ЮKassa сформирует общий чек:
Название (description)Стоимость (amount)Количество (quantity)
Заказ после возврата750.001
Памятка по подготовке данных для чеков
Проверьте, что вы корректно передаете данные для чеков в объекте
receipt
:
  • объект
    receipt
    есть только в запросах на частичный возврат платежа;
  • указаны электронная почта или номер телефона пользователя (данные переданы в объекте
    customer
    );
  • для каждого товара в 
    items
    указаны только эти параметры —
    description
    ,
    amount
    ,
    quantity
    ,
    vat_code
    ; других параметров нет;
  • названия товаров, сумма за единицу товара полностью совпадают с данными в зарегистрированном чеке прихода;
  • количество товара не превышает количество, указанное в зарегистрированном чеке;
  • quantity
     — только целые числа (без точки и дробной части);
  • vat_code
    везде 1;
  • сумма возврата в 
    amount
    совпадает с общей суммой возвращаемых товаров в объекте
    receipt
    (чтобы определить сумму возвращаемых товаров, для каждого товара умножьте
    quantity
    на 
    amount
    и просуммируйте получившиеся значения по всем товарам);
  • все суммы в чеке положительные.
Что почитать еще
ВозвратыПолучение информации о возвратеКоды ответа (состояния) HTTP