Код на салфетке
15.06
``` from aiogram.types import LabeledPrice, Message
from botlogic.keyboards.payment_keyboard import payment_keyboard
async def send_invoice_handler(message: Message): prices = [LabeledPrice(label="XTR", amount=20)] await message.answer_invoice( title="Поддержка канала", description="Поддержать канал на 20 звёзд!", prices=prices, provider_token="", payload="channel_support", currency="XTR", reply_markup=payment_keyboard(), )
```
Предпродажная проверка. Счёт выставлен, пользователь нажимает "Оплатить". Если у него не хватает звёзд, система предложит их приобрести. Если звёзд у него хватает, он произведёт оплату, и в этот момент Telegram пришлёт в бота запрос "точно ли всё хорошо?". На ответ у нас будет ровно 10 секунд. Если мы по каким-то причинам не хотим принимать оплаты у данного пользователя или логика бота настроена на отмену платежа, в таком случае необходимо дать ответ, сигнализирующий об отмене платежа, сопроводив его причиной отмены. В противном же случае, подтверждаем, что всё "Ок".
В этом же файле создадим асинхронную функцию pre_checkout_handler, принимающую аргумент pre_checkout_query — объект класса PreCheckoutQuery.
В теле функции у переменной pre_checkout_query вызываем метод .answer, передавая в него аргумент ok со значением True.
Код функции:
``` from aiogram.types import PreCheckoutQuery
async def pre_checkout_handler(pre_checkout_query: PreCheckoutQuery): await pre_checkout_query.answer(ok=True)
```
Информирование о покупке. Бюрократия позади, осталось только поздравить пользователя с покупкой!
В этом же файле создадим асинхронную функцию success_payment_handler, принимающую аргумент message — объект класса Message.
В объекте класса Message хранится различная информация о текущем сообщении, а в поле successful_payment находится информация о платеже, такая, как идентификатор платежа, сумма, валюта, информация, полученная от пользователя. По-хорошему, это всё необходимо сохранить во избежание возможных вопросов по платежам в будущем.
В теле функции делаем обычный ответ, сообщая, что покупка прошла успешно.
Код функции:
``` async def success_payment_handler(message: Message): await message.answer(text="🥳Спасибо за вашу поддержку!🤗")
```
Команда paysupport и немного про возврат средств. Telegram также предъявляет условия к возврату средств пользователям. Не за все товары и услуги подразумевается возврат средств, однако у пользователя всё равно должна быть возможность запросить возврат средств, либо быть проинформированным касательно этого.
Для информирования пользователя обязательно должна быть команда /paysupport. В ней можно указать условия возврата, контактные данные и др. Давайте сделаем эту команду.
Создадим асинхронную функцию pay_support_handler, принимающую message — объект класса Message. В теле функции пропишем ответ на сообщение с текстом, описывающим условия для возврата средств.
Код функции:
``` async def pay_support_handler(message: Message): await message.answer( text="Добровольные пожертвования не подразумевают возврат средств, " "однако, если вы очень хотите вернуть средства - свяжитесь с нами." )
```
Непосредственно возврат средств можно сделать доступным пользователю. Для этого необходимо создать обработчик команды возврата, в котором, обращаясь к методу .refund_star_payment у объекта Bot, передать в него user_id и telegram_payment_charge_id.
еще контент в этом сообществе
еще контент в этом соообществе
Код на салфетке
15.06
войдите, чтобы увидеть
и подписаться на интересных профи