Skip to main content

Unofficial API client for YooKassa

Project description

Async YooKassa (unofficial)

Latest Stable Version Downloads Код на салфетке Заметки на салфетке

Неофициальный, полностью асинхронный клиент для работы с платежным сервисом ЮKassa (YooKassa).

Библиотека разработана с использованием современных возможностей Python, опираясь на официальную документацию API и структуру официального SDK, но переписана с нуля для обеспечения максимальной производительности и удобства использования в асинхронных приложениях.

Особенности

  • Полная асинхронность: Использует httpx для неблокирующих HTTP-запросов.
  • Type-Safe: Строгая типизация с использованием Pydantic v2. Весь код покрыт тайп-хинтами.
  • Современный API: Удобный интерфейс через контекстный менеджер async with.
  • Модульность: Структурированная архитектура, отдельные сервисы для каждой сущности API (Платежи, Возвраты, Чеки и т.д.).
  • Надежность: Автоматическая обработка ошибок и повтор запросов (idempotency support).

Установка

Библиотека доступна в PyPI и может быть установлена с помощью любого пакетного менеджера.

pip

pip install async_yookassa

poetry

poetry add async_yookassa

uv (рекомендуется)

uv add async_yookassa

Быстрый старт

Для начала работы вам понадобятся Shop ID и Secret Key из личного кабинета ЮКассы.

Создание первого платежа

import asyncio
from async_yookassa import YooKassaClient
from async_yookassa.models.payment import PaymentRequest, Amount, RedirectConfirmationRequest


async def main():
    async with YooKassaClient(account_id="<SHOP_ID>", secret_key="<SECRET_KEY>") as client:
        # Создаем объект запроса
        request = PaymentRequest(
            amount=Amount(value="100.00", currency="RUB"),
            confirmation=RedirectConfirmationRequest(
                type="redirect",
                return_url="https://example.com/return"
            ),
            description="Заказ №1",
            capture=True
        )

        # Отправляем запрос
        payment = await client.payment.create(request)

        print(f"Платеж создан: {payment.id}")
        print(f"Ссылка на оплату: {payment.confirmation.confirmation_url}")


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

Аутентификация

Библиотека поддерживает два способа аутентификации.

Basic Auth (Стандартный)

Используется shopId и secretKey.

client = YooKassaClient(account_id="123456", secret_key="live_...")

OAuth (Для платформ)

Используется OAuth-токен.

client = YooKassaClient(auth_token="<OAUTH_TOKEN>")

Конфигурация клиента

При инициализации YooKassaClient можно передать дополнительные параметры:

from async_yookassa import YooKassaClient
from httpx import AsyncClient

custom_httpx_client = AsyncClient()

client = YooKassaClient(
    account_id="...",
    secret_key="...",
    timeout=60,  # Таймаут запроса в секундах (по умолчанию 30)
    api_url="https://api.yookassa.ru/v3",  # URL API (по умолчанию продакшн)
    http_client=custom_httpx_client  # Свой экземпляр AsyncClient (опционально)
)

Обратите внимание: Если вы передаете свой http_client, вы сами несете ответственность за его закрытие. При использовании async with клиент async_yookassa закроет переданный http_client только если он был создан внутри ( т.е. http_client=None).

Сервисы API

Все взаимодействие с API происходит через соответствующие сервисы внутри клиента.

💳 Платежи (client.payment)

Управление платежами: создание, подтверждение, отмена, получение информации.

# Получение списка платежей
payments = await client.payment.list(limit=10)

# Получение информации о платеже
payment = await client.payment.find_one("2be00000-00000-00000000")

# Подтверждение платежа (холдирование)
await client.payment.capture("2be00000-00000-00000000")

# Отмена платежа
await client.payment.cancel("2be00000-00000-00000000")

Возвраты (client.refund)

Осуществление возвратов средств пользователям.

from async_yookassa.models.refund import RefundRequest, Amount

refund = await client.refund.create(
    RefundRequest(
        payment_id="2be00000-00000-00000000",
        amount=Amount(value="50.00", currency="RUB"),
        description="Возврат части средств"
    )
)

Чеки (client.receipt)

Работа с чеками для 54-ФЗ.

from async_yookassa.models.receipt import ReceiptRequest, ReceiptType, Customer, ReceiptItem, SettlementReceipt

receipt = await client.receipt.create(
    ReceiptRequest(
        customer=Customer(email="user@example.com"),
        type=ReceiptType.payment,
        send=True,
        items=[
            ReceiptItem(description="Товар 1", quantity="1", amount=Amount(value="100.00", currency="RUB"), vat_code=1)
        ],
        settlements=[SettlementReceipt(...)]
    )
)

Вебхуки (client.webhook)

Управление подписками на уведомления о событиях.

from async_yookassa.models.webhook import WebhookRequest, WebhookEvent

# Подписка на уведомление о успешной оплате
webhook = await client.webhook.create(
    WebhookRequest(
        event=WebhookEvent.PAYMENT_SUCCEEDED,
        url="https://example.com/webhook"
    )
)

# Список активных вебхуков
webhooks = await client.webhook.list()

Другие сервисы

Сервис Описание Доступ через
Сделки Безопасная сделка client.deal
Счета Выставление счетов client.invoice
Выплаты Выплаты на карты client.payout
Способы оплаты Сохраненные карты client.payment_methods
Настройки Информация о магазине client.me
СБП Банки участники client.sbp_bank

Продвинутое использование

Интеграция с Dependency Injection (Dishka)

Если вы используете DI-фреймворк, например dishka, вы можете зарегистрировать клиент как провайдер.

from dishka import Provider, Scope, provide
from async_yookassa import YooKassaClient


class PaymentsProvider(Provider):
    @provide(scope=Scope.APP)
    async def get_client(self) -> YooKassaClient:
        return YooKassaClient(
            account_id="<ID>",
            secret_key="<KEY>"
        )

Структура проекта

Библиотека разделена на модули для удобства:

  • async_yookassa.client — Основной клиент YooKassaClient.
  • async_yookassa.models — Pydantic модели запросов и ответов.
  • async_yookassa.services — Реализация логики работы с API (методы create, list и т.д.).
  • async_yookassa.exceptions — Типизированные исключения.

Вклад в развитие

Если вы нашли баг или хотите добавить новую фичу:

  1. Создайте Issue с описанием.
  2. Форкните репозиторий.
  3. Внесите изменения и отправьте Pull Request.

Автор

Библиотека написана в рамках проекта "Код на салфетке":

Поддержка

Если вам нравится этот проект и вы хотите поддержать его дальнейшее развитие, рассмотрите возможность доната:

Лицензия

Проект распространяется под лицензией MIT. Подробнее см. файл LICENSE.

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

async_yookassa-1.0.2.tar.gz (38.8 kB view details)

Uploaded Source

Built Distribution

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

async_yookassa-1.0.2-py3-none-any.whl (76.6 kB view details)

Uploaded Python 3

File details

Details for the file async_yookassa-1.0.2.tar.gz.

File metadata

  • Download URL: async_yookassa-1.0.2.tar.gz
  • Upload date:
  • Size: 38.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for async_yookassa-1.0.2.tar.gz
Algorithm Hash digest
SHA256 932c18f2cec81fe92082a517bc9493fbc5a210babf1f58af14b38b04ef5ad42e
MD5 ae8950d3a8213569d3241c1e6c70d400
BLAKE2b-256 47e70212ed20639b7ec21af775496343c8a519c02f14d8585f3b9379d351fcef

See more details on using hashes here.

File details

Details for the file async_yookassa-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: async_yookassa-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 76.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for async_yookassa-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 00dc5d17a4154c7412ab61c0dcb7f26dde1ee950bde19c5775ad00fb10a08b6c
MD5 575fda1c44d026a61cfbd7b2e7ee2f9f
BLAKE2b-256 601fe4b57775551fbe544852dce778bd5b1b3646dcf7c8b6c76b0e1a37ba09ae

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