[Мессенджеры, Платежные системы, Python, API] Как принимать платежи в Telegram | API Yoomoney Python

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
24-Май-2021 14:35

В данном посте мы научимся принимать платежи в 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)
Получаем две ссылки:
https://yoomoney.ru/quickpay/confirm.xml?receiver=410019014512803&quickpay-form=shop&targets=Sponsor%20this%20project&paymentType=SB&sum=150
https://yoomoney.ru/transfer/quickpay?requestId=343532353937313933395f66326561316639656131626539326632616434376662373665613831373636393537613336383639
Первая ссылка находится под капотом второй. Обе ведут на одну форму. Но вторая имеет свой жизненный цикл.
Форма оплатыОплатить можно либо картой, либо переводом из кошелька.Теперь вопрос: Как нам определить, что именно этот человек оплатил счет?
Для этого воспользуемся параметорм 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
Теперь мы знаем прошла ли оплата.Всё! Больше ничего не нужно для приема платежей.ЗаключениеЕсли данный пост вам помог, то поставьте звезду на GitHub. Мне будет очень приятно!
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_messendzhery (Мессенджеры), #_platezhnye_sistemy (Платежные системы), #_python, #_api, #_python, #_yoomoney, #_jumoney (юmoney), #_api, #_api (апи), #_platezhi (платежи), #_telegram, #_telegram (телеграм), #_bot (бот), #_bot, #_messendzhery (
Мессенджеры
)
, #_platezhnye_sistemy (
Платежные системы
)
, #_python, #_api
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 14:07
Часовой пояс: UTC + 5