На момент написания не было актуальной информаций по тому, как и где использовать полученные от пользователей звёзды. Статья будет дополняться по мере обновления информации от 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 — Объект клавиатуры.
Код обработчика: