ЮKassa и 1С: как связать приём платежей, чеки и учёт поступлений
Содержание
Подключить Ю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.
- Войдите в личный кабинет ЮKassa и выберите нужный магазин.
- Откройте раздел интеграции и перепишите
shopId— это числовой идентификатор магазина. - Выпустите секретный ключ. Он показывается один раз: сразу сохраните его в надёжном месте.
- В том же разделе укажите адрес HTTP-уведомлений, например
https://1c.example.ru/base/hs/yookassa/notify, и отметьте событияpayment.succeeded,payment.canceled,refund.succeeded. - Включите нужные способы оплаты: банковские карты, СБП, SberPay, электронные кошельки.
- Если касса — «Чеки от Ю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 и объектом платежа.
Порядок обработки:
- Прочитайте
object.idиз уведомления. - Запросите платёж заново:
GET /v3/payments/{id}. Так вы не поверите поддельному уведомлению. - Если статус
succeeded— найдите заказ поmetadata.order_idи зарегистрируйте оплату. - Ответьте кодом 200. Пока ответа 200 нет, ЮKassa повторяет отправку.
Обработку делайте идемпотентной: одно и то же уведомление может прийти дважды, и оплата не должна задвоиться. Проверяйте, нет ли уже документа с этим id.
Проверка в тестовом магазине и сверка с выпиской
Не переключайте боевые ключи, пока тестовый магазин не прошёл полный цикл.
После запуска сверяйте данные раз в день или раз в неделю:
- 📊 реестр платежей и отчёт о перечислениях из личного кабинета ЮKassa — с оплатами в 1С;
- 🏦 сумму зачисления в выписке — с суммой оплат минус комиссия и возвраты;
- 🧮 остаток на счёте 57.03 (или 76) — после всех зачислений он должен быть нулевым.
Расхождение чаще всего даёт возврат, удержанный из следующего перечисления. Его видно в отчёте о перечислениях ЮKassa отдельной строкой.
Ошибки при подключении ЮKassa к 1С и их устранение
Если ошибка не из списка, первым делом смотрите тело ответа ЮKassa: в нём есть код, описание и параметр, который не прошёл проверку. Записывайте его в журнал регистрации целиком — без него служба поддержки ЮKassa не сможет помочь.
Отладку на рабочей базе с боевыми ключами не ведите. Каждый тестовый платёж — это реальное списание, чек в ФНС и последующий возврат с комиссией.
Частые вопросы
Можно ли принимать оплату через ЮKassa без сайта?
Сколько стоит приём платежей?
Когда деньги приходят на расчётный счёт?
Нужна ли своя касса, если подключены «Чеки от ЮKassa»?
Можно ли подключить несколько организаций?
Источники
- Федеральный закон от 22.05.2003 № 54-ФЗ «О применении контрольно-кассовой техники»
- Федеральный закон от 27.06.2011 № 161-ФЗ «О национальной платёжной системе»