Unofficial API client for YooKassa
Project description
Async YooKassa (unofficial)
Неофициальный, полностью асинхронный клиент для работы с платежным сервисом Ю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— Типизированные исключения.
Вклад в развитие
Если вы нашли баг или хотите добавить новую фичу:
- Создайте Issue с описанием.
- Форкните репозиторий.
- Внесите изменения и отправьте Pull Request.
Автор
Библиотека написана в рамках проекта "Код на салфетке":
- Сайт: https://pressanybutton.ru/
- Telegram-канал: https://t.me/press_any_button
Поддержка
Если вам нравится этот проект и вы хотите поддержать его дальнейшее развитие, рассмотрите возможность доната:
Лицензия
Проект распространяется под лицензией MIT. Подробнее см. файл LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
932c18f2cec81fe92082a517bc9493fbc5a210babf1f58af14b38b04ef5ad42e
|
|
| MD5 |
ae8950d3a8213569d3241c1e6c70d400
|
|
| BLAKE2b-256 |
47e70212ed20639b7ec21af775496343c8a519c02f14d8585f3b9379d351fcef
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
00dc5d17a4154c7412ab61c0dcb7f26dde1ee950bde19c5775ad00fb10a08b6c
|
|
| MD5 |
575fda1c44d026a61cfbd7b2e7ee2f9f
|
|
| BLAKE2b-256 |
601fe4b57775551fbe544852dce778bd5b1b3646dcf7c8b6c76b0e1a37ba09ae
|