Оплата по 54-ФЗ
Решение Яндекс.Кассы для работы по 54-ФЗ позволяет настроить взаимодействие с вашей онлайн-кассой: отправлять онлайн-кассе запрос на формирование чека (поддерживает ФФД 1.05) и получать результат.
Яндекс.Касса не отправляет электронный чек пользователю: даже если ему приходит электронное письмо об оплате, оно не считается полноценным чеком. Отправлять чеки пользователям можно другим способом, например, через ОФД.
 Подключение
  1. Купите или возьмите в аренду онлайн-кассу одного из наших партнеров.
  2. Заключите договор с оператором фискальных данных (ОФД).
  3. Получите квалифицированную электронную подпись (КЭП).
  4. Зарегистрируйте онлайн-кассу на сайте налоговой (в личном кабинете юрлица).
  5. Заполните настройки для работы по 54-ФЗ в личном кабинете Яндекс.Кассы.
  6. Передавайте Яндекс.Кассе данные для формирования чека в запросах на оплату.
 Новые реквизиты в чеках с 1 июля 2019 года
С 1 июля 2019 года изменяются требования к реквизитам кассовых чеков, поэтому в некоторых случаях понадобится передавать Яндекс.Кассе дополнительные данные о пользователе и товаре.
Передавать новые параметры пока нельзя, но начинать интеграцию уже можно.
 Данные о пользователе
Появится возможность передать дополнительные данные о пользователе (
receipt.customer
):
  • наименование пользователя (тег 1227) —
    full_name
    ;
  • ИНН пользователя (тег 1228) —
    inn
    .
Параметры
receipt.email
и
receipt.phone
устареют — данные о номере телефона и электронной почте рекомендуется передавать в объекте
receipt.customer
(параметры
email
и
phone
соответственно).
 Дополнительные данные о товаре
Для каждого товара (
receipt.items
) можно будет указать:
  • код товара (тег 1162) —
    product_code
    ;
  • код страны происхождения товара (тег 1230) —
    country_of_origin_code
    ;
  • номер таможенной декларации (тег 1231) —
    customs_declaration_number
    ;
  • сумму акциза (тег 1229) —
    excise
    .
Пример запроса на оплату с новыми параметрами для чека
cURL
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": "Иванов Иван Иванович",
            "email": "johndoe@yandex.ru",
            "phone": "79000000000",
            "inn": "6321341814"
            },
          "items": [
            {
              "description": "Наименование товара 1",
              "quantity": "2.00",
              "amount": {
                "value": "250.00",
                "currency": "RUB"
              },
              "vat_code": "2",
              "payment_mode": "full_prepayment",
              "payment_subject": "commodity",
              "country_of_origin_code": "RU",
              "customs_declaration_number": "10714040/140917/0090376",
              "excise": "20.00"
            },
            {
              "description": "Наименование товара 2",
              "quantity": "1.00",
              "amount": {
                "value": "100.00",
                "currency": "RUB"
              },
              "vat_code": "2",
              "payment_mode": "full_prepayment",
              "payment_subject": "commodity",
              "product_code": "00 00 00 01 00 21 FA 41 00 23 05 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 00 AB 00"
              }
          ]
        }
      }'
 Переход на ФФД 1.05
С 1 января 2019 года вступает в силу новый формат фискальных документов (ФФД 1.05), и в чеке нужно будет для каждого товара передавать дополнительные параметры:
Если вы уже пользуетесь решением Яндекс.Кассы, вам нужно перейти на новый формат. Порядок перехода зависит от вашей онлайн-кассы.
 АТОЛ Онлайн
  1. Сначала доработайте интеграцию по API Яндекс.Кассы и начните передавать новые параметры (
    payment_subject
    и
    payment_mode
    ).
  2. Когда всё будет настроено, зайдите в личный кабинет АТОЛ и переключитесь на новый формат фискальных документов.
Порядок важен: если на стороне АТОЛ формат поменяете, а новые данные отправлять не будете, сломаются платежи или отправка чеков.
 Orange Data, МодульКасса, Бизнес.Ру Онлайн-Чеки и Кит Инвест
Новые параметры можно уже передавать. Если вы их не передаете, ваша онлайн-касса будет подставлять значения по умолчанию на своей стороне.
 Проведение платежа
 Выбор способа отправки чека онлайн-кассе
До начала проведения платежей вы должны выбрать в настройках в личном кабинете способ отправки чека онлайн-кассе: за 3 дня или за 5 минут.
Отправка чека за 3 дня (рекомендуемый способ). Статус платежа не зависит от статуса доставки данных для чека. Когда пользователь успешно внесет оплату, платеж, как обычно, перейдет в статус
waiting_for_capture
или
succeeded
(подробнее о статусах). Параллельно с этим Яндекс.Касса отправит данные для формирования чека и в течение трех дней будет добиваться ответа об их получении. Статус платежа не изменится, даже если за это время онлайн-касса не сообщит о получении данных.
Отправка чека за 5 минут. Cтатус платежа зависит от статуса доставки данных для чека. После успешной оплаты платеж остается в статусе
pending
и будет ждать формирования чека. Если онлайн-касса в течение пяти минут сообщит о получении данных для чека, платеж перейдет в статус
waiting_for_capture
или
succeeded
(подробнее о статусах), если нет, в статус
canceled
. Используйте эту настройку только в крайнем случае, если сформированный чек важнее успешного платежа.
 Проведение платежа с учетом требований 54-ФЗ
