Прием платежей в Telegram устроен так, что сам мессенджер не хранит деньги и не берет комиссию за транзакции. Он выступает безопасным интерфейсом между вашим ботом, покупателем и платежным шлюзом.
Ниже подробно разобрано, какие типы платежей доступны и как технически запустить оплату.
1. Какие платежи можно принимать?
Все платежи в Telegram делятся на две основные категории: фиатные (обычные деньги) и внутренняя валюта (Telegram Stars).
Фиатные деньги и платежные провайдеры
Вы можете продавать физические товары, подписки или цифровой контент за рубли, гривны, доллары, евро и другие валюты. Telegram интегрирован со многими международными и локальными провайдерами:
-
Глобальные: Stripe, ECOMMPAY.
-
Украина: LiqPay, Portmone, Tranzzo.
-
Казахстан / СНГ: Smartglocal.
-
Узбекистан: Payme, Click.
-
Криптовалюта: Cryptomus.
При оплате фиатом у пользователей из коробки работают Apple Pay и Google Pay, если они поддерживаются выбранным провайдером эквайринга.
Telegram Stars (Звезды)
Это внутренняя цифровая валюта Telegram.
-
Для чего нужна: По правилам Apple и Google, покупка любых цифровых товаров (электронные книги, курсы, доступ в закрытые каналы, подписки в ботах и Telegram Mini Apps) внутри приложений на iOS и Android должна идти через их платежные системы. Telegram Stars созданы как раз для этого.
-
Как это работает: Пользователь покупает "Звезды" внутри Telegram через App Store/Google Play, а затем тратит их в вашем боте. Вы, как разработчик, можете вывести эти Stars в криптовалюту TON через платформу Fragment или использовать их для оплаты рекламы.
2. Как настроить оплату (Пошаговый алгоритм)
Процесс состоит из настройки связи с платежной системой в специальном боте от Telegram и написания кода для обработки транзакций.
Шаг 1. Получение токена провайдера в @BotFather
-
Откройте @BotFather в Telegram и введите команду
/mybots. -
Выберите вашего бота из списка и перейдите в Bot Settings -> Payments.
-
Выберите нужного вам платежного провайдера (например, LiqPay, Stripe или ЮKassa) из списка. Для разработки выберите вариант с пометкой Test (например, Stripe Test), чтобы тестировать оплату виртуальными картами.
-
Вы будете перенаправлены в бот выбранной платежной системы для авторизации (вам понадобится аккаунт/мерчант в этой системе).
-
После успешной привязки
@BotFatherвыдаст вам Provider Token (длинную строку). Сохраните её в конфигурационный файл вашего проекта (.env).
Важно: Если вы настраиваете оплату через Telegram Stars, получать токен провайдера не нужно. Вместо токена в коде передается пустая строка
"", а в качестве валюты указывается кодXTR.
Шаг 2. Техническая реализация в коде бота
С точки зрения Telegram Bot API, весь процесс оплаты состоит из трех ключевых этапов. Рассмотрим архитектуру на примере логики кода (на Python/aiogram или Node.js):
1. Выставление счета (sendInvoice)
Когда пользователь нажимает кнопку «Купить», ваш бот должен отправить ему специальное сообщение-инвойс с помощью метода sendInvoice.
# Пример параметров для метода sendInvoice (Python-стиль)
await bot.send_invoice(
chat_id=message.chat.id,
title="Premium подписка на месяц",
description="Доступ к закрытому B2B-функционалу бота",
payload="user_id_12345_package_premium", # Ваша внутренняя метка для проверки
provider_token="ВАШ_ТОКЕН_ИЗ_BOTFATHER", # Для Stars оставьте пустую строку ""
currency="UAH", # Или "XTR" для Telegram Stars
prices=[
LabeledPrice(label="Подписка", amount=25000) # Сумма в минимальных единицах (25000 коп = 250 UAH)
]
)
2. Проверка доступности товара (PreCheckoutQuery)
Как только пользователь вводит данные карты и нажимает «Оплатить», Telegram отправляет вашему боту запрос PreCheckoutQuery.
-
Ограничение по времени: Ваш сервер должен ответить на этот запрос в течение 10 секунд, иначе транзакция отменится.
-
Зачем это нужно: Здесь вы проверяете по базе данных, остался ли товар в наличии или актуальна ли еще цена.
# Обработчик pre_checkout_query
@dp.pre_checkout_query_handler(lambda query: True)
async def process_pre_checkout_query(pre_checkout_query: PreCheckoutQuery):
# Проверяем остатки в БД, если всё ок:
await bot.answer_pre_checkout_query(pre_checkout_query.id, ok=True)
# Если товара нет: ok=False, error_message="Товар закончился"
3. Успешный платеж (SuccessfulPayment)
Если провайдер успешно списал деньги, бот получает финальное обновление с типом контента successful_payment. В этот момент вы обязаны выдать пользователю товар или активировать подписку.
# Обработчик успешной оплаты
@dp.message_handler(content_types=ContentTypes.SUCCESSFUL_PAYMENT)
async def success_payment(message: Message):
payload = message.successful_payment.invoice_payload
# Оплата прошла! Начисляем баланс / выдаем доступ в закрытый канал
await message.answer("Спасибо за оплату! Ваш доступ активирован.")
Чек-лист перед запуском в продакшн
-
[ ] Тестирование: Сначала обязательно привяжите тестовый токен провайдера в
@BotFatherи проведите весь цикл оплаты с помощью тестовых карт (их номера предоставляет сам платежный шлюз в своей документации). -
[ ] Ограничения фиата: Убедитесь, что ваш юридический статус (ФЛП/ИП или юрлицо) позволяет подключить выбранный шлюз.
-
[ ] Правило для App Store/Google Play: Если продаете файлы, инфопродукты или подписки внутри бота, делайте это через Telegram Stars (
currency="XTR"), иначе бота могут заблокировать на мобильных платформах. Для физических товаров (доставка еды, мерч) смело используйте стандартный фиат.