Приём оплаты в Telegram-боте: провайдеры, Stars и чеки

Оплата в телеграм боте выглядит для покупателя как одна кнопка, но за ней стоит несколько решений: какой способ приёма денег разрешён для вашего товара, кто формирует чек, как обрабатывать возвраты и как не потерять платёж при сбое. Статья для тех, кто планирует бота с оплатой и хочет заранее понимать устройство, а не узнавать о нём после запуска.

Что вы продаёте: от этого зависит способ оплаты

Первый вопрос — не технический, а продуктовый. Telegram разделяет два вида продаж, и для них действуют разные правила:

Что продаётеСпособ оплатыПримеры
Физические товарыПлатёжный провайдер или эквайер, рубли и другие валютыЦветы, еда, одежда, запчасти
Услуги в реальном миреПлатёжный провайдер или эквайерЗапись в салон, ремонт, доставка, экскурсия
Цифровые товары и услуги внутри TelegramTelegram StarsДоступ к закрытому контенту, функции бота, внутриигровые предметы

Граница не всегда очевидна. Например, онлайн-консультация с живым специалистом и доступ к записям курса внутри бота могут относиться к разным категориям. Если товар на границе, прежде чем начинать разработку, стоит свериться с актуальными правилами Telegram для платежей — переделывать оплату после модерации или жалобы дороже.

Вариант 1. Telegram Payments через провайдера

Встроенный механизм Telegram: покупатель не уходит из мессенджера, форма оплаты открывается прямо в приложении, а данные карты обрабатывает платёжный провайдер — бот их не видит и не хранит. Как это устроено по шагам:

  1. Владелец бота подключает провайдера через @BotFather и получает платёжный токен. Список провайдеров виден там же; работает ли выбранный с вашим юрлицом и валютой — уточняется у самого провайдера.
  2. Бот отправляет покупателю счёт: название, описание, сумма, при необходимости фото товара. Счёт можно запросить с контактными данными — имя, телефон, email, адрес доставки.
  3. Покупатель нажимает «Оплатить» и вводит данные карты в форме провайдера.
  4. Перед списанием Telegram отправляет боту запрос на подтверждение. Бот проверяет, что товар в наличии и цена актуальна, и должен ответить быстро — по документации на это отводится не больше 10 секунд.
  5. После успешной оплаты бот получает служебное сообщение с идентификаторами платежа в Telegram и у провайдера. На этом шаге заказ переходит в статус «оплачен», а покупатель получает подтверждение.

Если стоимость доставки зависит от адреса, счёт можно сделать «гибким»: Telegram пришлёт боту адрес, а бот вернёт доступные варианты доставки с ценой. Для интернет-магазинов с несколькими зонами доставки это удобнее, чем фиксированная сумма.

Платёжный токен — секрет, как и токен бота. Он хранится только на сервере, в переменных окружения, и никогда не попадает в код фронтенда или в репозиторий.

Вариант 2. Ссылка на платёжную страницу эквайера

Альтернатива — работать напрямую с российским эквайером через его API. Бот создаёт платёж на стороне эквайера, получает ссылку и показывает покупателю кнопку «Перейти к оплате». Человек оплачивает на странице эквайера, а эквайер присылает на ваш сервер уведомление о результате.

Когда этот вариант выигрывает:

  • нужны способы оплаты, которые эквайер поддерживает на своей странице, — например, СБП, если она входит в его возможности;
  • у компании уже есть договор с эквайером, который используется на сайте, и хочется одну схему учёта для всех каналов;
  • нужны регулярные списания или другие функции, которые эквайер предоставляет в своём API;
  • оплата идёт не только из бота, но и из Mini App или с сайта, и логика должна быть общей.

Минус — покупатель на время покидает Telegram, и часть людей может не вернуться в чат. Поэтому после оплаты важно, чтобы бот сам прислал подтверждение, не дожидаясь, пока человек вернётся и нажмёт «Я оплатил».

Цифровые товары: Telegram Stars

Stars — внутренняя валюта Telegram. Пользователи покупают их в приложении, а затем тратят в ботах и мини-приложениях. Для продажи цифровых товаров и услуг внутри Telegram используются именно Stars.

Технически механизм похож на обычный счёт: бот выставляет счёт в валюте Stars без платёжного токена провайдера, получает запрос на подтверждение и сообщение об успешной оплате. Заработанные Stars накапливаются на балансе бота. Условия их вывода и конвертации определяет Telegram — их стоит изучить по официальной документации до запуска, а не после.

Для бизнеса это означает, что цифровой продукт можно продать без договора с эквайером, но и экономика другая: цену нужно выражать в Stars, а доход получать по правилам Telegram. Как отражать такие поступления в учёте, лучше заранее обсудить с бухгалтером.

Чеки по 54-ФЗ

Если вы принимаете деньги от покупателей в России, чек обычно нужно сформировать через онлайн-кассу. Бот сам чеки не печатает: их выдаёт касса — собственная облачная касса компании или касса, которую предоставляет эквайер или его партнёр.

