Skip to main content

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.

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.3.tar.gz (39.1 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.3-py3-none-any.whl (76.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: async_yookassa-1.0.3.tar.gz
  • Upload date:
  • Size: 39.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","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.3.tar.gz
Algorithm Hash digest
SHA256 2382754453060f57b5859d771643bcd640a24fe269814e1b29f9181840cc1176
MD5 9c8f5d38ad245aac9e3621180ee3362f
BLAKE2b-256 cc7139fcd421d3d662044ef0fa4bd8707e70e7b44c9e6ac63129b483204a9125

See more details on using hashes here.

File details

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

File metadata

  • Download URL: async_yookassa-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 76.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 59edf0087df18a233ebde1fd2884e165ff07452fdcb5bac385c92d385639f32c
MD5 5f15331b6d76527df017d2ced1fd4c9c
BLAKE2b-256 0f0d87c35a538f0f79690986f509b169f134375979e2298b24a11bb6f4123904

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.3 This release

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

0.5.3

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

0.4.0

2 files

0.3.8

2 files

0.3.7

2 files

0.3.6

2 files

0.3.5

2 files

0.3.0

2 files

0.2.5

2 files

0.2.0

2 files

0.1.5

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

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