Skip to main content

Простая синхронная/асинхронная библиотека для работы с API ЮMoney

Project description

ayoomoney — простая синхронная/асинхронная библиотека для работы с API ЮMoney

Установка

pip install ayoomoney

Авторизация приложения

  1. Зарегистрируйте новое приложение YooMoney по ссылке https://yoomoney.ru/myservices/new

    • В полях "Адрес сайта" и "Redirect URI" укажите адрес: https://my.localhost:8042
    • Чекбокс "Проверять подлинность приложения (OAuth2 client_secret)" должен быть отключен
  2. Получите и скопируйте client_id после создания приложения

  3. Получение access-токена

    Во всех методах используются все доступные разрешения/scope, вы можете указать нужные вам разрешения через запятую, используя параметр --scope, пример: --scope account-info,operation-details,operation-history

    • Автоматическое получение (Для этого запускается https-сервер с самоподписанным сертификатом, при переходе на страницу браузер выведет предупреждение, нажмите на "Дополнительно / Подробнее" и "Принять риск и продолжить / Сделать исключение для этого сайта / Перейти")
    python -m ayoomoney.auth auto <client_id> https://my.localhost:8042
    
    • Автоматическое получение со своим ssl сертификатом
    python -m ayoomoney.auth auto <client_id> https://my.localhost:8042  --key "<certs_path>/key.pem" --cert "<certs_path>/cert.pem"
    
    • Ручное получение
    python -m ayoomoney.auth simple <client_id> https://my.localhost:8042
    

    Во время перенаправления по redirect_uri в адресной строке появится параметр code=. Скопируйте значение и вставьте его в консоль

    Если авторизация прошла успешно, в консоли отобразится Ваш access-token.

  4. Сохраните access-token в переменные окружения, не храните токен в коде.

Получение основной информации об аккаунте

from os import environ

from ayoomoney.wallet import YooMoneyWalletAsync, YooMoneyWallet
from ayoomoney.types import AccountInfo


def sync_example():
    wallet = YooMoneyWallet(access_token=environ.get("ACCESS_TOKEN"))
    account_info: AccountInfo = wallet.account_info()
    print(account_info)
    
    wallet.close()  # Не забудьте закрыть сессию или используйте менеджер контекста


async def async_example():
    wallet = YooMoneyWalletAsync(access_token=environ.get("ACCESS_TOKEN"))
    account_info: AccountInfo = await wallet.account_info()
    print(account_info)
    
    await wallet.close()  # Не забудьте закрыть сессию или используйте менеджер контекста
   

if __name__ == "__main__":
    sync_example()

    # import asyncio
    # asyncio.run(async_example())

Использование менеджера контекста

from os import environ

from ayoomoney.wallet import YooMoneyWalletAsync, YooMoneyWallet
from ayoomoney.types import AccountInfo


def sync_example():
    with YooMoneyWallet(access_token=environ.get("ACCESS_TOKEN")) as wallet:
        account_info: AccountInfo = wallet.account_info()
        print(account_info)


async def async_example():
    async with YooMoneyWalletAsync(access_token=environ.get("ACCESS_TOKEN")) as wallet:
        account_info: AccountInfo = await wallet.account_info()
        print(account_info)


if __name__ == "__main__":
    sync_example()

   # import asyncio
   # asyncio.run(async_example())

Создание платёжной формы и проверка оплаты

from os import environ

from ayoomoney.wallet import YooMoneyWalletAsync, PaymentSource


async def main():
    async with YooMoneyWalletAsync(access_token=environ.get("ACCESS_TOKEN")) as wallet:
        payment_form = await wallet.create_payment_form(
            amount_rub=2,
            unique_label="myproject",
            payment_source=PaymentSource.YOOMONEY_WALLET,
            success_redirect_url="https://www.youtube.com/watch?v=dQw4w9WgXcQ&pp=ygUJcmljayByb2xl"
        )
        # проверка платежа по label
        payment_is_completed: bool = await wallet.check_payment_on_successful(
            payment_form.payment_label
        )

        print(
            f"Ссылка на оплату:\n{payment_form.link_for_customer}\n\n"
            f"Форма оплачена: {'Да' if payment_is_completed else 'Нет'}"
        )


if __name__ == "__main__":
    import asyncio
    asyncio.run(main())

История платежей

from datetime import datetime
from os import environ

from ayoomoney.types import OperationHistoryParams, OperationHistoryParamType
from ayoomoney.wallet import YooMoneyWalletAsync


async def main():
    async with YooMoneyWalletAsync(access_token=environ.get("ACCESS_TOKEN")) as wallet:
        payments_from = datetime.strptime("15.09.2024", "%d.%m.%Y")
        params = OperationHistoryParams(
            # label="lazydeus-1",  # Получение определенного платежа по метке

            from_datetime=payments_from,  # Получение операций после 15.09.2024 00:00
            # till_datetime=payments_from  # Получение операций до 15.09.2024 00:00

            operation_type=["deposition", OperationHistoryParamType.PAYMENT],
            # Типы операций, можно использовать OperationHistoryParamType или вводить значения вручную

            records=3,  # limit, Количество операций за один запрос, по умолчанию 30
            start_record=3,  # offset, https://yoomoney.ru/docs/wallet/user-account/operation-history#filtering-logic
            
            details=True  # Показывать подробные детали операции. types.Operation -> types.OperationDetails
        )
        history = await wallet.get_operation_history(params)
        for operation in history.operations:
            print(type(operation), operation)


if __name__ == '__main__':
    import asyncio

    asyncio.run(main())

HTTP-уведомления

В библиотеке реализованы только модели уведомлений, реализовать http-сервера вы должны сами.

Список моделей:

  • NotificationBase используется для http
  • NotificationExtend используется для https

Примеры:

  • Простой пример с FastAPI
    from typing import Annotated
    from os import environ
    
    from fastapi import FastAPI, Form, HTTPException
    from ayoomoney.types import NotificationBase
    
    app = FastAPI()
    
    
    @app.post("/notification")
    async def payment_handler(data: Annotated[NotificationBase, Form()]):
        # https://fastapi.tiangolo.com/tutorial/request-form-models/#pydantic-models-for-forms
    
        is_valid_hash = data.check_sha1_hash(environ.get("YOOMONEY_NOTIFICATION_SECRET"))
        if is_valid_hash is False:
            raise HTTPException(status_code=403)
    
  • Телеграм бот на aiogram

Поддержка проекта

Если вы обнаружили ошибку или хотите предложить идею для улучшения проекта, создайте issue.

Если у вас есть возможность и желание внести улучшения в проект, отправляйте pull request.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ayoomoney-1.3.1.tar.gz (17.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ayoomoney-1.3.1-py3-none-any.whl (18.9 kB view details)

Uploaded Python 3

File details

Details for the file ayoomoney-1.3.1.tar.gz.

File metadata

  • Download URL: ayoomoney-1.3.1.tar.gz
  • Upload date:
  • Size: 17.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.6

File hashes

Hashes for ayoomoney-1.3.1.tar.gz
Algorithm Hash digest
SHA256 35d917d0aff9e76fcef8798d5c96b8579dcdbcbc07d6e92f93108310de94e7dd
MD5 01bb6b17e5b72a52b4ae329fa32dde65
BLAKE2b-256 e4ab535d86f10b05c26dfb7b8526b4a43e8baa4cc0fdb8910014bb15c4e18fd9

See more details on using hashes here.

File details

Details for the file ayoomoney-1.3.1-py3-none-any.whl.

File metadata

  • Download URL: ayoomoney-1.3.1-py3-none-any.whl
  • Upload date:
  • Size: 18.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.6

File hashes

Hashes for ayoomoney-1.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c74249648d7322410bc05064226d5ee87c035758ba23c9357b668af7c49407da
MD5 fbffdf5c9164eb1e8dd71bb8570897f0
BLAKE2b-256 a249f3ddea9da4a7ddf3ecdbd63642467c2665df70e10c74859e43dd85f3e5a3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page