ЮKassa и 1С: как связать приём платежей, чеки и учёт поступлений

· 10 мин

Содержание

Подключить ЮKassa к 1С можно четырьмя путями: встроенным сервисом оплаты по ссылке в типовой конфигурации, модулем сайта с обменом заказами, готовым расширением или своей доработкой через API ЮKassa. Для любого из них нужны договор с ЮKassa, идентификатор магазина shopId и секретный ключ, а для чеков по 54-ФЗ — подключённая онлайн-касса.

Типичная ситуация: интернет-магазин уже принимает карты через ЮKassa, а бухгалтер каждый день вручную сводит выписку с заказами и не понимает, куда девается 3% с каждой оплаты. Интеграция решает две задачи сразу: статус оплаты попадает в 1С автоматически, а поступление от агрегатора разносится с комиссией.

Что подготовить до интеграции ЮKassa с 1С

До первой настройки соберите всё, без чего подключение остановится на полпути.

  • 📄 Договор с ЮKassa и активированный магазин в личном кабинете. Пока магазин не прошёл проверку, работает только тестовый режим.
  • 🔑 Доступ к разделу интеграции в личном кабинете: там выпускаются ключи API и задаётся адрес для HTTP-уведомлений.
  • 🧾 Решение по кассе: «Чеки от ЮKassa» или своя онлайн-касса у партнёра (АТОЛ Онлайн, OrangeData и др.). Без этого нельзя продавать физлицам.
  • 💻 Актуальная платформа 8.3 с поддержкой TLS 1.2 и выше. На старых сборках запросы к api.yookassa.ru падают на защищённом соединении.
  • 🌐 Публикация базы на веб-сервере с HTTPS, если 1С должна сама принимать уведомления об оплате.
  • 👤 Права администратора в информационной базе и копия базы для тестов.

Заведите в ЮKassa отдельный тестовый магазин. У него свои shopId и ключ, деньги не списываются, а все сценарии — оплата, отмена, возврат — проходят так же, как в боевом.

Четыре способа подключить ЮKassa к 1С

Выбор способа зависит от того, где клиент нажимает «Оплатить»: на сайте, по ссылке из счёта или в вашей собственной системе.

СпособКогда подходитЧто нужноРиски
Встроенный сервис оплаты по ссылке в типовой (БП 3.0, УНФ)Счета юрлицам и физлицам без сайтаИнтернет-поддержка, договор с ЮKassaМеньше гибкости, зависит от релиза
Модуль ЮKassa на сайте + обмен с 1СИнтернет-магазин на CMSМодуль CMS, обмен заказами (CommerceML)Статус оплаты приходит в 1С только с обменом
Готовое расширение партнёраНужны уведомления и автосоздание документов без программистаПокупка, установка .cfeСовместимость с вашими доработками
Своя доработка через API v3Нестандартные сценарии, своя логика заказовПрограммист 1С, публикация HTTP-сервисаПоддержка кода при обновлениях

Встроенный сервис ищите в Администрирование → Интернет-поддержка и сервисы, в блоке онлайн-оплат. Состав блока меняется от релиза к релизу, поэтому сначала обновите конфигурацию до актуальной версии.

Готовое расширение ставьте сначала в копию базы. Расширение, которое меняет документы реализации, может конфликтовать с вашими доработками и падать при обновлении типовой.

Ключи API и настройки магазина в личном кабинете ЮKassa

Это общий шаг для всех способов, кроме встроенного сервиса, где авторизация часто идёт через вход в аккаунт ЮKassa.

  1. Войдите в личный кабинет ЮKassa и выберите нужный магазин.
  2. Откройте раздел интеграции и перепишите shopId — это числовой идентификатор магазина.
  3. Выпустите секретный ключ. Он показывается один раз: сразу сохраните его в надёжном месте.
  4. В том же разделе укажите адрес HTTP-уведомлений, например https://1c.example.ru/base/hs/yookassa/notify, и отметьте события payment.succeeded, payment.canceled, refund.succeeded.
  5. Включите нужные способы оплаты: банковские карты, СБП, SberPay, электронные кошельки.
  6. Если касса — «Чеки от ЮKassa», включите отправку чеков и укажите систему налогообложения.

Секретный ключ не храните в коде модуля и не пересылайте в мессенджерах. Сохраните его в безопасном хранилище данных или в константе с ограниченными правами. При утечке перевыпустите ключ: старый перестанет работать сразу.

Адрес уведомлений должен работать по HTTPS с действительным сертификатом. Самоподписанный не подойдёт. Порт — стандартный 443 или 8443.

Сценарии оплаты: ссылка, двухстадийный платёж, возврат

ЮKassa работает со статусами платежа. От них зависит, что именно делать в 1С.