Если вы собираетесь принять платеж от юридического лица, вам не нужно передавать данные для чека. Создайте простой платеж со способом оплаты Сбербанк Бизнес Онлайн.
Создайте платеж, в объекте
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": {
          "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"
    },
    "title": "Bank card *1111"
  },
  "receipt_registration": "pending",
  "recipient": {
    "account_id": "67192",
    "gateway_id": "352780"
  },
  "refunded_amount": {
    "value": "600.00",
    "currency": "RUB"
  }
}
Если платеж перейдет в статус
canceled
(например, вы не подтвердите платеж за отведенное время), Яндекс.Касса сформирует чек возврата и доставит его пользователю.
 Частичное подтверждение
Если вы хотите изменить сумму платежа при подтверждении, передайте в запросе:
  • новую сумму (она не может быть больше исходной);
  • объект
    receipt
    с параметрами для формирования нового чека.
Пример запроса с подтверждением части платежа и новым чеком
cURL
PHP
Python
curl https://payment.yandex.net/api/v3/payments/<payment-id>/capture \
  -X POST \
  -u <Идентификатор магазина>:<Секретный ключ> \
  -H 'Idempotence-Key: <Ключ идемпотентности>' \
  -H 'Content-Type: application/json' \
  -d '{
        "amount": {
          "value": "500.00",
          "currency": "RUB"
        },
        "receipt": {
          "phone": "79000000000",
          "items": [
            {
              "description": "Наименование товара",
              "quantity": "2.00",
              "amount": {
                "value": "250.00",
                "currency": "RUB"
              },
              "vat_code": "2"
            }
          ]
        }
      }'
 Возврат
Создайте новый возврат 
, в объекте
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": "<Идентификатор возвращаемого платежа>",
        "amount": {
          "value": "600.00",
          "currency": "RUB"
        },
        "receipt": {
          "phone": "79000000000",
          "items": [
            {
              "description": "Наименование товара 1",
              "quantity": "2.00",
              "amount": {
                "value": "250.00",
                "currency": "RUB"
              },
              "vat_code": "2"
            },
            {
              "description": "Наименование товара 2",
              "quantity": "1.00",
              "amount": {
                "value": "100.00",
                "currency": "RUB"
              },
              "vat_code": "2"
            }
          ]
        }
      }'
Как только возврат будет создан, мы отправим вашей онлайн-кассе данные для регистрации чека.
 Справочник значений параметров
Ниже приведены значения для следующих параметров объекта
receipt
:
 Коды систем налогообложения
Код системы налогообложения передается в объекте
receipt
, в параметре
tax_system_code
. Возможные значения — цифра от 1 до 6.
КодСистема налогообложения
1Общая система налогообложения
2Упрощенная (УСН, доходы)
3Упрощенная (УСН, доходы минус расходы)
4Единый налог на вмененный доход (ЕНВД)
5Единый сельскохозяйственный налог (ЕСН)
6Патентная система налогообложения
Товары с разным значением tax_system_code необходимо передавать в разных чеках.
 Коды ставок НДС
Код системы налогообложения передается в объекте
receipt
, в параметре
vat_code
. Возможные значения — цифра от 1 до 6.
КодСтавка НДС
1Без НДС
2НДС по ставке 0%
3НДС по ставке 10%
4НДС чека по ставке 20%
5НДС чека по расчетной ставке 10/110
6НДС чека по расчетной ставке 20/120
 Признак предмета расчета
Признак предмета расчета передается в объекте
receipt
, в параметре
payment_subject
. Возможные значения:
ЗначениеОписание
commodityТовар
exciseПодакцизный товар
jobРабота
serviceУслуга
gambling_betСтавка в азартной игре
gambling_prizeВыигрыш в азартной игре
lotteryЛотерейный билет
lottery_prizeВыигрыш в лотерею
intellectual_activityРезультаты интеллектуальной деятельности
paymentПлатеж
agent_commissionАгентское вознаграждение
property_rightИмущественные права
non_operating_gainВнереализационный доход
insurance_premiumСтраховой сбор
sales_taxТорговый сбор
resort_feeКурортный сбор
compositeНесколько вариантов
anotherДругое
 Признак способа расчета
Признак способа расчета передается в объекте
receipt
, в параметре
payment_mode
. Возможные значения:
ЗначениеОписание
full_prepaymentПолная предоплата
partial_prepaymentЧастичная предоплата
advanceАванс
full_paymentПолный расчет
partial_paymentЧастичный расчет и кредит
creditКредит
credit_paymentВыплата по кредиту
 Что почитать еще
Проведение платежейНеуспешные платежиВозвраты