Прием платежей в Telegram устроен так, что сам мес

Прием платежей в 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

  1. Откройте @BotFather в Telegram и введите команду /mybots.

  2. Выберите вашего бота из списка и перейдите в Bot Settings -> Payments.

  3. Выберите нужного вам платежного провайдера (например, LiqPay, Stripe или ЮKassa) из списка. Для разработки выберите вариант с пометкой Test (например, Stripe Test), чтобы тестировать оплату виртуальными картами.

  4. Вы будете перенаправлены в бот выбранной платежной системы для авторизации (вам понадобится аккаунт/мерчант в этой системе).

  5. После успешной привязки @BotFather выдаст вам Provider Token (длинную строку). Сохраните её в конфигурационный файл вашего проекта (.env).

Важно: Если вы настраиваете оплату через Telegram Stars, получать токен провайдера не нужно. Вместо токена в коде передается пустая строка "", а в качестве валюты указывается код XTR.

Шаг 2. Техническая реализация в коде бота

С точки зрения Telegram Bot API, весь процесс оплаты состоит из трех ключевых этапов. Рассмотрим архитектуру на примере логики кода (на Python/aiogram или Node.js):

1. Выставление счета (sendInvoice)

Когда пользователь нажимает кнопку «Купить», ваш бот должен отправить ему специальное сообщение-инвойс с помощью метода sendInvoice.

Python
# Пример параметров для метода 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 секунд, иначе транзакция отменится.

  • Зачем это нужно: Здесь вы проверяете по базе данных, остался ли товар в наличии или актуальна ли еще цена.

Python
# Обработчик 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. В этот момент вы обязаны выдать пользователю товар или активировать подписку.

Python
# Обработчик успешной оплаты
@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"), иначе бота могут заблокировать на мобильных платформах. Для физических товаров (доставка еды, мерч) смело используйте стандартный фиат.