СтатусЧто значитДействие в 1С
pendingПлатёж создан, клиент ещё не оплатилНичего не проводить, ждать
waiting_for_captureДеньги заблокированы на карте (двухстадийная оплата)Подтвердить или отменить после сборки заказа
succeededОплата прошлаОтметить заказ оплаченным, зарегистрировать оплату
canceledОтменён или истёк срокСнять резерв, сообщить менеджеру

Одностадийная оплата

Параметр capture: true — деньги списываются сразу. Подходит для услуг, подписок и товаров, которые всегда есть в наличии.

Двухстадийная оплата

При capture: false сумма только блокируется. Магазин собирает заказ и подтверждает списание или отменяет его. Удобно, когда товара может не оказаться на складе: не нужно оформлять возврат. На подтверждение есть ограниченный срок; точный срок зависит от способа оплаты, смотрите его в документации ЮKassa.

Возвраты

Возврат создаётся отдельным запросом POST /v3/refunds с идентификатором платежа. Можно вернуть всю сумму или часть. В 1С параллельно оформляется возврат от покупателя, а при наличии кассы — чек возврата прихода.

Как отразить поступления от ЮKassa в учёте

ЮKassa перечисляет деньги на расчётный счёт одной суммой за период, уже за вычетом комиссии. Поэтому в учёте две операции:

  • 🛒 Оплата клиентом. Задолженность покупателя закрывается в момент оплаты, а не в день зачисления на счёт. В БП 3.0 для этого используют документ из Банк и касса → Операции по платёжным картам с видом оплаты «Платёжная карта», где контрагентом указана ЮKassa.
  • 🏦 Зачисление от агрегатора. Документ Поступление на расчётный счёт с видом операции «Поступление от продаж по платёжным картам и банковским кредитам». Разница между суммой оплат и суммой зачисления — комиссия.

Пример: за день клиенты оплатили 50 000 ₽, комиссия 3% — 1 500 ₽, на счёт пришло 48 500 ₽.

Проводки по операции

Часть организаций ведёт расчёты с агрегатором на счёте 76 — это допустимо, если закреплено в учётной политике. Главное, чтобы остаток на промежуточном счёте после зачисления обнулялся.

Чеки по 54-ФЗ при оплате через ЮKassa

При расчётах с физлицами каждый платёж через ЮKassa требует кассового чека. Есть два варианта.

«Чеки от ЮKassa». Касса ЮKassa формирует чек сама по данным из запроса на оплату. Отдельный кассовый аппарат не нужен, но в запросе обязательно передаётся объект receipt.

Своя онлайн-касса. Чек пробивает ваша касса — облачная у партнёра ЮKassa или подключённая к 1С. Тогда нужно следить, чтобы чек не пробился дважды: и кассой, и 1С.

Что передаётся в receipt:

  • 📧 контакт покупателя — email или телефон, туда уйдёт электронный чек;
  • 📦 позиции: наименование, количество, цена, код ставки НДС;
  • 🏷️ признак предмета расчёта (commodity — товар, service — услуга);
  • 💳 признак способа расчёта (full_prepayment или full_payment).

Сумма позиций в чеке должна совпадать с суммой платежа до копейки, иначе ЮKassa отклонит запрос. Ставку НДС берите по справочнику кодов ЮKassa и сверяйте с той, что стоит в номенклатуре 1С, особенно после изменения ставок.

Если оплата поступила раньше отгрузки, первый чек — с признаком «Предоплата 100%». При передаче товара нужен второй чек — «Полный расчёт» с зачётом предоплаты. ЮKassa умеет отправлять такой второй чек отдельным запросом. Если его не пробить, при проверке это нарушение 54-ФЗ.

Связь 1С с ЮKassa через API: код и HTTP-уведомления

Своя доработка состоит из двух частей: 1С создаёт платёж и получает ссылку, а ЮKassa сообщает 1С о результате.

Создание платежа из 1С

Запрос идёт на https://api.yookassa.ru/v3/payments с базовой авторизацией shopId:секретный ключ и обязательным заголовком Idempotence-Key. Пример на встроенном языке:

Функция СоздатьПлатежЮKassa(ShopId, СекретныйКлюч, Сумма, НомерЗаказа, АдресВозврата) Экспорт

    Данные = Новый Структура;
    Данные.Вставить("amount", Новый Структура("value, currency",
        Формат(Сумма, "ЧДЦ=2; ЧРД=.; ЧГ=0"), "RUB"));
    Данные.Вставить("capture", Истина);
    Данные.Вставить("confirmation", Новый Структура("type, return_url",
        "redirect", АдресВозврата));
    Данные.Вставить("description", "Оплата заказа " + НомерЗаказа);
    Данные.Вставить("metadata", Новый Структура("order_id", НомерЗаказа));

    Запись = Новый ЗаписьJSON;
    Запись.УстановитьСтроку();
    ЗаписатьJSON(Запись, Данные);
    ТелоЗапроса = Запись.Закрыть();

    Соединение = Новый HTTPСоединение("api.yookassa.ru", 443, ShopId, СекретныйКлюч,
        , 60, Новый ЗащищенноеСоединениеOpenSSL);

    Запрос = Новый HTTPЗапрос("/v3/payments");
    Запрос.Заголовки.Вставить("Content-Type", "application/json");
    Запрос.Заголовки.Вставить("Idempotence-Key", Строка(Новый УникальныйИдентификатор));
    Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8);

    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();

    Если Ответ.КодСостояния <> 200 Тогда
        ВызватьИсключение "ЮKassa вернула код " + Формат(Ответ.КодСостояния, "ЧГ=0") + ": " + ТекстОтвета;
    КонецЕсли;

    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(ТекстОтвета);
    Результат = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();

    // Сохраните Результат.id в заказе, а ссылку отправьте клиенту
    Возврат Новый Структура("ИдПлатежа, Ссылка",
        Результат.id, Результат.confirmation.confirmation_url);

КонецФункции

Если подключена касса, добавьте в Данные структуру receipt с покупателем и позициями. Сумма — строкой с точкой и двумя знаками: "1500.00", а не число 1500.

💡 Идентификатор платежа id обязательно запишите в заказ или в отдельный регистр. По нему потом ищут платёж, подтверждают двухстадийную оплату и оформляют возврат.

Приём уведомлений

Для уведомлений создайте в расширении конфигурации HTTP-сервис с методом POST и опубликуйте базу на веб-сервере (Apache или IIS) с HTTPS. ЮKassa присылает JSON с полем event и объектом платежа.

Порядок обработки:

  1. Прочитайте object.id из уведомления.
  2. Запросите платёж заново: GET /v3/payments/{id}. Так вы не поверите поддельному уведомлению.
  3. Если статус succeeded — найдите заказ по metadata.order_id и зарегистрируйте оплату.
  4. Ответьте кодом 200. Пока ответа 200 нет, ЮKassa повторяет отправку.

Обработку делайте идемпотентной: одно и то же уведомление может прийти дважды, и оплата не должна задвоиться. Проверяйте, нет ли уже документа с этим id.

Проверка в тестовом магазине и сверка с выпиской

Не переключайте боевые ключи, пока тестовый магазин не прошёл полный цикл.

Тестовый прогон перед запуском
Выполнено: 0 / 8

После запуска сверяйте данные раз в день или раз в неделю:

  • 📊 реестр платежей и отчёт о перечислениях из личного кабинета ЮKassa — с оплатами в 1С;
  • 🏦 сумму зачисления в выписке — с суммой оплат минус комиссия и возвраты;
  • 🧮 остаток на счёте 57.03 (или 76) — после всех зачислений он должен быть нулевым.

Расхождение чаще всего даёт возврат, удержанный из следующего перечисления. Его видно в отчёте о перечислениях ЮKassa отдельной строкой.

Ошибки при подключении ЮKassa к 1С и их устранение

Диагностика: выберите симптом

Если ошибка не из списка, первым делом смотрите тело ответа ЮKassa: в нём есть код, описание и параметр, который не прошёл проверку. Записывайте его в журнал регистрации целиком — без него служба поддержки ЮKassa не сможет помочь.

Отладку на рабочей базе с боевыми ключами не ведите. Каждый тестовый платёж — это реальное списание, чек в ФНС и последующий возврат с комиссией.

Частые вопросы

Можно ли принимать оплату через ЮKassa без сайта?
Да. Ссылку на оплату можно сформировать из 1С или в личном кабинете ЮKassa и отправить клиенту в письме или мессенджере вместе со счётом.
Сколько стоит приём платежей?
Ориентировочно 2,8–3,5% с оплаты картой и заметно меньше с оплаты через СБП. Точная ставка зависит от тарифа и оборота, её указывают в договоре.
Когда деньги приходят на расчётный счёт?
Обычно на следующий рабочий день после оплаты, одной суммой за вычетом комиссии. График перечислений указан в договоре.
Нужна ли своя касса, если подключены «Чеки от ЮKassa»?
Нет, для платежей через ЮKassa отдельная касса не нужна. Но наличные и оплаты в офисе всё равно пробиваются на вашей кассе.
Можно ли подключить несколько организаций?
Да, но у каждой организации свой договор и свой магазин с отдельными shopId и ключом. В 1С храните ключи в разрезе организаций.

Источники

  • Федеральный закон от 22.05.2003 № 54-ФЗ «О применении контрольно-кассовой техники»
  • Федеральный закон от 27.06.2011 № 161-ФЗ «О национальной платёжной системе»