Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.bedolagam.ru/llms.txt

Use this file to discover all available pages before exploring further.

Бот поддерживает 23 платёжных провайдера одновременно (плюс Apple In-App Purchase). Каждый провайдер включается отдельно, все работают параллельно через единый веб-сервер на порту 8080.

Общая архитектура

Все платежи проходят через баланс: пользователь пополняет баланс любым доступным способом, затем покупает подписку с баланса. Единственное исключение —Telegram Stars и простая подписка (SIMPLE_SUBSCRIPTION_ENABLED), которые могут проводить оплату напрямую, минуя баланс.
Пользователь → Выбор способа оплаты → Провайдер → Webhook → Зачисление на баланс

                                                         Автопокупка (если включена)

                                                         Активация подписки

Приоритет отображения

Способы оплаты отображаются в фиксированном порядке:
  1. Telegram Stars
  2. YooKassa СБП (если YOOKASSA_SBP_ENABLED=true)
  3. YooKassa карты
  4. Tribute
  5. MulenPay
  6. WATA
  7. PayPalych (Pal24)
  8. CryptoBot
  9. Heleket
  10. Platega
  11. CloudPayments
  12. Freekassa
  13. Kassa AI
  14. RioPay
  15. SeverPay
  16. PayPear
  17. RollyPay
  18. AuraPay
  19. Overpay
  20. Etoplatezhi
  21. Antilopay
  22. Jupiter
  23. Donut
  24. Lava
  25. Apple In-App Purchase (только iOS, отображается в Mini App)
  26. Через поддержку (всегда последний)

Поддерживаемые провайдеры

ПровайдерМетоды оплатыWebhook URLВалюта
Telegram StarsЗвёзды Telegram(встроенный)XTR
YooKassaКарты, СБП/yookassa-webhookRUB
CryptoBotUSDT, TON, BTC, ETH/cryptobot-webhookКрипто
CloudPaymentsКарты, 3D-Secure/cloudpayments-webhookRUB
FreekassaNSPK СБП, карты/freekassa-webhookRUB
Kassa AIСБП, карты, SberPay/kassa-ai-webhookRUB
PayPalych (Pal24)Карты, СБП/pal24-webhookRUB
PlategaКарты, СБП, крипто/platega-webhookRUB
WATAКарты/wata-webhookRUB
HeleketКриптовалюта/heleket-webhookКрипто
MulenPayКарты/mulenpay-webhookRUB
TributeTelegram/tribute-webhookRUB
RioPayКарты/riopay-webhookRUB
SeverPayСБП, карты/severpay-webhookRUB
PayPearКарты, СБП, SberPay, T-Pay/paypear-webhookRUB
RollyPayСБП, карты, крипто/rollypay-webhookRUB → USDT
AuraPayКарты, СБП/aurapay-webhookRUB
OverpayКарты, СБП/overpay-webhookRUB
EtoplatezhiКарты, СБП/etoplatezhi-webhookRUB
AntilopayКарты, СБП, SberPay (RSA)/antilopay-webhookRUB
Jupiter (FPGate P2P)СБП через QR-код/jupiter-webhookRUB
Donut (Donut P2P)Карты, СБП по телефону, СБП QR/donut-webhookRUB
Lava BusinessКарты, СБП/lava-webhookRUB
Apple In-App PurchaseПокупки через iOS App Store(App Store Server API)USD
Все webhook URL доступны на едином сервере бота (порт 8080). Укажите полный путь: https://hooks.domain.com/webhook-path. Для CloudPayments дополнительно доступны суб-роуты /check, /pay, /fail.

Общие настройки платежей

Эти переменные влияют на все платёжные системы.

Описания и шаблоны платежей

# Название сервиса в описании платежа
PAYMENT_SERVICE_NAME=Интернет-сервис

# Описания для разных типов платежей
PAYMENT_BALANCE_DESCRIPTION=Пополнение баланса
PAYMENT_SUBSCRIPTION_DESCRIPTION=Оплата подписки

# Шаблоны формирования описания (переменные: {service_name}, {description})
PAYMENT_BALANCE_TEMPLATE={service_name} - {description}
PAYMENT_SUBSCRIPTION_TEMPLATE={service_name} - {description}

Управление интерфейсом

ПеременнаяТипПо умолчаниюОписание
DISABLE_TOPUP_BUTTONSboolfalseСкрыть кнопки быстрого пополнения
SUPPORT_TOPUP_ENABLEDbooltrueПоказывать кнопку “Через поддержку”
PRICE_ROUNDING_ENABLEDbooltrueОкругление цен (до 50 коп вниз, свыше 50 коп вверх)

Автопроверка платежей

# Автоматическая проверка статуса незавершённых платежей (YooKassa)
PAYMENT_VERIFICATION_AUTO_CHECK_ENABLED=false
PAYMENT_VERIFICATION_AUTO_CHECK_INTERVAL_MINUTES=10

Автопокупка после пополнения

# Автоматически оформить подписку из сохранённой корзины после пополнения баланса
AUTO_PURCHASE_AFTER_TOPUP_ENABLED=false
Подробнее — см. Автопокупка и корзина.

Автооплата (автопродление)

Подробнее — см. Рекуррентные платежи.
ПеременнаяТипПо умолчаниюОписание
ENABLE_AUTOPAYboolfalseГлобальное включение системы автопродления
DEFAULT_AUTOPAY_ENABLEDboolfalseАвтооплата включена у новых пользователей по умолчанию
DEFAULT_AUTOPAY_DAYS_BEFOREint3За сколько дней до окончания подписки списывать
MIN_BALANCE_FOR_AUTOPAY_KOPEKSint10000Минимальный баланс для срабатывания (100 руб)
SUBSCRIPTION_RENEWAL_BALANCE_THRESHOLD_KOPEKSint20000Порог баланса для автопродления (200 руб)
AUTOPAY_WARNING_DAYSstr3,1Дни для отправки предупреждений (через запятую)

Telegram Stars

Встроенная платёжная система Telegram. Не требует webhook — платежи обрабатываются через Telegram Bot API.

Настройки

ПеременнаяТипПо умолчаниюОписание
TELEGRAM_STARS_ENABLEDbooltrueВключить оплату звёздами
TELEGRAM_STARS_RATE_RUBfloat1.3Курс: 1 звезда = X рублей
TELEGRAM_STARS_DISPLAY_NAMEstrTelegram StarsОтображаемое название
Telegram Stars — единственный провайдер, включённый по умолчанию. Курс 1.3 означает: 1 звезда = 1.30 руб. Количество звёзд рассчитывается автоматически на основе суммы в рублях.

Округление и нормализация суммы

Количество звёзд рассчитывается из суммы в рублях с помощью стандартного округления (round()):
звёзды = round(сумма_в_рублях / курс)
Например, при курсе 1.79 за звезду и сумме 500₽: round(500 / 1.79) = 279 звёзд. При зачислении сумма нормализуется: на баланс попадает не исходная сумма, а точный эквивалент оплаченных звёзд: звёзды × курс. В примере выше: 279 × 1.79 = 499.41₽, а не 500₽.
Это означает, что пользователь получает ровно столько, сколько стоят оплаченные звёзды. Небольшая разница между запрошенной и зачисленной суммой — следствие округления при конвертации.

Особенности

  • Работает без внешних webhook и API-ключей
  • Поддерживает как пополнение баланса, так и прямую оплату простых подписок
  • Валюта: XTR (Telegram Stars)
  • Минимум: 1 звезда

YooKassa

Самый популярный провайдер для российского рынка. Поддерживает банковские карты, СБП, и фискализацию через НалоGo.

Обязательные настройки

YOOKASSA_ENABLED=true
YOOKASSA_SHOP_ID=123456
YOOKASSA_SECRET_KEY=live_xxxxxxxxxxxxx

Все переменные

ПеременнаяТипПо умолчаниюОписание
YOOKASSA_ENABLEDboolfalseВключить YooKassa
YOOKASSA_SHOP_IDstrОбязательно. ID магазина
YOOKASSA_SECRET_KEYstrОбязательно. Секретный ключ
YOOKASSA_DISPLAY_NAMEstrYooKassaОтображаемое название
YOOKASSA_RETURN_URLstrURL возврата после оплаты (по умолчанию WEBHOOK_URL/payment-success или https://t.me/)
YOOKASSA_DEFAULT_RECEIPT_EMAILstrEmail для отправки чеков (54-ФЗ)
YOOKASSA_VAT_CODEint1Код НДС (1=без НДС, 2=0%, 3=10%, 4=20%)
YOOKASSA_SBP_ENABLEDboolfalseВключить оплату через СБП (отдельная кнопка)
YOOKASSA_PAYMENT_MODEstrfull_paymentРежим оплаты для чеков
YOOKASSA_PAYMENT_SUBJECTstrserviceТип предмета расчёта для чеков
YOOKASSA_WEBHOOK_PATHstr/yookassa-webhookПуть webhook
YOOKASSA_WEBHOOK_HOSTstr0.0.0.0Хост для webhook
YOOKASSA_WEBHOOK_PORTint8082Порт (устаревший, используется 8080)
YOOKASSA_TRUSTED_PROXY_NETWORKSstrДоверенные сети прокси (через запятую)
YOOKASSA_MIN_AMOUNT_KOPEKSint5000Минимальная сумма (50 руб)
YOOKASSA_MAX_AMOUNT_KOPEKSint1000000Максимальная сумма (10 000 руб)
YOOKASSA_QUICK_AMOUNT_SELECTION_ENABLEDboolfalseКнопки быстрого выбора суммы

Webhook

Укажите в кабинете YooKassa: https://hooks.domain.com/yookassa-webhook
Бот проверяет IP-адреса YooKassa и отклоняет запросы с неизвестных адресов. При использовании reverse proxy укажите сети прокси в YOOKASSA_TRUSTED_PROXY_NETWORKS.

Рекуррентные платежи (сохранённые карты)

YooKassa поддерживает сохранение банковских карт для автоматического пополнения баланса при продлении подписки. Подробнее — см. Рекуррентные платежи.
ПеременнаяТипПо умолчаниюОписание
YOOKASSA_RECURRENT_ENABLEDboolfalseВключить сохранение карт и рекуррентные платежи
YOOKASSA_RECURRENT_REQUIREDboolfalseВсегда запрашивать сохранение карты при оплате
YOOKASSA_TEST_MODEboolfalseТестовый режим (принимать тестовые платежи). В проде тестовые платежи отклоняются
При включённом YOOKASSA_RECURRENT_ENABLED:
  • При успешной оплате карта автоматически сохраняется (если пользователь дал согласие или RECURRENT_REQUIRED=true)
  • Сохранённые карты используются для автоматического пополнения баланса при продлении подписки
  • Работает совместно с системой автооплаты (ENABLE_AUTOPAY=true): если у пользователя недостаточно баланса для продления, бот автоматически списывает нужную сумму с сохранённой карты
  • Пользователь может управлять сохранёнными картами (удалять ненужные)
Для работы рекуррентных платежей необходимо одновременно включить YOOKASSA_RECURRENT_ENABLED=true и ENABLE_AUTOPAY=true. Без автооплаты сохранённые карты не будут использоваться автоматически.

Фискализация (НалоGo)

YooKassa поддерживает автоматическую отправку чеков через НалоGo (для самозанятых):
NALOGO_ENABLED=true
NALOGO_INN=123456789012
NALOGO_PASSWORD=your_password
NALOGO_DEVICE_ID=optional_device_id
NALOGO_STORAGE_PATH=./nalogo_tokens.json
ПеременнаяТипПо умолчаниюОписание
NALOGO_ENABLEDboolfalseВключить отправку чеков
NALOGO_INNstrОбязательно. ИНН самозанятого
NALOGO_PASSWORDstrОбязательно. Пароль от ЛК Мой Налог
NALOGO_DEVICE_IDstrID устройства (генерируется автоматически)
NALOGO_STORAGE_PATHstr./nalogo_tokens.jsonПуть хранения токенов
Настройки очереди чеков:
ПеременнаяТипПо умолчаниюОписание
NALOGO_QUEUE_CHECK_INTERVALint300Интервал проверки очереди (секунды)
NALOGO_QUEUE_RECEIPT_DELAYint3Задержка между отправкой чеков (секунды)
NALOGO_QUEUE_MAX_ATTEMPTSint10Максимум попыток отправки чека

CryptoBot

Криптовалютные платежи через CryptoBot.

Обязательные настройки

CRYPTOBOT_ENABLED=true
CRYPTOBOT_API_TOKEN=your_token

Все переменные

ПеременнаяТипПо умолчаниюОписание
CRYPTOBOT_ENABLEDboolfalseВключить CryptoBot
CRYPTOBOT_API_TOKENstrОбязательно. API-токен из @CryptoBot
CRYPTOBOT_DISPLAY_NAMEstrCryptoBotОтображаемое название
CRYPTOBOT_WEBHOOK_SECRETstrСекрет для проверки webhook
CRYPTOBOT_BASE_URLstrhttps://pay.crypt.botБазовый URL API
CRYPTOBOT_TESTNETboolfalseИспользовать тестовую сеть (testnet-pay.crypt.bot)
CRYPTOBOT_WEBHOOK_PATHstr/cryptobot-webhookПуть webhook
CRYPTOBOT_WEBHOOK_PORTint8083Порт (устаревший, используется 8080)
CRYPTOBOT_DEFAULT_ASSETstrUSDTКриптовалюта по умолчанию
CRYPTOBOT_ASSETSstrUSDT,TON,BTC,ETHДоступные криптовалюты (через запятую)
CRYPTOBOT_INVOICE_EXPIRES_HOURSint24Время жизни инвойса (часы)

Тестовый режим

CRYPTOBOT_TESTNET=true
При CRYPTOBOT_TESTNET=true все запросы идут на testnet-pay.crypt.bot. Используйте для тестирования без реальных средств.

Webhook

Укажите в @CryptoBot -> My Apps -> Webhook: https://hooks.domain.com/cryptobot-webhook

CloudPayments

Платежи через виджет CloudPayments с поддержкой 3D-Secure.

Обязательные настройки

CLOUDPAYMENTS_ENABLED=true
CLOUDPAYMENTS_PUBLIC_ID=pk_xxxxxxxxxxxxx
CLOUDPAYMENTS_API_SECRET=your_api_secret

Все переменные

ПеременнаяТипПо умолчаниюОписание
CLOUDPAYMENTS_ENABLEDboolfalseВключить CloudPayments
CLOUDPAYMENTS_PUBLIC_IDstrОбязательно. Public ID магазина
CLOUDPAYMENTS_API_SECRETstrОбязательно. API Secret
CLOUDPAYMENTS_DISPLAY_NAMEstrCloudPaymentsОтображаемое название
CLOUDPAYMENTS_API_URLstrhttps://api.cloudpayments.ruURL API
CLOUDPAYMENTS_WIDGET_URLstrhttps://widget.cloudpayments.ru/showURL виджета оплаты
CLOUDPAYMENTS_DESCRIPTIONstrПополнение балансаОписание платежа
CLOUDPAYMENTS_CURRENCYstrRUBВалюта
CLOUDPAYMENTS_MIN_AMOUNT_KOPEKSint5000Минимальная сумма (50 руб)
CLOUDPAYMENTS_MAX_AMOUNT_KOPEKSint10000000Максимальная сумма (100 000 руб)
CLOUDPAYMENTS_WEBHOOK_PATHstr/cloudpayments-webhookПуть webhook
CLOUDPAYMENTS_WEBHOOK_HOSTstr0.0.0.0Хост для webhook
CLOUDPAYMENTS_WEBHOOK_PORTint8087Порт (устаревший, используется 8080)
CLOUDPAYMENTS_RETURN_URLstrURL возврата после оплаты
CLOUDPAYMENTS_SKINstrminiСтиль виджета: mini, classic, modern
CLOUDPAYMENTS_REQUIRE_EMAILboolfalseТребовать email при оплате
CLOUDPAYMENTS_TEST_MODEboolfalseТестовый режим (без реальных списаний)

Webhook

CloudPayments использует несколько суб-роутов:
ПутьНазначение
{WEBHOOK_PATH}Универсальный обработчик (рекомендуется)
{WEBHOOK_PATH}/checkПроверка перед списанием
{WEBHOOK_PATH}/payУспешная оплата
{WEBHOOK_PATH}/failНеуспешная оплата
В кабинете CloudPayments укажите: https://hooks.domain.com/cloudpayments-webhook

Freekassa

Обязательные настройки

FREEKASSA_ENABLED=true
FREEKASSA_SHOP_ID=12345
FREEKASSA_API_KEY=your_api_key
FREEKASSA_SECRET_WORD_1=secret1
FREEKASSA_SECRET_WORD_2=secret2

Все переменные

ПеременнаяТипПо умолчаниюОписание
FREEKASSA_ENABLEDboolfalseВключить Freekassa
FREEKASSA_SHOP_IDintОбязательно. ID магазина
FREEKASSA_API_KEYstrОбязательно. API-ключ
FREEKASSA_SECRET_WORD_1strОбязательно. Секретное слово 1 (для формы оплаты)
FREEKASSA_SECRET_WORD_2strОбязательно. Секретное слово 2 (для webhook)
FREEKASSA_DISPLAY_NAMEstrFreekassaОтображаемое название
FREEKASSA_CURRENCYstrRUBВалюта
FREEKASSA_MIN_AMOUNT_KOPEKSint10000Минимальная сумма (100 руб)
FREEKASSA_MAX_AMOUNT_KOPEKSint100000000Максимальная сумма (1 000 000 руб)
FREEKASSA_PAYMENT_TIMEOUT_SECONDSint3600Таймаут ожидания оплаты (секунды)
FREEKASSA_WEBHOOK_PATHstr/freekassa-webhookПуть webhook
FREEKASSA_WEBHOOK_HOSTstr0.0.0.0Хост для webhook
FREEKASSA_WEBHOOK_PORTint8088Порт (устаревший, используется 8080)
FREEKASSA_PAYMENT_SYSTEM_IDintСпособ оплаты: 42 = обычный СБП, 44 = NSPK СБП
FREEKASSA_USE_APIboolfalseИспользовать API для создания заказов
SERVER_PUBLIC_IPstrПубличный IP сервера (для Freekassa API, определяется автоматически)

Режимы создания платежей

  • FREEKASSA_USE_API=false — редирект на платёжную форму Freekassa (по умолчанию)
  • FREEKASSA_USE_API=true — создание заказа через API (рекомендуется для NSPK СБП)
# Для NSPK СБП (QR-код, быстрее и надёжнее)
FREEKASSA_USE_API=true
FREEKASSA_PAYMENT_SYSTEM_ID=44

Webhook

В кабинете Freekassa укажите: https://hooks.domain.com/freekassa-webhook

Kassa AI

Отдельная платёжная система (api.fk.life), работает параллельно с Freekassa.

Обязательные настройки

KASSA_AI_ENABLED=true
KASSA_AI_SHOP_ID=12345
KASSA_AI_API_KEY=your_api_key
KASSA_AI_SECRET_WORD_2=secret2

Все переменные

ПеременнаяТипПо умолчаниюОписание
KASSA_AI_ENABLEDboolfalseВключить Kassa AI
KASSA_AI_SHOP_IDintОбязательно. ID магазина
KASSA_AI_API_KEYstrОбязательно. API-ключ
KASSA_AI_SECRET_WORD_2strОбязательно. Секретное слово (для webhook)
KASSA_AI_DISPLAY_NAMEstrKassaAIОтображаемое название
KASSA_AI_CURRENCYstrRUBВалюта
KASSA_AI_MIN_AMOUNT_KOPEKSint10000Минимальная сумма (100 руб)
KASSA_AI_MAX_AMOUNT_KOPEKSint100000000Максимальная сумма (1 000 000 руб)
KASSA_AI_WEBHOOK_PATHstr/kassa-ai-webhookПуть webhook
KASSA_AI_WEBHOOK_HOSTstr0.0.0.0Хост для webhook
KASSA_AI_WEBHOOK_PORTint8089Порт (устаревший, используется 8080)
KASSA_AI_PAYMENT_SYSTEM_IDint44Способ оплаты: 44 = СБП QR, 36 = Карты РФ, 43 = SberPay

Webhook

В кабинете Kassa AI укажите: https://hooks.domain.com/kassa-ai-webhook

PayPalych (Pal24)

Платежи через PayPalych (СБП и банковские карты).

Обязательные настройки

PAL24_ENABLED=true
PAL24_API_TOKEN=your_api_token
PAL24_SHOP_ID=your_shop_id

Все переменные

ПеременнаяТипПо умолчаниюОписание
PAL24_ENABLEDboolfalseВключить PayPalych
PAL24_API_TOKENstrОбязательно. API-токен
PAL24_SHOP_IDstrОбязательно. ID магазина
PAL24_DISPLAY_NAMEstrPAL24Отображаемое название
PAL24_SIGNATURE_TOKENstrТокен для проверки подписи webhook
PAL24_BASE_URLstrhttps://pal24.pro/api/v1/Базовый URL API
PAL24_WEBHOOK_PATHstr/pal24-webhookПуть webhook
PAL24_PAYMENT_DESCRIPTIONstrПополнение балансаОписание платежа
PAL24_MIN_AMOUNT_KOPEKSint10000Минимальная сумма (100 руб)
PAL24_MAX_AMOUNT_KOPEKSint100000000Максимальная сумма (1 000 000 руб)
PAL24_REQUEST_TIMEOUTint30Таймаут запросов к API (секунды)
PAL24_SBP_BUTTON_TEXTstrТекст кнопки СБП (по умолчанию из локализации)
PAL24_CARD_BUTTON_TEXTstrТекст кнопки карты (по умолчанию из локализации)
PAL24_SBP_BUTTON_VISIBLEbooltrueПоказывать кнопку СБП
PAL24_CARD_BUTTON_VISIBLEbooltrueПоказывать кнопку карты

Webhook

В кабинете Pal24 укажите Result URL: https://hooks.domain.com/pal24-webhook

Platega

Поддерживает несколько методов оплаты: СБП, карты, международные карты и криптовалюту.

Обязательные настройки

PLATEGA_ENABLED=true
PLATEGA_MERCHANT_ID=your_merchant_id
PLATEGA_SECRET=your_secret_key

Все переменные

ПеременнаяТипПо умолчаниюОписание
PLATEGA_ENABLEDboolfalseВключить Platega
PLATEGA_MERCHANT_IDstrОбязательно. ID мерчанта
PLATEGA_SECRETstrОбязательно. Секретный ключ
PLATEGA_DISPLAY_NAMEstrPlategaОтображаемое название
PLATEGA_BASE_URLstrhttps://app.platega.ioБазовый URL API
PLATEGA_RETURN_URLstrURL возврата после оплаты
PLATEGA_FAILED_URLstrURL возврата при ошибке
PLATEGA_CURRENCYstrRUBВалюта
PLATEGA_ACTIVE_METHODSstr2,10,11,12,13Коды активных методов оплаты (через запятую)
PLATEGA_MIN_AMOUNT_KOPEKSint10000Минимальная сумма (100 руб)
PLATEGA_MAX_AMOUNT_KOPEKSint100000000Максимальная сумма (1 000 000 руб)
PLATEGA_WEBHOOK_PATHstr/platega-webhookПуть webhook
PLATEGA_WEBHOOK_HOSTstr0.0.0.0Хост для webhook
PLATEGA_WEBHOOK_PORTint8086Порт (устаревший, используется 8080)

Методы оплаты

Коды для PLATEGA_ACTIVE_METHODS:
КодМетод
2СБП (QR)
10Банковские карты (RUB)
11Банковские карты
12Международные карты
13Криптовалюта
# Только СБП и карты RUB
PLATEGA_ACTIVE_METHODS=2,10

Inline-отображение

Если у Platega настроено несколько активных методов (PLATEGA_ACTIVE_METHODS), каждый метод отображается как отдельная кнопка на главном экране бота. Пользователь сразу видит доступные варианты (СБП, карты, крипто) без дополнительных переходов.

Webhook

В кабинете Platega укажите: https://hooks.domain.com/platega-webhook

WATA

Платежи картами через WATA.

Обязательные настройки

WATA_ENABLED=true
WATA_ACCESS_TOKEN=your_access_token
WATA_TERMINAL_PUBLIC_ID=your_terminal_id

Все переменные

ПеременнаяТипПо умолчаниюОписание
WATA_ENABLEDboolfalseВключить WATA
WATA_ACCESS_TOKENstrОбязательно. Токен доступа
WATA_TERMINAL_PUBLIC_IDstrОбязательно. Public ID терминала
WATA_DISPLAY_NAMEstrWataОтображаемое название
WATA_BASE_URLstrhttps://api.wata.pro/api/h2hБазовый URL API
WATA_PAYMENT_DESCRIPTIONstrПополнение балансаОписание платежа
WATA_PAYMENT_TYPEstrOneTimeТип платежа
WATA_SUCCESS_REDIRECT_URLstrURL после успешной оплаты
WATA_FAIL_REDIRECT_URLstrURL после ошибки
WATA_LINK_TTL_MINUTESintВремя жизни ссылки на оплату (минуты)
WATA_MIN_AMOUNT_KOPEKSint10000Минимальная сумма (100 руб)
WATA_MAX_AMOUNT_KOPEKSint100000000Максимальная сумма (1 000 000 руб)
WATA_REQUEST_TIMEOUTint30Таймаут запросов (секунды)
WATA_WEBHOOK_PATHstr/wata-webhookПуть webhook
WATA_WEBHOOK_HOSTstr0.0.0.0Хост для webhook
WATA_WEBHOOK_PORTint8085Порт (устаревший, используется 8080)
WATA_PUBLIC_KEY_URLstrURL публичного ключа для проверки подписи
WATA_PUBLIC_KEY_CACHE_SECONDSint3600Время кэширования публичного ключа (секунды)

Webhook

В кабинете WATA укажите: https://hooks.domain.com/wata-webhook

Heleket

Криптовалютный провайдер с поддержкой USDT и других валют.

Обязательные настройки

HELEKET_ENABLED=true
HELEKET_MERCHANT_ID=your_merchant_id
HELEKET_API_KEY=your_api_key

Все переменные

ПеременнаяТипПо умолчаниюОписание
HELEKET_ENABLEDboolfalseВключить Heleket
HELEKET_MERCHANT_IDstrОбязательно. ID мерчанта
HELEKET_API_KEYstrОбязательно. API-ключ
HELEKET_DISPLAY_NAMEstrHeleket CryptoОтображаемое название
HELEKET_BASE_URLstrhttps://api.heleket.com/v1Базовый URL API
HELEKET_DEFAULT_CURRENCYstrUSDTВалюта по умолчанию
HELEKET_DEFAULT_NETWORKstrСеть по умолчанию
HELEKET_INVOICE_LIFETIMEint3600Время жизни инвойса (секунды, 300-43200)
HELEKET_MARKUP_PERCENTfloat0.0Наценка в процентах
HELEKET_WEBHOOK_PATHstr/heleket-webhookПуть webhook
HELEKET_WEBHOOK_HOSTstr0.0.0.0Хост для webhook
HELEKET_WEBHOOK_PORTint8086Порт (устаревший, используется 8080)
HELEKET_CALLBACK_URLstrURL для callback (по умолчанию WEBHOOK_URL + HELEKET_WEBHOOK_PATH)
HELEKET_RETURN_URLstrURL возврата после оплаты
HELEKET_SUCCESS_URLstrURL успешной оплаты

Webhook

В кабинете Heleket укажите Callback URL: https://hooks.domain.com/heleket-webhook

MulenPay

Обязательные настройки

MULENPAY_ENABLED=true
MULENPAY_API_KEY=your_api_key
MULENPAY_SECRET_KEY=your_secret_key
MULENPAY_SHOP_ID=12345

Все переменные

ПеременнаяТипПо умолчаниюОписание
MULENPAY_ENABLEDboolfalseВключить MulenPay
MULENPAY_API_KEYstrОбязательно. API-ключ
MULENPAY_SECRET_KEYstrОбязательно. Секретный ключ (для HMAC подписи webhook)
MULENPAY_SHOP_IDintОбязательно. ID магазина
MULENPAY_DISPLAY_NAMEstrMulen PayОтображаемое название
MULENPAY_BASE_URLstrhttps://mulenpay.ru/apiБазовый URL API
MULENPAY_WEBHOOK_PATHstr/mulenpay-webhookПуть webhook
MULENPAY_DESCRIPTIONstrПополнение балансаОписание платежа
MULENPAY_LANGUAGEstrruЯзык формы оплаты
MULENPAY_VAT_CODEint0Код НДС
MULENPAY_PAYMENT_SUBJECTint4Тип предмета расчёта
MULENPAY_PAYMENT_MODEint4Режим расчёта
MULENPAY_MIN_AMOUNT_KOPEKSint10000Минимальная сумма (100 руб)
MULENPAY_MAX_AMOUNT_KOPEKSint10000000Максимальная сумма (100 000 руб)
MULENPAY_IFRAME_EXPECTED_ORIGINstrОжидаемый origin iframe (для CORS, определяется из BASE_URL)
MULENPAY_WEBSITE_URLstrURL сайта магазина

Webhook

В кабинете MulenPay укажите: https://hooks.domain.com/mulenpay-webhook Поддерживается проверка подписи через несколько форматов: HMAC-SHA256 (hex, base64), Bearer-токен, кастомные заголовки.

Tribute

Платежи через Telegram-платформу Tribute. Поддерживает как разовые, так и рекуррентные донаты.

Обязательные настройки

TRIBUTE_ENABLED=true
TRIBUTE_API_KEY=your_api_key
TRIBUTE_DONATE_LINK=https://tribute.ru/your_link

Все переменные

ПеременнаяТипПо умолчаниюОписание
TRIBUTE_ENABLEDboolfalseВключить Tribute
TRIBUTE_API_KEYstrОбязательно. API-ключ (для проверки webhook)
TRIBUTE_DONATE_LINKstrСсылка на страницу доната
TRIBUTE_WEBHOOK_PATHstr/tribute-webhookПуть webhook
TRIBUTE_WEBHOOK_HOSTstr0.0.0.0Хост для webhook
TRIBUTE_WEBHOOK_PORTint8081Порт (устаревший, используется 8080)

Особенности

  • Обрабатывает события new_donation и recurrent_donation
  • Поддерживает возврат средств (refund) через API

Webhook

В кабинете Tribute укажите: https://hooks.domain.com/tribute-webhook

RioPay

Платежи картами через RioPay (api.riopay.online).

Обязательные настройки

RIOPAY_ENABLED=true
RIOPAY_API_TOKEN=your_api_token

Все переменные

ПеременнаяТипПо умолчаниюОписание
RIOPAY_ENABLEDboolfalseВключить RioPay
RIOPAY_API_TOKENstrОбязательно. API-токен (заголовок x-api-token)
RIOPAY_WEBHOOK_SECRETstrКлюч для HMAC-SHA512 проверки webhook (по умолчанию = API_TOKEN)
RIOPAY_DISPLAY_NAMEstrRioPayОтображаемое название
RIOPAY_CURRENCYstrRUBВалюта
RIOPAY_MIN_AMOUNT_KOPEKSint10000Минимальная сумма (100 руб)
RIOPAY_MAX_AMOUNT_KOPEKSint100000000Максимальная сумма (1 000 000 руб)
RIOPAY_WEBHOOK_PATHstr/riopay-webhookПуть webhook
RIOPAY_SUCCESS_URLstrURL после успешной оплаты
RIOPAY_FAIL_URLstrURL после ошибки

Webhook

В кабинете RioPay укажите: https://hooks.domain.com/riopay-webhook Подпись webhook проверяется через HMAC-SHA512 (заголовок X-Signature). Если RIOPAY_WEBHOOK_SECRET не указан, используется значение RIOPAY_API_TOKEN.

SeverPay

Платежи через SeverPay (СБП и банковские карты) с HMAC-SHA256 подписью webhook.

Обязательные настройки

SEVERPAY_ENABLED=true
SEVERPAY_MID=12345
SEVERPAY_TOKEN=your_secret_token

Все переменные

ПеременнаяТипПо умолчаниюОписание
SEVERPAY_ENABLEDboolfalseВключить SeverPay
SEVERPAY_MIDintОбязательно. Merchant ID
SEVERPAY_TOKENstrОбязательно. Секретный токен (HMAC-SHA256 подпись)
SEVERPAY_DISPLAY_NAMEstrSeverPayОтображаемое название
SEVERPAY_CURRENCYstrRUBВалюта
SEVERPAY_MIN_AMOUNT_KOPEKSint10000Минимальная сумма (100 руб)
SEVERPAY_MAX_AMOUNT_KOPEKSint10000000Максимальная сумма (100 000 руб)
SEVERPAY_WEBHOOK_PATHstr/severpay-webhookПуть webhook
SEVERPAY_RETURN_URLstrURL возврата после оплаты
SEVERPAY_LIFETIMEint1440Время жизни платежа (минуты, 30–4320)

Webhook

В кабинете SeverPay укажите: https://hooks.domain.com/severpay-webhook Подпись webhook проверяется через HMAC-SHA256. Webhook всегда возвращает HTTP 200 для предотвращения повторных запросов от SeverPay.

PayPear

Платежи через PayPear (api.paypear.ru) с поддержкой банковских карт, СБП, SberPay и T-Pay. Аутентификация через HTTP Basic Auth, идемпотентность через UUID.

Обязательные настройки

PAYPEAR_ENABLED=true
PAYPEAR_SHOP_ID=your_shop_id
PAYPEAR_SECRET_KEY=your_secret_key

Все переменные

ПеременнаяТипПо умолчаниюОписание
PAYPEAR_ENABLEDboolfalseВключить PayPear
PAYPEAR_SHOP_IDstrОбязательно. ID магазина (для Basic Auth)
PAYPEAR_SECRET_KEYstrОбязательно. Секретный ключ (для Basic Auth)
PAYPEAR_DISPLAY_NAMEstrPayPearОтображаемое название
PAYPEAR_CURRENCYstrRUBВалюта
PAYPEAR_MIN_AMOUNT_KOPEKSint10000Минимальная сумма (100 руб)
PAYPEAR_MAX_AMOUNT_KOPEKSint10000000Максимальная сумма (100 000 руб)
PAYPEAR_WEBHOOK_PATHstr/paypear-webhookПуть webhook
PAYPEAR_RETURN_URLstrURL возврата после оплаты
PAYPEAR_PAYMENT_LIFETIME_MINUTESint60Время жизни платежа (минуты)

Методы оплаты

PayPear поддерживает 4 метода оплаты, доступных как sub-options в кабинете:
  • bank_card — банковские карты (Visa, Mastercard, Мир)
  • sbp — Система быстрых платежей
  • sberpay — SberPay (через приложение СберБанк Онлайн)
  • tpay — T-Pay (через приложение Т-Банка)

Webhook

В личном кабинете PayPear укажите: https://hooks.domain.com/paypear-webhook Webhook содержит поле signature в теле запроса (HMAC-SHA256). Поддерживаемые события: payment.confirmed, payment.canceled. PayPear повторяет отправку в течение 24 часов при получении не-200 ответа.

Статусы платежей

СтатусОписание
NEWСоздан, ожидает оплаты
PROCESSКлиент инициировал оплату
CONFIRMEDОплачен (финальный)
CANCELEDОтменён (финальный)
REFUNDEDВозвращён (финальный)
EXPIREDИстёк срок (финальный)

RollyPay

Платежи через RollyPay (rollypay.io) — платёжный шлюз с приёмом рублей и автоматической конвертацией в USDT. Поддержка СБП, карт и криптовалюты.

Обязательные настройки

ROLLYPAY_ENABLED=true
ROLLYPAY_API_KEY=rpk_live_your_api_key
ROLLYPAY_SIGNING_SECRET=your_signing_secret

Все переменные

ПеременнаяТипПо умолчаниюОписание
ROLLYPAY_ENABLEDboolfalseВключить RollyPay
ROLLYPAY_API_KEYstrОбязательно. API ключ (header X-API-Key)
ROLLYPAY_SIGNING_SECRETstrОбязательно. Секрет для HMAC верификации вебхуков
ROLLYPAY_DISPLAY_NAMEstrRollyPayОтображаемое название
ROLLYPAY_CURRENCYstrRUBВалюта
ROLLYPAY_MIN_AMOUNT_KOPEKSint10000Минимальная сумма (100 руб)
ROLLYPAY_MAX_AMOUNT_KOPEKSint10000000Максимальная сумма (100 000 руб)
ROLLYPAY_WEBHOOK_PATHstr/rollypay-webhookПуть webhook
ROLLYPAY_RETURN_URLstrURL возврата после оплаты

Методы оплаты

RollyPay поддерживает 3 метода, доступных как sub-options:
  • sbp — Система быстрых платежей
  • card — Банковские карты
  • crypto — Криптовалюта
Если метод не указан, платёжная форма RollyPay покажет все доступные варианты.

Webhook

Webhook URL настраивается при создании кассы (terminal) в RollyPay. Укажите: https://hooks.domain.com/rollypay-webhook Подпись передаётся в header X-Signature (HMAC-SHA256 от timestamp.body), timestamp — в X-Timestamp. Повторные попытки: экспоненциальный backoff 30с×2^(n-1), максимум 8 попыток (~2 часа).

Особенности

  • Все платежи конвертируются в USDT по текущему курсу
  • Баланс кассы хранится в USDT
  • Каждый запрос требует уникальный X-Nonce (UUID), повторное использование в течение 10 минут запрещено
  • Поддерживаемые события: payment.paid, payment.canceled, payment.chargeback

Статусы платежей

СтатусОписание
createdСоздан, ожидает оплаты
processingQR активирован, клиент инициировал оплату
paidОплачен (финальный)
expiredИстёк срок (финальный)
canceledОтменён (финальный)
chargebackВозврат после успешной оплаты

AuraPay

Платежи через AuraPay (app.aurapay.tech) с поддержкой банковских карт и СБП. Аутентификация через API-ключ и ID кассы в заголовках.

Обязательные настройки

AURAPAY_ENABLED=true
AURAPAY_API_KEY=your_api_key
AURAPAY_SHOP_ID=your_shop_uuid
AURAPAY_SECRET_KEY=your_secret_key_2

Все переменные

ПеременнаяТипПо умолчаниюОписание
AURAPAY_ENABLEDboolfalseВключить AuraPay
AURAPAY_API_KEYstrОбязательно. API ключ (header X-ApiKey)
AURAPAY_SHOP_IDstrОбязательно. UUID кассы (header X-ShopId)
AURAPAY_SECRET_KEYstrОбязательно. Секретный ключ #2 (HMAC-SHA256 webhook)
AURAPAY_DISPLAY_NAMEstrAuraPayОтображаемое название
AURAPAY_CURRENCYstrRUBВалюта
AURAPAY_MIN_AMOUNT_KOPEKSint10000Минимальная сумма (100 руб)
AURAPAY_MAX_AMOUNT_KOPEKSint10000000Максимальная сумма (100 000 руб)
AURAPAY_WEBHOOK_PATHstr/aurapay-webhookПуть webhook
AURAPAY_RETURN_URLstrURL возврата после оплаты
AURAPAY_PAYMENT_LIFETIME_MINUTESint60Время жизни инвойса (минуты, 1–43200)

Методы оплаты

AuraPay поддерживает 2 метода оплаты, доступных как sub-options в кабинете:
  • card — банковские карты
  • sbp — Система быстрых платежей (СБП)
Если метод не указан, пользователь выбирает способ оплаты на платёжной форме AuraPay.

Webhook

Webhook URL указывается при создании инвойса (параметр callback_url) или в настройках кассы. Укажите: https://hooks.domain.com/aurapay-webhook Подпись передаётся в header X-SIGNATURE. Алгоритм: отсортировать ключи JSON по алфавиту, склеить все значения в одну строку, HMAC-SHA256 с секретным ключом #2. Повторные попытки: максимум 5 раз, до получения HTTP 200.

Статусы инвойсов

СтатусОписание
PENDINGСоздан, ожидает оплаты
PAIDОплачен (финальный)
EXPIREDИстёк срок (финальный)

Overpay

Платежи через Overpay (api.overpay.io) с двойной аутентификацией: mTLS (клиентский P12 сертификат) + HTTP Basic Auth. Поддерживает банковские карты и СБП.

Обязательные настройки

OVERPAY_ENABLED=true
OVERPAY_USERNAME=your_username
OVERPAY_PASSWORD=your_password
OVERPAY_PROJECT_ID=your_project_id
OVERPAY_P12_PATH=/app/certs/client.p12
OVERPAY_P12_PASSPHRASE=your_passphrase

Все переменные

ПеременнаяТипПо умолчаниюОписание
OVERPAY_ENABLEDboolfalseВключить Overpay
OVERPAY_API_URLstrhttps://api.overpay.ioБазовый URL API
OVERPAY_USERNAMEstrОбязательно. Логин для HTTP Basic Auth
OVERPAY_PASSWORDstrОбязательно. Пароль для HTTP Basic Auth
OVERPAY_PROJECT_IDstrОбязательно. ID проекта
OVERPAY_P12_PATHstrОбязательно. Путь к P12 клиентскому сертификату
OVERPAY_P12_PASSPHRASEstrОбязательно. Пароль от P12 сертификата
OVERPAY_DISPLAY_NAMEstrOverpayОтображаемое название
OVERPAY_CURRENCYstrRUBВалюта
OVERPAY_MIN_AMOUNT_KOPEKSint10000Минимальная сумма (100 руб)
OVERPAY_MAX_AMOUNT_KOPEKSint10000000Максимальная сумма (100 000 руб)
OVERPAY_WEBHOOK_PATHstr/overpay-webhookПуть webhook
OVERPAY_RETURN_URLstrURL возврата после оплаты
OVERPAY_LIFETIME_MINUTESint1440Время жизни платежа (минуты, по умолчанию 24 часа)
OVERPAY_PAYMENT_METHODSstrcard,fpsМетоды оплаты (через запятую)

Методы оплаты

МетодОписание
cardБанковские карты
fpsСБП (Система быстрых платежей)

Аутентификация

Overpay использует двойную аутентификацию:
  1. mTLS — клиентский P12 сертификат прикрепляется к каждому запросу к API. Файл сертификата должен быть доступен контейнеру по пути OVERPAY_P12_PATH
  2. HTTP Basic Auth — логин и пароль передаются в заголовке Authorization
При использовании Docker убедитесь, что файл P12 сертификата смонтирован в контейнер. Пример: volumes: - ./certs/client.p12:/app/certs/client.p12:ro

Webhook

В кабинете Overpay укажите: https://hooks.domain.com/overpay-webhook

Etoplatezhi

Etoplatezhi — российский платёжный шлюз paymentpage.etoplatezhi.ru с поддержкой карт и СБП. HMAC-SHA256 подпись запросов и webhook’ов.

Обязательные настройки

ETOPLATEZHI_ENABLED=true
ETOPLATEZHI_PROJECT_ID=12345
ETOPLATEZHI_SECRET_KEY=your_secret_key

Все переменные

ПеременнаяТипПо умолчаниюОписание
ETOPLATEZHI_ENABLEDboolfalseВключает Etoplatezhi
ETOPLATEZHI_PROJECT_IDintОбязательно. ID проекта
ETOPLATEZHI_SECRET_KEYstrОбязательно. Секретный ключ для HMAC
ETOPLATEZHI_DISPLAY_NAMEstrEtoplatezhiИмя в кнопке
ETOPLATEZHI_CURRENCYstrRUBВалюта
ETOPLATEZHI_MIN_AMOUNT_KOPEKSint10000Минимальная сумма
ETOPLATEZHI_MAX_AMOUNT_KOPEKSint10000000Максимальная сумма
ETOPLATEZHI_WEBHOOK_PATHstr/etoplatezhi-webhookПуть webhook’а
ETOPLATEZHI_RETURN_URLstrURL возврата
ETOPLATEZHI_PAYMENT_LIFETIME_MINUTESint60Время жизни инвойса
ETOPLATEZHI_SBP_ENABLEDboolfalseКнопка «СБП»
ETOPLATEZHI_CARD_ENABLEDboolfalseКнопка «Карта»

Webhook

URL: https://hooks.domain.com/etoplatezhi-webhook
Подпись: HMAC-SHA256, sticky terminal-status guard защищает от replay-атак.

Antilopay

Antilopay — российский эквайринг lk.antilopay.com через API v2. Использует RSA подпись (SHA256WithRSA, PKCS#1 v1.5) — отличается от большинства провайдеров. Поддерживает 3 sub-метода: Карта, СБП, SberPay.

Обязательные настройки

ANTILOPAY_ENABLED=true
ANTILOPAY_SECRET_ID=your_secret_id
ANTILOPAY_PRIVATE_KEY=base64_encoded_rsa_private_key
ANTILOPAY_PUBLIC_KEY=base64_encoded_rsa_public_key
ANTILOPAY_PROJECT_ID=your_project_id

Все переменные

ПеременнаяТипПо умолчаниюОписание
ANTILOPAY_ENABLEDboolfalseВключает Antilopay
ANTILOPAY_SECRET_IDstrОбязательно. Secret ID из ЛК Antilopay
ANTILOPAY_PRIVATE_KEYstrОбязательно. base64-encoded RSA private key (для подписи запросов)
ANTILOPAY_PUBLIC_KEYstrОбязательно. base64-encoded RSA public key (для проверки webhook)
ANTILOPAY_PROJECT_IDstrОбязательно. ID проекта
ANTILOPAY_DISPLAY_NAMEstrAntilopayИмя в кнопке
ANTILOPAY_PRODUCT_NAMEstrVPN подпискаНазвание продукта в чеке
ANTILOPAY_PRODUCT_TYPEstrservicesТип продукта (для 54-ФЗ)
ANTILOPAY_CURRENCYstrRUBВалюта
ANTILOPAY_MIN_AMOUNT_KOPEKSint10000Минимальная сумма
ANTILOPAY_MAX_AMOUNT_KOPEKSint10000000Максимальная сумма
ANTILOPAY_WEBHOOK_PATHstr/antilopay-webhookПуть webhook’а
ANTILOPAY_RETURN_URLstrURL возврата
ANTILOPAY_PAYMENT_LIFETIME_MINUTESint60Время жизни инвойса
ANTILOPAY_SBP_ENABLEDboolfalseКнопка «СБП»
ANTILOPAY_CARD_ENABLEDboolfalseКнопка «Карта»
ANTILOPAY_SBERPAY_ENABLEDboolfalseКнопка «SberPay»

Webhook

URL: https://hooks.domain.com/antilopay-webhook
Подпись: SHA256WithRSA (PKCS#1 v1.5), проверяется публичным ключом. Заголовок: X-Apay-Callback.
Antilopay требует RSA-ключевую пару. Сгенерируйте 2048-битный ключ через openssl genrsa и base64-кодируйте оба ключа. Публичный ключ загрузите в кабинет Antilopay.

Jupiter (FPGate P2P)

Jupiter — платёжный шлюз app.juppiter.tech по спеке FPGate P2P v2.1. Эквайринг СБП через QR-код банковского приложения. HMAC-SHA256 подпись. Bedolaga — официальный партнёр Jupiter (подключение по кодовому слову БЕДОЛАГА).

Обязательные настройки

JUPITER_ENABLED=true
JUPITER_TOKEN=your_token
JUPITER_SECRET=your_secret

Все переменные

ПеременнаяТипПо умолчаниюОписание
JUPITER_ENABLEDboolfalseВключает Jupiter
JUPITER_TOKENstrОбязательно. Токен из ЛК Jupiter
JUPITER_SECRETstrОбязательно. Секретный ключ для HMAC
JUPITER_BASE_URLstrhttps://app.juppiter.techURL API
JUPITER_METHOD_IDstrОпционально. ID метода (если требуется)
JUPITER_METHOD_DESCRIPTIONstrSBPОписание метода в payload
JUPITER_DISPLAY_NAMEstrJupiterИмя в кнопке
JUPITER_CURRENCYstrRUBВалюта
JUPITER_MIN_AMOUNT_KOPEKSint10000Минимальная сумма
JUPITER_MAX_AMOUNT_KOPEKSint10000000Максимальная сумма
JUPITER_WEBHOOK_PATHstr/jupiter-webhookПуть webhook’а
JUPITER_RETURN_URLstrURL возврата
JUPITER_PAYMENT_LIFETIME_MINUTESint60Время жизни инвойса
JUPITER_FALLBACK_EMAILstruser@vpn.botEmail для customer (если у пользователя нет email)
JUPITER_FALLBACK_PHONEstr0000000000Phone-fallback
JUPITER_FALLBACK_NAMEstrUserName-fallback
JUPITER_SBP_ENABLEDboolfalseКнопка «СБП»

API Endpoints

  • POST /api/v2.1/p2p_payin — создание инвойса
  • POST /api/v2.1/p2p_status — статус инвойса
  • POST /api/v2.1/p2p_balance — баланс мерчанта

Webhook

URL: https://hooks.domain.com/jupiter-webhook
Подпись: HMAC-SHA256 от raw JSON body, поле signature в payload.
Sticky terminal-status guard — повторный success после cancelled/error логируется как ERROR.
📩 Менеджер: @k_juppiter

Donut (Donut P2P)

Donut — платёжная система gw.donut.business по спеке Donut P2P. P2P-оплата картой, СБП по номеру телефона и СБП QR. HMAC-SHA256 подпись. Bedolaga — официальный партнёр Donut.

Обязательные настройки

DONUT_ENABLED=true
DONUT_TOKEN=your_token
DONUT_SECRET=your_secret

Все переменные

ПеременнаяТипПо умолчаниюОписание
DONUT_ENABLEDboolfalseВключает Donut
DONUT_TOKENstrОбязательно. Токен из ЛК Donut
DONUT_SECRETstrОбязательно. Секретный ключ для HMAC
DONUT_BASE_URLstrhttps://gw.donut.businessURL API
DONUT_METHOD_IDstrОпционально. ID метода (если требуется)
DONUT_DISPLAY_NAMEstrDonutИмя в кнопке
DONUT_CURRENCYstrRUBВалюта
DONUT_MIN_AMOUNT_KOPEKSint10000Минимальная сумма
DONUT_MAX_AMOUNT_KOPEKSint10000000Максимальная сумма
DONUT_WEBHOOK_PATHstr/donut-webhookПуть webhook’а
DONUT_RETURN_URLstrURL возврата
DONUT_PAYMENT_LIFETIME_MINUTESint60Время жизни инвойса
DONUT_CARD_ENABLEDboolfalseКнопка «Карта» (description=CARD)
DONUT_SBP_ENABLEDboolfalseКнопка «СБП» по телефону (description=SBP)
DONUT_SBP_QR_ENABLEDboolfalseКнопка «СБП QR» (description=SBP_QR)

API Endpoints

  • POST /p2p_payin — создание инвойса
  • POST /p2p_status — статус инвойса
  • POST /p2p_balance — баланс мерчанта

Webhook

URL: https://hooks.domain.com/donut-webhook
Подпись: HMAC-SHA256 от raw JSON body, поле signature в payload.
Sticky terminal-status guard защищает от replay-атак.
📩 Менеджер: @donut_payment

Lava Business

Lava — российский эквайринг gate.lava.ru (Lava Business API). Поддержка карт и СБП через includeService фильтрацию. HMAC-SHA256 подпись. Раздельные ключи для запросов и webhook’ов.

Обязательные настройки

LAVA_ENABLED=true
LAVA_SHOP_ID=11111111-2222-3333-4444-555555555555
LAVA_SECRET_KEY=your_secret_key       # для подписи запросов
LAVA_WEBHOOK_SECRET=your_secret_key_2  # для проверки webhook

Все переменные

ПеременнаяТипПо умолчаниюОписание
LAVA_ENABLEDboolfalseВключает Lava
LAVA_SHOP_IDuuidОбязательно. UUID проекта
LAVA_SECRET_KEYstrОбязательно. Secret_key для HMAC запросов
LAVA_WEBHOOK_SECRETstrОбязательно. Secret_key_2 для проверки webhook
LAVA_BASE_URLstrhttps://gate.lava.ruURL API
LAVA_DISPLAY_NAMEstrLavaИмя в кнопке
LAVA_CURRENCYstrRUBВалюта
LAVA_MIN_AMOUNT_KOPEKSint10000Минимальная сумма
LAVA_MAX_AMOUNT_KOPEKSint10000000Максимальная сумма
LAVA_WEBHOOK_PATHstr/lava-webhookПуть webhook’а
LAVA_RETURN_URLstrURL возврата
LAVA_PAYMENT_LIFETIME_MINUTESint60Время жизни инвойса (clamp до 7200, макс 5 дней)
LAVA_CARD_ENABLEDboolfalseКнопка «Карта» (includeService=['card'])
LAVA_SBP_ENABLEDboolfalseКнопка «СБП» (includeService=['sbp'])

API Endpoints

  • POST /api/v2/invoice/create — создание инвойса
  • POST /api/v2/invoice/status — статус инвойса
  • POST /api/v2/invoice/services — доступные методы оплаты для shopId

Webhook

URL: https://hooks.domain.com/lava-webhook
Подпись: HMAC-SHA256 от raw bytes (не decoded string!), заголовок Authorization.
В отличие от других провайдеров, Lava имеет два секретных ключа: secret_key для подписи запросов и secret_key_2 для проверки webhook. Оба генерируются в личном кабинете Lava.
Lava ретраит webhook до 5 раз каждые 150 секунд при HTTP не-200. Бот всегда отдаёт 200 после успешной верификации подписи.

Apple In-App Purchase

Apple IAP — нативные consumable-покупки (пополнения баланса) через iOS App Store Mini App. Используется App Store Server API с JWT-аутентификацией (ES256, .p8 ключ) и App Store Server Notifications V2 для real-time событий (purchase, refund, revoke). Поддерживает Sandbox + Production окружения, refund handling с защитой от double-deduction, idempotency на уровне web_order_line_item_id, self-healing через reconciliation service.

Минимальная конфигурация

APPLE_IAP_ENABLED=true
APPLE_IAP_BUNDLE_ID=com.example.vpnclient
APPLE_IAP_ISSUER_ID=57246542-96fe-1a63-e053-0824d011072a
APPLE_IAP_KEY_ID=2X9R4HXF34
APPLE_IAP_APP_APPLE_ID=1234567890
APPLE_IAP_PRIVATE_KEY_PATH=/run/secrets/apple/AuthKey_2X9R4HXF34.p8
APPLE_IAP_ENVIRONMENT=Production
APPLE_IAP_ROOT_CERTS_PATHS=/certs/AppleIncRootCertificate.cer,/certs/AppleRootCA-G2.cer,/certs/AppleRootCA-G3.cer
APPLE_IAP_PRODUCTS={"com.example.vpnclient.topup.100":10000,"com.example.vpnclient.topup.300":30000,"com.example.vpnclient.topup.500":50000}

Все переменные

Ключевые (App Store Connect)

ПеременнаяТипПо умолчаниюОписание
APPLE_IAP_ENABLEDboolfalseВключает Apple IAP. Ставьте true только после того как заполнены все обязательные поля ниже
APPLE_IAP_BUNDLE_IDstrcom.app.clientОбязательно. Должен точно совпадать с bundle ID iOS-приложения и bundleId в signed transactions от Apple
APPLE_IAP_ISSUER_IDstrОбязательно. Issuer ID (UUID) из App Store Connect → Users and Access → Integrations → App Store Connect API
APPLE_IAP_KEY_IDstrОбязательно. Key ID In-App Purchase ключа из App Store Connect (пример: ABC123DEFG)
APPLE_IAP_APP_APPLE_IDintОбязательно для Production. Числовой App Apple ID из App Store Connect, используется SignedDataVerifier Apple. Опционально для Sandbox

Приватный ключ (.p8)

Нужна одна из двух опций:
ПеременнаяТипПо умолчаниюОписание
APPLE_IAP_PRIVATE_KEY_PATHstrРекомендуется для прода. Путь к смонтированному .p8 файлу. Пример: /run/secrets/apple/AuthKey_ABC123DEFG.p8
APPLE_IAP_PRIVATE_KEYstrАльтернатива — содержимое .p8 инлайн (с \n для переносов строк). Не рекомендуется для прода — секрет попадает в env-листинги

Окружение и webhook

ПеременнаяТипПо умолчаниюОписание
APPLE_IAP_ENVIRONMENTstrProductionОбязательно. Допустимые значения: Sandbox, Production. Покупки из TestFlight приходят как Sandbox-транзакции
APPLE_IAP_WEBHOOK_PATHstr/apple-iap-webhookПуть для App Store Server Notifications V2. Полный URL для регистрации в App Store Connect: https://your-domain.example + этот path
APPLE_IAP_ALLOW_SANDBOX_ON_PRODUCTIONboolfalseРазрешает Production-бэкенду верифицировать Sandbox-транзакции из App Review / TestFlight. Такие транзакции записываются для аудита, но не зачисляются на баланс

Проверка подписей и сертификаты

ПеременнаяТипПо умолчаниюОписание
APPLE_IAP_ROOT_CERTS_PATHSstrОбязательно. Comma-separated пути к Apple Root CA сертификатам (.cer) с apple.com/certificateauthority. Рекомендуемые: Apple Inc. Root, Apple Root CA - G2 Root, Apple Root CA - G3 Root
APPLE_IAP_ENABLE_ONLINE_CERT_CHECKSbooltrueВключает online certificate status checks при верификации JWS. Рекомендуется true в проде, требует исходящий доступ к Apple CA

Маппинг продуктов

ПеременнаяТипПо умолчаниюОписание
APPLE_IAP_PRODUCTSjsonОбязательно. JSON-объект: {"product_id": kopeks_to_credit}. Бэкенд игнорирует цену и amount от клиента — зачисляет ровно столько, сколько указано здесь. Это защита от подмены цены через mod’нутый клиент
Пример с топапами 100 / 300 / 500 / 1000 ₽:
APPLE_IAP_PRODUCTS={"com.example.topup.100":10000,"com.example.topup.300":30000,"com.example.topup.500":50000,"com.example.topup.1000":100000}

Защита от abuse

ПеременнаяТипПо умолчаниюОписание
APPLE_IAP_PURCHASE_RATE_LIMIT_PER_MINUTEint10Лимит попыток верификации покупки per-user и per-IP в минуту
APPLE_IAP_PURCHASE_FAILURE_LIMIT_PER_HOURint20Лимит неудачных верификаций per-user в час
APPLE_IAP_RATE_LIMIT_FAIL_OPENboolfalseПри false (рекомендуется) — недоступность Redis блокирует endpoint целиком (fail-closed). При true — пропускает запросы при сбое Redis (availability > security)

Refund и revocation handling

При получении Apple Server Notification (REFUND, REVOKE, REFUND_REVERSED):
  1. Notification сохраняется в apple_notifications со статусом received (для дедупликации по payload_hash)
  2. Транзакция блокируется через SELECT FOR UPDATE на apple_transactions row
  3. Списание / возврат списания применяется к балансу пользователя
  4. Транзакция помечается revoked / refund_reversed с датой
  5. Idempotency: повторный webhook с тем же payload_hash игнорируется
  6. Если бэкенд был offline и webhook потерян — reconciliation service в фоне сверит состояние с App Store Server API и применит изменение

Reconciliation service

Фоновая таска проходит по apple_notifications со статусом failed (сетевые ошибки, race с user-запросом), запрашивает текущий статус через getTransactionInfo, выравнивает локальное состояние с Apple. Self-healing для пропущенных webhook’ов.

Idempotency

  • web_order_line_item_id — уникальный per billing-cycle идентификатор от Apple, UNIQUE constraint в БД (миграция 0076). Защищает от повторного зачисления одной и той же покупки
  • payload_hash нотификаций — SHA256 от signed payload, тоже UNIQUE. Дедуп Apple webhook’ов
  • app_account_token — UUID, который мы передаём Apple через appAccountToken параметр при инициации покупки в iOS-приложении. Apple возвращает его в transaction, мы матчим purchase к нашему юзеру без передачи telegram_id / email на сторону Apple

Создание App Store Connect API ключа

  1. App Store Connect → Users and Access → Integrations → App Store Connect API
  2. Выберите вкладку In-App Purchase (не General!)
  3. Нажмите + → Name → Generate
  4. Скачайте .p8 файл (доступен только один раз, потом — генерация заново)
  5. Скопируйте Issuer ID (сверху страницы) и Key ID (рядом с ключом)
  6. Положите .p8 файл в безопасное место и пропишите путь в APPLE_IAP_PRIVATE_KEY_PATH

Регистрация webhook в App Store Connect

  1. App Store Connect → ваше приложение → App Information → App Store Server Notifications
  2. Production URL: https://your-domain.example + APPLE_IAP_WEBHOOK_PATH
  3. Sandbox URL: тот же путь, но на тестовом доменe (если есть отдельный)
  4. Version: Version 2 Notifications (Version 1 не поддерживается)
Apple IAP отображается только в Mini App на iOS. На Android и веб-кабинете кнопка не появляется, потому что Apple Review Guidelines 3.1.1 запрещают принимать платежи за digital goods вне IAP только в iOS-приложениях.
  • Bundle ID в APPLE_IAP_BUNDLE_ID должен точно совпадать с реальным iOS-приложением — иначе все signed transactions будут отклонены проверкой bundleId
  • Никогда не зачисляйте цену, переданную клиентом — только из APPLE_IAP_PRODUCTS. Клиент можно подменить
  • Сертификаты Apple Root CA из APPLE_IAP_ROOT_CERTS_PATHS — это основа security. Без них JWS-подписи не проверяются и backend будет принимать любые поддельные транзакции
Для тестов используйте Sandbox-окружение с sandbox Apple ID. TestFlight-покупки тоже идут через Sandbox даже если приложение в проде.

Безопасность webhook

Все платёжные webhook проходят проверку подлинности:
ПровайдерМетод проверки
YooKassaIP-адреса + trusted proxy networks
CloudPaymentsHMAC-SHA256 подпись (обязательна при настроенном API_SECRET)
CryptoBotHMAC-SHA256 подпись
HeleketHMAC-SHA256 подпись
FreekassaПодпись по секретному слову
Kassa AIПодпись по секретному слову
MulenPayHMAC-SHA256 (hex/base64/bearer)
PlategaHMAC-SHA256 (timing-safe comparison)
WATARSA-подпись с публичным ключом
Pal24Подпись токена + верификация суммы платежа
TributeAPI-ключ
RioPayHMAC-SHA512
SeverPayHMAC-SHA256
PayPearHMAC-SHA256 (подпись в теле запроса)
RollyPayHMAC-SHA256 (X-Signature + X-Timestamp headers)
AuraPayHMAC-SHA256 (X-SIGNATURE header, sorted values)
OverpaymTLS (P12 сертификат) + HTTP Basic Auth
EtoplatezhiHMAC-SHA256 (sticky terminal-status guard)
AntilopayRSA-подпись с публичным ключом (PKCS#1 v1.5), заголовок X-Apay-Callback
JupiterHMAC-SHA256 + sticky terminal-status guard
DonutHMAC-SHA256 + sticky terminal-status guard
LavaHMAC-SHA256 от raw bytes (secret_key_2), заголовок Authorization
Apple IAPJWS подпись (App Store Server API) + bundle_id validation
Если для провайдера настроен секретный ключ, webhook без подписи будут отклонены. Убедитесь, что секретные ключи в .env совпадают с настройками в кабинете провайдера.

Тестовые платежи

CloudPayments и YooKassa проверяют флаг test_mode в webhook. В production-окружении тестовые платежи автоматически отклоняются, если соответствующий *_TEST_MODE не включён явно.

Активация провайдера

Каждый провайдер считается включённым только при выполнении двух условий:
  1. Флаг *_ENABLED=true
  2. Заполнены все обязательные поля (ключи, токены, ID)
Если включить флаг, но не заполнить обязательные поля, провайдер не активируется и не появится в списке способов оплаты.
ПровайдерУсловия активации
Telegram StarsTELEGRAM_STARS_ENABLED=true (включён по умолчанию)
YooKassaYOOKASSA_ENABLED + SHOP_ID + SECRET_KEY
CryptoBotCRYPTOBOT_ENABLED + API_TOKEN
CloudPaymentsCLOUDPAYMENTS_ENABLED + PUBLIC_ID + API_SECRET
FreekassaFREEKASSA_ENABLED + SHOP_ID + API_KEY + SECRET_WORD_1 + SECRET_WORD_2
Kassa AIKASSA_AI_ENABLED + SHOP_ID + API_KEY + SECRET_WORD_2
PayPalychPAL24_ENABLED + API_TOKEN + SHOP_ID
PlategaPLATEGA_ENABLED + MERCHANT_ID + SECRET
WATAWATA_ENABLED + ACCESS_TOKEN + TERMINAL_PUBLIC_ID
HeleketHELEKET_ENABLED + MERCHANT_ID + API_KEY
MulenPayMULENPAY_ENABLED + API_KEY + SECRET_KEY + SHOP_ID
TributeTRIBUTE_ENABLED (проверяется только флаг)
RioPayRIOPAY_ENABLED + API_TOKEN
SeverPaySEVERPAY_ENABLED + MID + TOKEN
OverpayOVERPAY_ENABLED + USERNAME + PASSWORD + PROJECT_ID + P12_PATH + P12_PASSPHRASE
EtoplatezhiETOPLATEZHI_ENABLED + PROJECT_ID + SECRET_KEY
AntilopayANTILOPAY_ENABLED + SECRET_ID + PRIVATE_KEY + PUBLIC_KEY + PROJECT_ID
JupiterJUPITER_ENABLED + TOKEN + SECRET
DonutDONUT_ENABLED + TOKEN + SECRET
LavaLAVA_ENABLED + SHOP_ID + SECRET_KEY + WEBHOOK_SECRET
Apple IAPAPPLE_IAP_ENABLED + BUNDLE_ID + ISSUER_ID + KEY_ID + APP_APPLE_ID (для Production) + (PRIVATE_KEY или PRIVATE_KEY_PATH) + ENVIRONMENT + ROOT_CERTS_PATHS + PRODUCTS

Health-check

Для проверки состояния webhook доступен эндпоинт:
GET /health/payment-webhooks
Возвращает JSON со статусом каждого провайдера:
{
  "status": "ok",
  "tribute_enabled": false,
  "mulenpay_enabled": false,
  "cryptobot_enabled": true,
  "yookassa_enabled": true,
  "wata_enabled": false,
  "heleket_enabled": false,
  "pal24_enabled": false,
  "platega_enabled": false,
  "cloudpayments_enabled": false,
  "freekassa_enabled": false,
  "kassa_ai_enabled": false,
  "riopay_enabled": false,
  "severpay_enabled": false
}

Настройка webhook через reverse proxy

Все webhook обрабатываются единым FastAPI-сервером на порту 8080. Рекомендуемая настройка через Caddy/Nginx:
hooks.domain.com {
    reverse_proxy bot:8080
}
В .env укажите:
WEBHOOK_URL=https://hooks.domain.com
Этот URL используется для формирования callback URL (Heleket, Platega) и return URL (YooKassa, CloudPayments).