EnotPRO Logo EnotPRO

yookassa

Введение

YooKassa (ранее Yandex.Kassa) — платёжная система, позволяющая принимать платежи банковскими картами, через электронные кошельки и другие способы.

При интеграции с EnotPro через вебхук вы сможете:

  • Принимать уведомления об успешных платежах
  • Автоматически начислять баланс пользователю
  • Обрабатывать отмены и возвраты платежей

Типы событий YooKassa

YooKassa присылает уведомления о следующих событиях:

Событие Описание Когда происходит
payment.succeeded Платёж успешно завершён Деньги списаны, можно начислять товар/услугу
payment.waiting_for_capture Платёж ожидает подтверждения Для двухстадийных платежей (холдирование)
payment.canceled Платёж отменён Пользователь отменил или истёк срок
refund.succeeded Возврат успешно выполнен Деньги вернулись пользователю

Важно: Для большинства сценариев (одностадийные платежи) достаточно обрабатывать только payment.succeeded.

Предварительные требования

Данные для доступа к API YooKassa

Параметр Где взять Описание
shopId Личный кабинет ЮKassa → Настройки магазина Идентификатор магазина
secretKey Личный кабинет ЮKassa → API-ключи Секретный ключ для аутентификации
webhookUrl Создаётся в EnotPro URL для приёма уведомлений

Важно: Аутентификация в API ЮKassa происходит по HTTP Basic Auth: логин = shopId, пароль = secretKey.

Шаг 1: Создание вебхука в EnotPro

Создаём вебхук

  1. Перейдите в раздел /adm → Web → Webhook.
  2. Нажмите кнопку «Добавить».
  3. Название: yookassa_payments.
  4. Скопируйте сгенерированный URL (понадобится в личном кабинете ЮKassa).

Настраиваем разрешённые методы

Разрешённый метод Причина
POST ЮKassa отправляет уведомления методом POST

Включаем вебхук

Переключатель «Включен» → ✅.

Шаг 2: Настройка вебхука в личном кабинете ЮKassa

  1. Войдите в личный кабинет ЮKassa.
  2. Перейдите в раздел «Интеграция»«HTTP-уведомления» (формулировка может отличаться).

Укажите URL вебхука:

https://enotpro.app/wh/xxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxx

  1. Выберите события для уведомлений (рекомендуется):
  • payment.succeeded
  • payment.canceled
  1. Сохраните настройки.

Ссылка на официальную документацию: Настройка HTTP-уведомлений в ЮKassa

Шаг 3: Структура входящего запроса от YooKassa

Пример тела запроса для payment.succeeded

{
  "type": "notification",
  "event": "payment.succeeded",
  "object": {
    "id": "22d6d597-000f-5000-9000-145f6df21d6f",
    "status": "succeeded",
    "paid": true,
    "amount": {
      "value": "1000.00",
      "currency": "RUB"
    },
    "created_at": "2018-07-10T14:27:54.691Z",
    "description": "Пополнение баланса",
    "metadata": {
      "user_id": "123456789"
    },
    "payment_method": {
      "type": "bank_card",
      "card": {
        "first6": "555555",
        "last4": "4444",
        "card_type": "MasterCard"
      }
    }
  }
}

Доступные переменные в триггере MAIN

Переменная Значение Пример
${web.body.event} Тип события payment.succeeded
${web.body.object.id} ID платежа в ЮKassa 22d6d597-000f-5000-9000-145f6df21d6f
${web.body.object.status} Статус платежа succeeded
${web.body.object.amount.value} Сумма платежа 1000.00
${web.body.object.amount.currency} Валюта RUB
${web.body.object.metadata.user_id} ID пользователя (из метаданных) 123456789
${web.body.object.description} Описание Пополнение баланса

Шаг 5: Создание HTTP-ответа для YooKassa

ЮKassa ожидает получить ответ с кодом 200 OK. Если ответ не получен или код ошибки, ЮKassa будет повторять уведомления (с увеличивающимися интервалами).

Создаём HTTP-ответ в EnotPro

  1. Перейдите в раздел /adm → Web → HTTP-ответы.
  2. Нажмите «Добавить».
  3. Название: yookassa_success.
  4. Настройки:
Параметр Значение
Код 200
Тело {"status": "ok"}
Content-Type application/json

Важно: ЮKassa игнорирует тело ответа, но код 200 обязателен.

Шаг 6: Настройка триггеров в EnotPro

Создаём HTTP-ответ для кастомного ответа

(См. Шаг 5 выше)

Настраиваем триггер MAIN

Триггер MAIN:

Реакция 1: Условие (проверяем тип события)
  → Тип: String
  → Путь: ${web.body.event}
  → Режим: равно
  → Значение: payment.succeeded
  → Если условие НЕ выполнено:
     → SendResponse (код 200, текст "Ignored")
     → StopTrigger

Реакция 2: SetVarLocal (сохраняем данные платежа)
  → Название: payment_id
  → Значение: ${web.body.object.id}

Реакция 3: SetVarLocal
  → Название: user_id
  → Значение: ${web.body.object.metadata.user_id}

Реакция 4: SetVarLocal
  → Название: amount
  → Значение: ${web.body.object.amount.value}

Реакция 5: SendResponse (подтверждаем получение)
  → HTTP-ответ: yookassa_success

Настраиваем триггер FINISH (из HTTP-ответа yookassa_success)

Здесь выполняем длительные операции — начисление баланса, отправку сообщений.

Триггер FINISH:

Реакция 1: Проверяем, что user_id получен
  → Тип: Has
  → Путь: ${localVar.user_id}
  → Если условие НЕ выполнено:
     → Log: "Ошибка: user_id не передан в metadata"
     → StopTrigger

Реакция 2: GetVarCloud (загружаем текущий баланс)
  → Тип: person
  → Название: balance
  → user_id: ${localVar.user_id}

Реакция 3: AddVarCloud (начисляем сумму)
  → Тип: person
  → Название: balance
  → Значение: ${localVar.amount}

Реакция 4: SendMessage (уведомляем пользователя)
  → chat_id: ${localVar.user_id}
  → Текст: «Ваш баланс пополнен на ${localVar.amount} руб.»

Реакция 5: Log
  → Текст: «Платёж ${localVar.payment_id} обработан, пользователю ${localVar.user_id} начислено ${localVar.amount} руб.»

Шаг 7: Формирование запроса на создание платежа (со стороны бота)

Чтобы пользователь мог инициировать платёж, бот должен отправить запрос к API ЮKassa на создание платежа.

Параметры запроса (minimal для одностадийного платежа)

{
  "amount": {
    "value": "1000.00",
    "currency": "RUB"
  },
  "capture": true,
  "confirmation": {
    "type": "redirect",
    "return_url": "https://t.me/ваш_бот"
  },
  "description": "Пополнение баланса",
  "metadata": {
    "user_id": "123456789"
  }
}
Параметр Описание
amount.value Сумма платежа
amount.currency Валюта (RUB)
capture true — одностадийный платёж (сразу списание), false — двухстадийный (холд)
confirmation.type redirect — перенаправить пользователя на платёжную страницу ЮKassa
confirmation.return_url Куда вернуть пользователя после оплаты
metadata.user_id Важно: ID пользователя в вашем боте (будет в вебхуке)
idempotence_key Уникальный ключ для защиты от дублей (рекомендуется)

Пример создания платежа через SendRequest

Перейдите в раздел /adm → Web → HTTP-запросы.

Создайте запрос с параметрами:

Настройка Значение
URL https://api.yookassa.ru/v3/payments
Метод POST
Заголовки Authorization: Basic base64(shopId:secretKey)
Content-Type: application/json
Idempotence-Key: уникальный_ключ_платежа
Тело JSON из примера выше

В ответе ЮKassa вернёт поле confirmation.confirmation_url — на эту ссылку нужно отправить пользователя.

© 2025 EnotPRO. Все права защищены.