Оплата по 54-ФЗ
Решение Яндекс.Кассы для работы по 54-ФЗ позволяет настроить взаимодействие с вашей онлайн-кассой: отправлять онлайн-кассе запрос на формирование чека (поддерживает ФФД 1.05) и получать результат.
Яндекс.Касса не отправляет электронный чек пользователю: даже если ему приходит электронное письмо об оплате, оно не считается полноценным чеком. Отправлять чеки пользователям можно другим способом, например, через ОФД.
Подключение
  1. Купите или возьмите в аренду онлайн-кассу одного из наших партнеров.
  2. Заключите договор с оператором фискальных данных (ОФД).
  3. Получите квалифицированную электронную подпись (КЭП).
  4. Зарегистрируйте онлайн-кассу на сайте налоговой (в личном кабинете юрлица).
  5. Заполните настройки для работы по 54-ФЗ в личном кабинете Яндекс.Кассы.
  6. Передавайте Яндекс.Кассе данные для формирования чека в запросах на оплату.
Переход на ФФД 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Выплата по кредиту
Что почитать еще
Проведение платежейНеуспешные платежиВозвраты