Задача бота — передать кассе корректные данные: позиции заказа, цены, количество, контакт покупателя для отправки электронного чека. В Telegram Payments счёт может запросить у покупателя email или телефон и передать их провайдеру вместе с дополнительными данными о заказе; какой формат нужен для чека, определяет провайдер. При оплате по ссылке эквайера эти данные передаются в его API при создании платежа.

Мы обычно на старте проекта выясняем у эквайера, как именно у него устроена фискализация, и согласуем с бухгалтером компании ставки налогов и признаки предмета расчёта. Это сфера, где лучше уточнить у специалистов, чем угадывать.

Возвраты и подписки

Возвраты

Возврат денег за оплату через провайдера или эквайера делается на его стороне — в личном кабинете или через API. Бот в этой схеме обновляет статус заказа и сообщает покупателю, что возврат оформлен. Если нужен частичный возврат или возврат по одной позиции заказа, это стоит заложить в логику сразу: чек на возврат тоже формируется через кассу.

Для Stars у Bot API есть отдельный метод возврата: бот может вернуть покупателю списанные Stars по идентификатору платежа. Решение о возврате при этом остаётся за вами, поэтому правила стоит описать в условиях продажи.

Подписки и регулярные платежи

Для цифровых продуктов Telegram поддерживает подписки с оплатой в Stars — параметры периода и продления описаны в документации. Для подписок в рублях нужны регулярные списания на стороне эквайера: покупатель привязывает карту с явным согласием, а сервер списывает оплату по расписанию и обрабатывает неудачи. Логика тарифов, пробных периодов и повторных попыток списания подробно разобрана в статье о подписках и биллинге.

Статусы платежей и вебхуки: где обычно ломается

Самые неприятные ошибки в платёжных ботах — не в форме оплаты, а в том, что происходит после. Заказ должен проходить понятный жизненный цикл: создан → ожидает оплаты → оплачен → выполнен, с ветками «отменён», «истёк срок оплаты», «возвращён». Чтобы статусы не расходились с реальностью, мы придерживаемся нескольких правил:

  • Доверять только серверу. Нажатие «Я оплатил» или возврат пользователя на страницу ничего не доказывают. Статус меняется только по подтверждению от Telegram или уведомлению эквайера.
  • Проверять уведомления. Входящий вебхук эквайера проверяется по подписи или повторным запросом статуса через его API — иначе кто угодно сможет отправить на сервер «оплата прошла».
  • Сверять сумму и заказ. Сумма в уведомлении должна совпадать с суммой заказа, а платёж — относиться к нужному заказу.
  • Обрабатывать повторы. Одно и то же уведомление может прийти несколько раз. Обработчик должен быть идемпотентным: повторное уведомление не создаёт второй заказ и не отправляет товар дважды.
  • Не терять платежи при сбоях. Если сервер был недоступен, нужна периодическая сверка: какие платежи у эквайера прошли, а у вас остались в статусе «ожидает».
  • Логировать всё. Каждый запрос и ответ платёжной системы сохраняется, чтобы разбирать спорные ситуации с покупателем и провайдером.

Если товар учитывается в 1С или складской системе, оплаченный заказ должен попадать туда автоматически, а остатки — проверяться до выставления счёта. Как устроена такая связка, рассказано в статье об интеграции с 1С.

Чек-лист перед запуском оплаты

  • Определено, что продаётся: физический товар, услуга или цифровой продукт.
  • Выбран способ: Telegram Payments с провайдером, ссылка эквайера или Stars.
  • Заключён договор с провайдером или эквайером, понятна схема чеков.
  • Платёжные токены и ключи хранятся только на сервере.
  • Бот проверяет наличие и цену перед подтверждением оплаты.
  • Статус заказа меняется только по подтверждению платёжной системы.
  • Описаны возвраты и условия продажи, доступные покупателю.
  • Платёж проверен в тестовом режиме, включая отмену и возврат.

Если бот с оплатой — часть более крупного проекта, полезно заранее оценить объём работ: на бюджет влияют способ оплаты, возвраты и интеграции. Факторы стоимости разобраны в статье «Сколько стоит разработка Telegram-бота».

Частые вопросы

Можно ли принимать оплату в боте без юрлица?

Для приёма платежей через провайдера или эквайера нужен договор с ним, а требования к статусу продавца определяет сам провайдер. Самозанятым и ИП стоит уточнить условия у выбранного сервиса.

Видит ли бот данные банковской карты покупателя?

Нет. Данные карты вводятся в форме провайдера или на странице эквайера, а бот получает только результат и идентификатор платежа.

Можно ли принимать оплату в Mini App, а не в чате?

Да. Мини-приложение может открыть тот же счёт Telegram — через провайдера или в Stars — либо перевести покупателя на страницу эквайера. Подтверждение оплаты в любом случае обрабатывает сервер.

Как протестировать оплату до запуска?

У провайдеров и эквайеров обычно есть тестовый режим с тестовыми картами. Проверять стоит не только успешную оплату, но и отказ, отмену, возврат и повторные уведомления.

Обсудим проект

Нужна похожая разработка?

Расскажите о задаче — уточним детали, предложим формат запуска и подготовим предварительную оценку. Это бесплатно.

Написать напрямую

Источники