На момент написания не было актуальной информаций по тому, как и где использовать полученные от пользователей звёзды. Статья будет дополняться по мере обновления информации от Telegram. Если вам что-то известно, сообщите нам!

Обновление зависимостей. Для полноценной поддержки нового способа оплаты требуется версия AIOgram 3.7.0. Для обновления библиотеки достаточно выполнить команду:

pip install -U aiogram

После этого обновите версию в файле requirements.txt.

aiogram3.7.0

Кнопка оплаты. Перед тем, как мы начнём писать обработчик команды, выставляющей счёт на оплату, необходимо создать кнопку для оплаты, нажатие на которую откроет окно для оплаты.

В пакете botlogic создадим новый пакет keyboards, а в нём файл payment_keyboard.py.

Пропишем функцию payment_keyboard, которая ничего не принимает.

В теле функции создадим переменную builder, в которой определим экземпляр класса InlineKeyboardBuilder.

В него можно передать список списков с объектами класса кнопки, но это не совсем удобно, проще пользоваться методами класса. На следующей строке вызываем у объекта класса метод .button, добавляющий кнопку в сборщик клавиатуры. Передаём два аргумента:

  • text — Определяет текст на кнопке. Если в тексте будет XTR или эмодзи звезды ⭐️, оно автоматически заменится на иконку Telegram Stars.
  • pay — Определяет тип кнопки как кнопку для оплаты.

Далее делаем возврат переменной builder, применив к ней метод .as_markup, чтобы получить объект готовой к размещению в сообщении клавиатуры.

Код файла:

from aiogram.utils.keyboard import InlineKeyboardBuilder  


def payment_keyboard():  
    builder = InlineKeyboardBuilder()  
    builder.button(text=f"Оплатить 20 ⭐️", pay=True)  

    return builder.as_markup()

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

Обработчик выставления счёта. Приступим к написанию обработчика команды.

В пакете handlers создадим файл payment.py.

В этом файле пропишем асинхронную функцию send_invoice_handler, принимающую message — объект класса Message.

Создадим переменную prices, в которую поместим список с объектами класса LabeledPrice, вернее, с одним объектом, так как для оплаты через Telegram Stars этот список должен состоять из одного элемента. В объект класса передаём следующие аргументы:

  • label — Определение валюты. В нашем случае это XTR.
  • amount — Стоимость в звёздах.

Далее у переменной message вызываем метод .answer_invoice, чтобы бот ответил на сообщение пользователя кнопкой со счётом на оплату. В метод передаём следующие аргументы:

  • title — Название платежа, товара или услуги.
  • description — Описание платежа, товара или услуги.
  • prices — Список объектов LabeledPrice, определённый ранее в одноимённой переменной.
  • provider_token — Токен платёжной системы, для Telegram Stars просто отправляем пустую строку.
  • payload — Маркировка платежа. Она не отображается пользователю, а может использоваться для разделения платежей по их типам и так далее. Максимум 128 байт данных (в Python один символ занимает один байт, но стоит учитывать, что специальные символы или эмодзи могут занимать больше места).
  • currency — Валюта платежа, для Telegram Stars это XTR.
  • reply_markup — Объект клавиатуры.

Код обработчика: