В этом уроке мы добавим платежную систему для оформления платежей внутри нашего telegram бота.
Интеграция системы оплаты.
Для подключения системы оплаты мы должны перейти в BotFather и прописать команду /mybots. За счет этой команды мы можем выполнить редактирование наших ботов. Выбираем нашего бота. Тут мы можем узнать токен нашего бота, отредактировать его и так далее. Нас же интересует такая кнопка, как Payments, то есть настройка платежей в боте.
Telegram позволяет настроить сразу несколько различных систем оплаты для вашего бота. Также важно, что для настройки какой-либо систем платежей вы должны быть зарегистрированы в самой этой системе. Я буду регистрировать такую систему как ЮKassa. Если мы хотим подключить основную систему оплаты, то заходите на сайт ЮKassa, в организации и вводите свои данные, и буквально через 1 день вам пришлют договор с подписанием контракта с ЮKassa. Мы же пока подключим с вами тестовый магазин в нашем боте. Для этого в BotFather мы выбираем ЮKassa.
Теперь если у вас уже подключена основная система оплаты, то нажимаем на кнопку Connect ЮKassa Live. В моем случае я подключаю тестовый магазин, поэтому нажимаю на кнопку Connect ЮKassa Test. Далее нас перебрасывает в бота юкассы. Нажимаем кнопку start. Далее бот нас просит отправить ему идентификатор нашего магазина. Бот сформирует вам его и останется только переслать это число ему в ответ. Далее он попросит скинуть ваш shopArticleId, который он также сам сгенерирует. После чего ЮKassa зарегистрирует ваш тестовый магазин в BotFather.
Теперь возвращаемся в BotFather, где уже зарегистрирована наша платежная система. Он выводит нам токен, по которому м теперь сможем проводить оплату.
Импортируем токен в программу
Добавляем наш токен в файл token.csv, где у нас уже храниться token нашего бота. Сохраняем его в переменную, например, PAYMENT_TOKEN.
Теперь мы можем описать код, за счет которого мы будем высылать счет на оплату пользователю и при нажатии на специальную кнопку пользователь сможет перейти на систему оплаты и выполнить платеж через нашего бота.
Создание счета (invoice).
Давайте теперь напишем код, за счет которого мы будем высылать invoice пользователю. По сути это будет счет для оплаты и при нажатии на специальную кнопку, пользователь будет переходить на систему оплаты и выполнить платеж. Давайте будет отправлять пользователю счет для оплаты, когда нам будет приходить такая команда, как /pay. Так как в прошлом уроке мы работали с библиотекой aiogram, чтобы закрепить то, что мы узнали, продолжим работать на ней.
Мы обращаемся к диспетчеру (то есть объекту dis), затем обращаемся к message_handler() и также указываем commands = ['pay']. Затем мы должны создать функцию, например, payment. В функции мы указываем параметр message и указываем тип этого параметра. Для этого ставим двоеточие, затем указываем types и тип этого параметра, то есть message. Теперь давайте отправим счет нашему пользователю. Для этого прописываем await bot.send_invoise. Данная функция принимает много параметров, давайте разберемся в них.
Первым параметром передаем message.chat.id.
Title, где указываем название нашего товара.
Description - в нем мы пишем описание к нашему товару.(является не обязательным в передаче)
Provider_token, тут же мы обращаемся к нашему csv файлу и берем из него PAYMENT_TOKEN.
Currency необходимо передать трехзначный код валюты в формате ISO 4217. Полный список валют можно найти здесь.
Photo_url мы должны передать ссылку на наше фото(является не обязательным в передаче)
Если вы добавили фото, то нужно указать параметры photo_height и photo_width, иначе изображение либо вообще не отобразится, либо отобразится некорректно.
Is_flexible отвечает за то, что финальная цена зависит от способа доставки (когда передаем True). При значении False этот параметр можно не писать.
Prices принимает массив из цен, поэтому передаем туда [price]. Переменную price мы напишем чуть позже.
Start_parameter является обязательным, документация утверждает, что можно использовать уникальный диплинкинг параметр, чтобы создать эту квитанцию.
Payload. Объем 1-128 байт. Рекомендуется использовать его для того чтобы идентифицировать инвойсы - он не показывается пользователю, но мы можем его прочитать при получении успешной оплаты.
Сейчас при запуске у нас будет выдаваться ошибка, так как у нас неизвестная переменная price. Давайте создадим ее. Для этого перед диспетчером мы пишем переменную price, куда должны указать цену товара. Мы обращаемся к types, к LabeledPrice(). Далее в label мы указываем название товара, а в amount передаем стоимость.
ВАЖНО! Нужно передавать целочисленное значение в минимально возможных единицах валюты. То есть если мы говорим о рублях, то передавать нужно копейки (123руб. как 123* 100).
Теперь при запуске бота и отправке команды /pay, нашему пользователю будет отправляться счет на оплату.
Сообщение пользователю после оплаты.
Теперь давайте будет отправлять сообщение пользователю после того, как он оплатит покупку. Для этого обращаемся к диспетчеру, далее обращаемся к message_handler. Указываем content_types и в качестве значение передаем types.ContentType.SUCCESSFUL_PAYMENT. Это означает, что наш метод будет срабатывать только в случае, если будет выполняться успешная оплата.
Далее в нем мы создаем асинхронную функцию и в ней отправляем некое сообщение пользователю.
Также если вы не хотите долго ждать, то все уроки и коды с уроков уже есть в моем telegram канале.
Также каждый день в telegram канале появляются полезные книги и пособия с материалом по программированию, а также выходят эффективные фишки, которые значительно упрощают вашу работу с программированием.