-
Notifications
You must be signed in to change notification settings - Fork 5
Payments
Настройка приёма платежей в Telegram-ботах через Telegram Stars, YooKassa и YooMoney.

Каждый Telegram-бот может принимать платежи тремя способами:
- Telegram Stars (XTR) — нативная валюта Telegram, без комиссии
- YooKassa (RUB) — через Telegram Payments API с поддержкой банковских карт
- YooMoney (RUB) — OAuth2 интеграция с кошельком ЮMoney
Все три метода работают параллельно — можно настроить один или несколько для каждого бота.
| Параметр | Описание |
|---|---|
| Включён | Переключатель активации |
| Star Rate | Курс конвертации 1 XTR = N рублей (для расчёта цен) |
1. Бот получает команду /buy или inline-кнопку оплаты
2. Создаёт Telegram Invoice с ценой в stars (XTR)
3. Пользователь оплачивает stars через Telegram
4. Telegram отправляет PreCheckoutQuery → бот подтверждает
5. После успешной оплаты → SuccessfulPayment update
6. Бот обрабатывает платёж и выдаёт продукт
- Без комиссии для получателя
- Мгновенная обработка — нет задержек
- Кроссплатформенность — работает везде, где есть Telegram
| Параметр | Описание |
|---|---|
| Включён | Переключатель активации |
| Provider Token | Токен магазина YooKassa для Telegram Payments |
- Зарегистрируйтесь в YooKassa
- Создайте магазин
- Откройте настройки → Telegram Payments API
- Скопируйте
provider_token
1. Бот создаёт Telegram Invoice с provider_token
2. Цена указывается в копейках (100 = 1₽)
3. Пользователь оплачивает картой через Telegram
4. YooKassa обрабатывает платёж
5. Telegram отправляет PreCheckoutQuery → бот подтверждает
6. SuccessfulPayment → продукт выдан
- YooKassa: 2.8% + 10₽ за транзакцию (стандартный тариф)
YooMoney интегрируется через OAuth2 + Quickpay URL:
- Бот получает доступ к кошельку ЮMoney через OAuth2
- Генерирует персонализированные ссылки на оплату (Quickpay)
- Получает уведомления о платежах через webhook
- Откройте YooMoney Apps
- Создайте приложение типа "Веб-сервис"
- Укажите Redirect URI:
https://your-server.com/admin/telegram/instances/{bot_id}/yoomoney/callback - Получите
client_idиclient_secret
| Параметр | Описание |
|---|---|
| Включён | Переключатель активации |
| Client ID | ID приложения из YooMoney |
| Client Secret | Секретный ключ приложения |
| Wallet ID | Номер кошелька ЮMoney (410...) |
| Notification Secret | Секретная строка для проверки подписи вебхуков |
- Нажмите "Получить ссылку авторизации"
- Перейдите по ссылке и подтвердите доступ к кошельку
- После редиректа система автоматически обменяет
codeнаaccess_token - Токен сохраняется в БД
1. GET /admin/telegram/instances/{id}/yoomoney/auth-url
→ возвращает authorization URL
2. Пользователь переходит по ссылке → подтверждает доступ
3. YooMoney редиректит на callback с ?code=...
4. GET /admin/telegram/instances/{id}/yoomoney/callback?code=...
→ система обменивает code на access_token
5. Token сохраняется в yoomoney_access_token (БД)
Бот генерирует персональные ссылки для оплаты:
https://yoomoney.ru/quickpay/confirm?
receiver={wallet_id}&
quickpay-form=shop&
targets={description}&
paymentType=PC&
sum={amount}&
label={bot_id}_{product_id}_{user_id}&
successURL={success_url}
| Параметр | Описание |
|---|---|
| receiver | Номер кошелька получателя |
| targets | Описание платежа (например, "Оплата услуги X") |
| sum | Сумма в рублях |
| label | Метка для идентификации (формат: bot_id_product_id_user_id) |
| successURL | URL для редиректа после оплаты |
YooMoney отправляет уведомления о платежах на POST /webhooks/yoomoney.
- Откройте настройки кошелька → Уведомления
- Укажите URL:
https://your-server.com/webhooks/yoomoney - Включите HTTP-уведомления
- Укажите
notification_secret(та же строка, что в админке)
POST /webhooks/yoomoney
Content-Type: application/x-www-form-urlencoded
notification_type=p2p-incoming&
operation_id=123456789&
amount=100.00&
currency=643&
datetime=2026-02-11T12:00:00Z&
sender=410011234567890&
codepro=false&
label=bot-instance-id_product_1_user_12345&
sha1_hash=abcdef1234567890Вебхук вычисляет SHA-1 от строки:
notification_type&operation_id&amount¤cy&datetime&sender&codepro¬ification_secret&label
Если sha1_hash из запроса совпадает — платёж подтверждён.
1. Webhook получает уведомление
2. Проверяет sha1_hash
3. Парсит label → извлекает bot_id, product_id, user_id
4. Сохраняет платёж в БД (PaymentRepository)
5. Записывает JSON-файл в data/payment_notifications/{operation_id}.json
6. Бот читает файл и выдаёт продукт пользователю
API: GET /admin/telegram/instances/{id}/yoomoney/status
{
"configured": true,
"connected": true,
"wallet_id": "410011234567890"
}API: POST /admin/telegram/instances/{id}/yoomoney/disconnect
Удаляет access_token из БД (OAuth2 токен становится недействительным на стороне YooMoney только после явной отмены в настройках кошелька).
Каждый бот имеет список продуктов для продажи:
| Поле | Описание |
|---|---|
| Title | Название продукта |
| Description | Описание (до 255 символов) |
| Price (RUB) | Цена в рублях (для YooKassa и YooMoney) |
| Price (Stars) | Цена в XTR (для Telegram Stars) |
Продукты настраиваются в разделе Sales (см. Sales).
API: GET /admin/telegram/instances/{id}/payments
Возвращает все платежи для конкретного бота:
{
"payments": [
{
"id": 1,
"bot_instance_id": "sales-bot",
"user_id": 12345,
"product_id": 1,
"amount": 100.00,
"currency": "RUB",
"payment_method": "yoomoney",
"status": "completed",
"created_at": "2026-02-11T12:00:00Z"
}
]
}API: GET /admin/telegram/instances/{id}/payments/stats
{
"total_revenue": 15000.00,
"total_payments": 150,
"by_method": {
"telegram_stars": 80,
"yookassa": 50,
"yoomoney": 20
},
"by_product": {
"product_1": 12000.00,
"product_2": 3000.00
}
}| Метод | Endpoint | Описание |
|---|---|---|
| GET | /admin/telegram/instances/{id}/yoomoney/auth-url |
Получить OAuth2 authorization URL |
| GET | /admin/telegram/instances/{id}/yoomoney/callback |
OAuth2 callback (обмен code на token) |
| GET | /admin/telegram/instances/{id}/yoomoney/status |
Статус подключения |
| POST | /admin/telegram/instances/{id}/yoomoney/disconnect |
Отключить интеграцию |
| Метод | Endpoint | Описание |
|---|---|---|
| GET | /admin/telegram/instances/{id}/payments |
Список платежей бота |
| GET | /admin/telegram/instances/{id}/payments/stats |
Статистика платежей |
| Метод | Endpoint | Описание |
|---|---|---|
| POST | /webhooks/yoomoney |
Приём уведомлений от YooMoney |
- Admin — видит и управляет платежами всех ботов
-
User/Web — только свои боты (
owner_id) - Guest — только просмотр статистики (без доступа к sensitive данным: tokens, secrets)
| Механизм | Описание |
|---|---|
| SHA-1 проверка | YooMoney webhook проверяет подпись sha1_hash
|
| Label format | Метка bot_id_product_id_user_id однозначно идентифицирует платёж |
| Notification secret | Хранится в БД, не передаётся в API responses |
| OAuth2 tokens |
access_token хранится зашифрованным в БД (если настроено) |
Решение:
- Проверьте, что в настройках кошелька ЮMoney включены HTTP-уведомления
- Убедитесь, что
notification_secretсовпадает в админке и в настройках кошелька - Проверьте логи:
data/payment_notifications/— записываются ли файлы?
Решение:
- Убедитесь, что бот зарегистрирован через @BotFather
- Telegram Stars доступны только для верифицированных ботов
Решение:
- Проверьте правильность
provider_token - Убедитесь, что магазин в YooKassa активен
- Проверьте логи бота на наличие ошибок при обработке
PreCheckoutQuery