Урок №12. Подключение системы оплаты в telegram боте

В этом уроке мы добавим платежную систему для оформления платежей внутри нашего telegram бота.

Интеграция системы оплаты.

Для подключения системы оплаты мы должны перейти в BotFather и прописать команду /mybots. За счет этой команды мы можем выполнить редактирование наших ботов. Выбираем нашего бота. Тут мы можем узнать токен нашего бота, отредактировать его и так далее. Нас же интересует такая кнопка, как Payments, то есть настройка платежей в боте.

Урок №12. Подключение системы оплаты в telegram боте

Telegram позволяет настроить сразу несколько различных систем оплаты для вашего бота. Также важно, что для настройки какой-либо систем платежей вы должны быть зарегистрированы в самой этой системе. Я буду регистрировать такую систему как ЮKassa. Если мы хотим подключить основную систему оплаты, то заходите на сайт ЮKassa, в организации и вводите свои данные, и буквально через 1 день вам пришлют договор с подписанием контракта с ЮKassa. Мы же пока подключим с вами тестовый магазин в нашем боте. Для этого в BotFather мы выбираем ЮKassa.

Урок №12. Подключение системы оплаты в telegram боте

Теперь если у вас уже подключена основная система оплаты, то нажимаем на кнопку Connect ЮKassa Live. В моем случае я подключаю тестовый магазин, поэтому нажимаю на кнопку Connect ЮKassa Test. Далее нас перебрасывает в бота юкассы. Нажимаем кнопку start. Далее бот нас просит отправить ему идентификатор нашего магазина. Бот сформирует вам его и останется только переслать это число ему в ответ. Далее он попросит скинуть ваш shopArticleId, который он также сам сгенерирует. После чего ЮKassa зарегистрирует ваш тестовый магазин в BotFather.

Урок №12. Подключение системы оплаты в telegram боте

Теперь возвращаемся в BotFather, где уже зарегистрирована наша платежная система. Он выводит нам токен, по которому м теперь сможем проводить оплату.

Урок №12. Подключение системы оплаты в telegram боте

Импортируем токен в программу

Добавляем наш токен в файл token.csv, где у нас уже храниться token нашего бота. Сохраняем его в переменную, например, PAYMENT_TOKEN.

Урок №12. Подключение системы оплаты в telegram боте

Теперь мы можем описать код, за счет которого мы будем высылать счет на оплату пользователю и при нажатии на специальную кнопку пользователь сможет перейти на систему оплаты и выполнить платеж через нашего бота.

Создание счета (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).

Урок №12. Подключение системы оплаты в telegram боте

Теперь при запуске бота и отправке команды /pay, нашему пользователю будет отправляться счет на оплату.

Урок №12. Подключение системы оплаты в telegram боте

Сообщение пользователю после оплаты.

Теперь давайте будет отправлять сообщение пользователю после того, как он оплатит покупку. Для этого обращаемся к диспетчеру, далее обращаемся к message_handler. Указываем content_types и в качестве значение передаем types.ContentType.SUCCESSFUL_PAYMENT. Это означает, что наш метод будет срабатывать только в случае, если будет выполняться успешная оплата.

Далее в нем мы создаем асинхронную функцию и в ней отправляем некое сообщение пользователю.

Урок №12. Подключение системы оплаты в telegram боте
Урок №12. Подключение системы оплаты в telegram боте

А также вы можете подписаться на telegram канал, где будут выкладываться все коды с моих уроков, а также сами уроки: https://t.me/pythotelegram.

Также после каждого урока вы можете заходить на моего telegram бота, чтобы посмотреть результат работы, после каждого урока: http://t.me/pythonte1egram_bot.

55
5 комментариев

А что за программа, куда мы возвращаемся? Пипец не понятно

1
Ответить

Есть описание кода, а кода нет. Кажется статья неполноценная. Этапы и результаты не описаны.

1
Ответить

А потом юкасса развлекает вас блокировками и запросами документов и описанием экономической деятельности.
Спасибо.
Лучше бинанс апи зацепить к боту.

Ответить

Если есть подозрительная активность, то почему бы и не запросить? У тех, кто ведет бизнес чисто и честно труда не составит предоставить доки. Вполне стандартная процедура

1
Ответить