Чеки при платежах
Чеки отражают статус взаиморасчетов между вами и пользователем и подтверждают, что пользователь внес оплату, а вы предоставили ему предмет расчета, например, товар. Если оплата и выдача товара разнесены по времени, например, при доставке товара курьером, вам нужно будет сформировать дополнительный чек при выдаче товара.
 Общий сценарий
  1. Сформируйте чек прихода при платеже.
  2. Если в чеке прихода были товары с предоплатой, при их выдаче сформируйте чек зачета предоплаты.
 Чек прихода
Данные для формирования чека необходимо передавать при создании платежа и при частичном подтверждении (если вы используете двухстадийную оплату).
 Создание платежа
Чтобы сформировать чек при проведении платежа, создайте платеж  и передайте в запросе объект
receipt
с данными для онлайн-кассы.
Если вы собираетесь принять платеж от юридического лица через Сбербанк Бизнес Онлайн, вам не нужно передавать объект
receipt
с данными для чека.
Пример запроса на оплату с параметрами для чека
cURL
PHP
Python
curl https://payment.yandex.net/api/v3/payments \
  -X POST \
  -u <Идентификатор магазина>:<Секретный ключ> \
  -H 'Idempotence-Key: <Ключ идемпотентности>' \
  -H 'Content-Type: application/json' \
  -d '{
        "amount": {
          "value": "600.00",
          "currency": "RUB"
        },
        "confirmation": {
          "type": "redirect",
          "return_url": "https://www.merchant-website.com/return_url"
        },
        "receipt": {
          "customer": {
            "full_name": "Иванов Иван Иванович",
            "phone": "79000000000"
          },
          "items": [
            {
              "description": "Наименование товара 1",
              "quantity": "2.00",
              "amount": {
                "value": "250.00",
                "currency": "RUB"
              },
              "vat_code": "2",
              "payment_mode": "full_prepayment",
              "payment_subject": "commodity"
            },
            {
              "description": "Наименование товара 2",
              "quantity": "1.00",
              "amount": {
                "value": "100.00",
                "currency": "RUB"
              },
              "vat_code": "2",
              "payment_mode": "full_prepayment",
              "payment_subject": "commodity"
            }
          ]
        }
      }'
В ответ вернется созданный объект платежа . Вы можете узнать, сформировался ли чек, по значению параметра
receipt_registration
. Если что-то пойдет не так, сформируйте чек вручную в своей онлайн-кассе.
Пример тела ответа
JSON
{
  "id": "227cf565-000f-5000-8000-1c9d1c6000fb",
  "status": "succeeded",
  "paid": true,
  "amount": {
    "value": "600.00",
    "currency": "RUB"
  },
  "authorization_details": {
    "rrn": "10000000000",
    "auth_code": "000000"
  },
  "captured_at": "2018-05-03T10:17:31.487Z",
  "created_at": "2018-05-03T10:17:09.337Z",
  "metadata": {},
  "payment_method": {
    "type": "bank_card",
    "id": "227cf565-000f-5000-8000-1c9d1c6000fb",
    "saved": false,
    "card": {
      "first6": "411111",
      "last4": "1111",
      "expiry_month": "01",
      "expiry_year": "2020",
      "card_type": "Visa",
      "issuer_country": "RU",
      "issuer_name": "Sberbank"
    },
    "title": "Bank card *1111"
  },
  "receipt_registration": "pending",
  "recipient": {
    "account_id": "100001",
    "gateway_id": "1000001"
  },
  "refundable": true,
  "refunded_amount": {
    "value": "600.00",
    "currency": "RUB"
  }
}
Если после оплаты пользователем платеж перейдет в статус
canceled
, Яндекс.Касса автоматически передаст онлайн-кассе данные для формирования чека возврата.
 Частичное подтверждение платежа
Если вы проводите платежи в две стадии, то при частичном подтверждении платежа будет формироваться два новых чека: один — для возврата предыдущего платежа, второй — для платежа с учетом скорректированных данных. Поэтому если вы хотите подтвердить платеж частично, в запросе на подтверждение  вам необходимо передать объект
receipt
с данными для формирования нового чека.
Пример запроса с частичным подтверждением
cURL
PHP
Python
curl https://payment.yandex.net/api/v3/payments \
  -X POST \
  -u <Идентификатор магазина>:<Секретный ключ> \
  -H 'Idempotence-Key: <Ключ идемпотентности>' \
  -H 'Content-Type: application/json' \
  -d '{
        "amount": {
          "value": "600.00",
          "currency": "RUB"
        },
        "confirmation": {
          "type": "redirect",
          "return_url": "https://www.merchant-website.com/return_url"
        },
        "receipt": {
          "customer": {
            "full_name": "Иванов Иван Иванович",
            "phone": "79000000000"
          },
          "items": [
            {
              "description": "Наименование товара 1",
              "quantity": "2.00",
              "amount": {
                "value": "250.00",
                "currency": "RUB"
              },
              "vat_code": "2",
              "payment_mode": "full_prepayment",
              "payment_subject": "commodity"
            }
          ]
        }
      }'
Если вы подтверждаете всю сумму целиком, данные для чека передавать не нужно.
 Чек зачета предоплаты
Чек зачета предоплаты нужен только в случае, если вы принимали предоплату или аванс за товары.
Чтобы сформировать чек зачета предоплаты, отправьте запрос на создание чека  прихода (
type
со значением
payment
). Все товары в этом чеке должны содержать признак способа расчета «Полный расчет». Укажите в объекте
settlements
все совершённые расчеты. Например, если было несколько частичных предоплат, нужно перечислить каждую с типом расчета «Предоплата (аванс)».
Пример запроса на создание чека
cURL
curl https://payment.yandex.net/api/v3/receipts \
  -X POST \
  -u <Идентификатор магазина>:<Секретный ключ> \
  -H 'Idempotence-Key: <Ключ идемпотентности>' \
  -H 'Content-Type: application/json' \
  -d '{
        "customer": {
          "full_name": "Иванов Иван Иванович",
          "phone": "79000000000"
        },
        "items": [
          {
            "description": "Наименование товара 1",
            "quantity": "2.00",
            "amount": {
              "value": "250.00",
              "currency": "RUB"
            },
            "vat_code": "2",
            "payment_mode": "full_payment",
            "payment_subject": "commodity"
          },
          {
            "description": "Наименование товара 2",
            "quantity": "1.00",
            "amount": {
              "value": "100.00",
              "currency": "RUB"
            },
            "vat_code": "2",
            "payment_mode": "full_payment",
            "payment_subject": "commodity"
          }
        ],
        "settlements": [
          {
            "type": "prepayment",
            "amount": {
              "value": "600.00",
              "currency": "RUB"
            }
          }
        ],
        "payment_id": "24b94598-000f-5000-9000-1b68e7b15f3f",
        "type": "payment",
        "send": "true"
      }'
В ответ на запрос придет объект чека .
JSON
{
  "id": "rt_1da5c87d-0984-50e8-a7f3-8de646dd9ec9",
  "type": "payment",  
  "payment_id": "24b94598-000f-5000-9000-1b68e7b15f3f",
  "status": "pending",
  "items": [
    {
      "description": "Наименование товара 1",
      "quantity": "2.00",
      "amount": {
        "value": "250.00",
        "currency": "RUB"
      },
      "vat_code": "2",
      "payment_mode": "full_payment",
      "payment_subject": "commodity"
    },
    {
      "description": "Наименование товара 2",
      "quantity": "1.00",
      "amount": {
        "value": "100.00",
        "currency": "RUB"
      },
      "vat_code": "2",
      "payment_mode": "full_payment",
      "payment_subject": "commodity"
    }
  ],
  "settlements": [
    {
      "type": "prepayment",
      "amount": {
        "value": "600.00",
        "currency": "RUB"
      }
    }
  ]
}
 Что почитать еще
Основы проведения платежейНеуспешные платежиЧеки при возвратахСправочник значений параметров для чеков