Визард «Приём оплаты через ЮKassa»

Визард «Приём оплаты через ЮKassa» собирает приём платежей целиком: заказ → оплата → страница статуса → приёмник уведомлений. Разбираем поля мастера, три сценария, которые он строит, подключение кабинета ЮKassa и проверку цепочки на тестовом магазине.

ЮKassa принимает платежи и сообщает сайту о результате. Чтобы это заработало, сайту нужно четыре вещи: тип «Заказ», сценарий оплаты, страница статуса и приёмник уведомлений. Визард создаёт всё разом — вам остаются данные шопа и два клика в кабинете ЮKassa.

Что понадобится

  • Shop ID — личный кабинет ЮKassa → Настройки → Магазин.
  • Секретный ключ — Настройки → API-ключи. Для проверки годится ключ тестового магазина.
  • Сценарий, на холст которого встанет оплата (или пустой новый — визард любит чистый холст).

Где найти визард

Админка → «Сайт» → сценарий → тулбар → «Пресеты» → карточка «Приём оплаты через ЮKassa». Визорд также доступен при создании сценария — в окне создания есть поле «Начать с пресета».

Галерея пресетов: карточка «Приём оплаты через ЮKassa»

Поля мастера

Поле Что вписать
Тип контента для заказов Существующий тип заказов или новый — визард предложит создать «Заказы» (order) с полями title, amount, status, payment_id
Shop ID Из кабинета ЮKassa; только цифры
Поле суммы Свойство типа, куда пишется сумма (amount); подойдёт 990, 990.5 или 990.00 — в ЮKassa уйдёт "990.00"
Поле статуса Свойство статуса заказа (status)
Секретный ключ магазина API-ключ шопа; уезжает в «Секреты» как yookassa_basic и никогда не попадает в сценарий открытым текстом
Секрет в URL уведомлений Случайная строка ≥8 символов — войдёт в адрес приёмника, который вы впишете в кабинете
Адрес сайта https://ваш-сайт — на него вернут покупателя и на него же придут уведомления
Путь страницы возврата Куда вернуть покупателя после оплаты, по умолчанию /payment/return

Мастер визарда: тип заказов, Shop ID, поля суммы и статуса, секретный ключ и секрет в URL уведомлений

Что собирает визард

Одна заявка «Создать» — и в проекте появляются три сценария, два маршрута и шаблон:

Артефакт Роль
Основной сценарий (на ваш холст) Заказ → платёж → редирект на ЮKassa
Сценарий payment_return Страница статуса: показывает «оплачен / в обработке»
Сценарий yookassa-hook Приёмник уведомлений: переводит заказ в «paid»
Маршрут <путь возврата> (GET) Держит страницу статуса; кэш отключён (TTL 0)
Маршрут /yookassa-hook/<секрет> (POST) Принимает уведомления; кэш отключён (TTL 0)
Шаблон payment_return.liquid Разметка страницы статуса — правится в «Файлах»

Основная цепочка читается сверху вниз: Начало → GraphQL (создать заказ со статусом pending) → HTTP POST к api.yookassa.ru/v3/payments — авторизация Basic из «Секретов», ключ идемпотентности — свежий uuid — → GraphQL (дописать заказу payment_id) → Редирект 303 на confirmation_url из ответа ЮKassa.

Готовый сценарий оплаты: заказ → платёж → сохранение payment_id → редирект на ЮKassa

Приёмник уведомлений работает так: по payment_id и сумме из уведомления выбирается заказ; если совпадение нашлось — статус меняется на paid и ЮKassa получает 200 {"ok":true}, если нет — 400 {"error":"mismatch"}, заказ не трогается.

Подключить кабинет ЮKassa

  1. Скопируйте URL приёмника из подсказки визарда: https://<адрес сайта>/yookassa-hook/<секрет>.
  2. Личный кабинет ЮKassa → Настройки → HTTP-уведомления → впишите этот URL.
  3. Подключите событие payment.succeeded — его достаточно для перевода заказов в «paid».

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

Цепочка проверяется end-to-end на тестовом магазине ЮKassa:

  • оформление заказа уводит на yoomoney-чек (303) и после оплаты возвращает на страницу статуса;
  • уведомление получает 200, заказ — статус «Оплачен», страница возврата показывает «Заказ оплачен»;
  • уведомление с чужой суммой получает 400, заказ не меняется;
  • запрос с неверным секретом в URL получает 404.

Тонкости

  • Сумма нормализуется фильтром money — в заказ можно вписать 990, 990.5 или 990.00, а в ЮKassa уйдёт всегда "990.00": Liquid печатает числа в минимальной записи («990»), поэтому формат фиксирует фильтр, а не тип поля.
  • ЮKassa не подписывает уведомления — вместо проверки подписи визард использует неугадываемый URL с секретом и сверку суммы с заказом. Подключайте в кабинете только payment.succeeded.
  • Кассовые чеки 54-ФЗ визард не собирает — их стоит подключать отдельно, если вы на НМЦК.
  • payment_id появляется не сразу: на шаге чекаута его ещё нет, сценарий дописывает его в заказ вторым запросом уже после создания платежа.
  • Обе страницы не кэшируются (TTL 0): статус и вебхук всегда отвечают живыми данными.
  • Сумма сверяется по заказу: если посетитель откроет страницу статуса до оплаты, шаблон честно покажет «ещё не оплачен».

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

Вопрос Ответ
Все уведомления получают 404 Не совпадает секрет в URL или сценарий yookassa-hook не опубликован. Сверьте URL в кабинете с подсказкой визарда.
Заказ не становится «Оплачен» Проверьте, что URL уведомлений вписан в кабинете и что сумма в заказе равна сумме платежа — расхождение отвечает 400.
Хочу принимать не рубли Валюта RUB зашита в узле платежа — поменяйте её в конфигурации HTTP POST-узла на холсте.
Страница возврата показывает «ещё не оплачен» после оплаты Обновите страницу через минуту: уведомление могло ещё дойти. Если не помогает — сверьте URL уведомлений и журнал запусков yookassa-hook.

См. также: Пресеты сценариев · Узлы-действия: что умеет каждый · Черновик, превью и публикация