Как принимать платежи в Telegram | API Yoomoney Python

Kate

Administrator
Команда форума
В данном посте мы научимся принимать платежи в Telegram боте с помощью API Yoomoney.

Введение​

Начну с того, что я не так давно хотел создать магазин электронных товаров в Telegram. И столкнулся с проблемой, что на момент работы не было готовых решений. Хотелось принимать платежи без ИП и всякой этой движухи. Поэтому мой выбор был между Qiwi и Yoomoney (раньше Yandex Деньги). Сам я из Беларуси... Поэтому проще получить "Идентифицированный" аккаунт было у Yoomoney.

В итоге создал библиотеку yoomoney для Python.

Если данный пост вам помог, то поставьте звезду на GitHub. Мне будет очень приятно!

Описание​

  • Получаем токен
  • Проверяем токен
  • Как выставить счет на оплату
  • Проверка оплаты

Получаем токен​

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

1. Зайдите в кошелек ЮMoney. Если кошелька нет, создайте его.

2. Перейдите на страницу Регистрация приложения.

3. Укажите параметры приложения:

4. Нажмите на кнопку Подтвердить.

Откроется страница Данные приложения, где будут указаны название вашего приложения, его идентификатор (client_id) и, если выбрана соответствующая опция, сгенерированное секретное слово (client_secret).

Готово!

Запоминаем client_id и redirect_uri, они нам еще нужны.

Теперь самое сложное: заменяем на свои данные и запускаем код. Следуйте всем шагам программы.

Не забываем про pip install yoomoney

from yoomoney import Authorize

Authorize(
client_id="YOUR_CLIENT_ID",
redirect_uri="YOUR_REDIRECT_URI",
scope=["account-info",
"operation-history",
"operation-details",
"incoming-transfers",
"payment-p2p",
"payment-shop",
]
)
Ура! Мы получили наш токен!

Проверяем токен​

Заменяем YOUR_TOKEN на ваш и запускаем:

from yoomoney import Client
token = "YOUR_TOKEN"
client = Client(token)
user = client.account_info()
print("Account number:", user.account)
print("Account balance:", user.balance)
print("Account currency code in ISO 4217 format:", user.currency)
print("Account status:", user.account_status)
print("Account type:", user.account_type)
print("Extended balance information:")
for pair in vars(user.balance_details):
print("\t-->", pair, ":", vars(user.balance_details).get(pair))
print("Information about linked bank cards:")
cards = user.cards_linked
if len(cards) != 0:
for card in cards:
print(card.pan_fragment, " - ", card.type)
else:
print("No card is linked to the account")
Результат:

Account number: 410019014512803
Account balance: 999999999999.99
Account currency code in ISO 4217 format: 643
Account status: identified
Account type: personal
Extended balance information:
--> total : 999999999999.99
--> available : 999999999999.99
--> deposition_pending : None
--> blocked : None
--> debt : None
--> hold : None
Information about linked bank cards:
No card is linked to the account
Супер! Токен работает и можно переходить к основной части.

Как выставить счет на оплату​

Для этого воспользуемся модулем Quickpay.

from yoomoney import Quickpay
quickpay = Quickpay(
receiver="410019014512803",
quickpay_form="shop",
targets="Sponsor this project",
paymentType="SB",
sum=150,
)
print(quickpay.base_url)
print(quickpay.redirected_url)
Получаем две ссылки:

Первая ссылка находится под капотом второй. Обе ведут на одну форму. Но вторая имеет свой жизненный цикл.

Форма оплаты
Форма оплаты
Оплатить можно либо картой, либо переводом из кошелька.

Теперь вопрос: Как нам определить, что именно этот человек оплатил счет?
Для этого воспользуемся параметорм label - метка, которую сайт или приложение присваивает конкретному переводу. Например, в качестве метки можно указывать код или идентификатор заказа.

И теперь наша программа будет выглядеть так:

from yoomoney import Quickpay
quickpay = Quickpay(
receiver="410019014512803",
quickpay_form="shop",
targets="Sponsor this project",
paymentType="SB",
sum=150,
lebel="a1b2c3d4e5"
)
print(quickpay.base_url)
print(quickpay.redirected_url)
Теперь осталось только проверить оплату.

Проверка оплаты​

Для этого воспользуемся основным модулем Client.

Зная label транзакции мы можем отфильтровать историю операций кошелька. Просто укажем label в client.operation_history():

from yoomoney import Client
token = "YOUR_TOKEN"
client = Client(token)
history = client.operation_history(label="a1b2c3d4e5")
print("List of operations:")
print("Next page starts with: ", history.next_record)
for operation in history.operations:
print()
print("Operation:",operation.operation_id)
print("\tStatus -->", operation.status)
print("\tDatetime -->", operation.datetime)
print("\tTitle -->", operation.title)
print("\tPattern id -->", operation.pattern_id)
print("\tDirection -->", operation.direction)
print("\tAmount -->", operation.amount)
print("\tLabel -->", operation.label)
print("\tType -->", operation.type)
В результате получаем список всех операций по нашему фильтру:

List of operations:
Next page starts with: None
Operation: 670278348725002105
Status --> success
Datetime --> 2021-10-10 10:10:10
Title --> Пополнение с карты ****4487
Pattern id --> None
Direction --> in
Amount --> 150.0
Label --> a1b2c3d4e5
Type --> deposition
Теперь мы знаем прошла ли оплата.

Всё! Больше ничего не нужно для приема платежей.


Источник статьи: https://habr.com/ru/post/558924/
 
Сверху