Skip to main content

By @rerowros

Project description

yookassa-telegram

Интеграция платежей YooKassa с Telegram-ботами (aiogram 3.x).

Лёгкая встраиваемая библиотека для создания платежей, формирования чеков (54-ФЗ), обработки вебхуков и управления возвратами.


🔧 Особенности

  • Поддержка создания и подтверждения платежей через YooKassa
  • Генерация чеков (54‑ФЗ) и обработка налоговых данных
  • Интеграция с aiogram: отправка сообщений с клавиатурами для оплаты
  • Встроенная логика retry и обработка ошибок для запросов к YooKassa SDK
  • Абстракция хранилища платежей: in-memory, JSON и возможность реализовать своё
  • Обработчик webhook с проверкой подписи и callback-ами

Документация описана в API.md.

Установка

Установите с PyPI:

pip install yookassa-telegram

Требования:

  • Python 3.10+
  • aiogram
  • aiohttp
  • yookassa

Зависимости перечислены в pyproject.toml.


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

Настройка через переменные окружения (пример .env):

YOOKASSA_SHOP_ID=123456
YOOKASSA_SECRET_KEY=test_xxxxx
YOOKASSA_RETURN_URL=https://example.com/payment/return
YOOKASSA_WEBHOOK_URL=https://example.com/webhook
YOOKASSA_IS_TEST=true
YOOKASSA_ENABLE_RECEIPTS=true
YOOKASSA_INN=1234567890

Пример использования с aiogram:

from aiogram import Bot, Dispatcher
from yookassa_telegram_integration.config import YooKassaConfig
from yookassa_telegram_integration.yookassa_client import YooKassaClient
from yookassa_telegram_integration.payment_service import PaymentService
from yookassa_telegram_integration.receipt_service import ReceiptService
from yookassa_telegram_integration.refund_service import RefundService
from yookassa_telegram_integration.telegram_integration import (
    TelegramPaymentIntegration, create_payment_router
)
from yookassa_telegram_integration.storage import InMemoryPaymentStorage

config = YooKassaConfig.from_env()
client = YooKassaClient(config)
storage = InMemoryPaymentStorage()
payment_service = PaymentService(config, storage, client)
receipt_service = ReceiptService(config)
refund_service = RefundService(config, storage, client)

integration = TelegramPaymentIntegration(
    config,
    payment_service,
    receipt_service,
    refund_service,
    storage
)

router = create_payment_router(integration)
# Включите router в ваш Dispatcher
# dp.include_router(router)

Пример отправки сообщения с кнопкой оплаты:

await integration.send_payment_message(
    message,  # aiogram.types.Message
    amount=150.0,
    description='Оплата подписки',
    order_id='order_12345',
    user_email='user@example.com'
)

Конфигурация

Ключевые настройки хранятся в YooKassaConfig:

  • shop_id и secret_key — данные магазина YooKassa
  • return_url — URL для возврата пользователя после платежа
  • webhook_url — URL для webhook уведомлений
  • enable_receipts, inn, default_tax_system — опции для 54-ФЗ
  • auto_capture — автоматически подтверждать платежи

Используйте YooKassaConfig.from_env() для загрузки из переменных окружения.


Webhook (обработчик уведомлений)

WebhookHandler обеспечивает парсинг уведомлений, проверку и обновление статуса платежа, а также регистрацию Callback-ов для конкретных событий.

Пример использования:

from yookassa_telegram_integration.webhook_handler import (
    create_webhook_handler, WebhookEventType
)

async def on_success(notification):
    print('Оплата успешна', notification.payment_id)

handler = create_webhook_handler(
    config,
    on_payment_succeeded=on_success
)

# В ручном веб-сервере / на фреймворке передайте тело запроса в handler.handle_webhook
# notification = await handler.handle_webhook(payload, headers)

Хранилище (Storage)

Доступны реализации:

  • InMemoryPaymentStorage — для разработки и тестов
  • JSONFilePaymentStorage — для простого прототипирования

Для production рекомендуется реализовать свой PaymentStorage


Примеры

Подтверждение платежа:

from yookassa_telegram_integration.payment_service import PaymentService
await payment_service.capture_payment(payment_id)

Отмена платежа:

await payment_service.cancel_payment(payment_id)

Создание возврата:

from yookassa_telegram_integration.models import RefundData
await refund_service.create_refund(
    RefundData(
        payment_id='payment_123',
        amount=100.0,
        currency='RUB',
        description='Возврат по ошибке'
    ),
    idempotency_key='refund_key_123'
)

Contributing

PR и issue приветствуются. Пожалуйста, используйте ветку main как основу

Перед PR выполните:

black .
mypy .
pytest

Контакт

Автор: rerowros · Email: rerowros@gmail.com

Поддержка/Issues: https://github.com/Rerowros/yookassa-telegram/issues

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

yookassa_telegram-1.2.0.tar.gz (34.2 kB view details)

Uploaded Source

Built Distribution

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

yookassa_telegram-1.2.0-py3-none-any.whl (43.0 kB view details)

Uploaded Python 3

File details

Details for the file yookassa_telegram-1.2.0.tar.gz.

File metadata

  • Download URL: yookassa_telegram-1.2.0.tar.gz
  • Upload date:
  • Size: 34.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for yookassa_telegram-1.2.0.tar.gz
Algorithm Hash digest
SHA256 6bff1784a33760d36a9917519464b5370ef1ea4e75518aa499231aa3dc925a7a
MD5 7d4f0af8a7bf20340e22a5f8caa94d18
BLAKE2b-256 231fe3d19b18a0f35cfb334973738c44cc846e731cd119f6bdd495e23a4405c2

See more details on using hashes here.

File details

Details for the file yookassa_telegram-1.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for yookassa_telegram-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b3b5c71f7c431f0958220e582b8f660eadfea2bb5ee62e871e44136827fcb18b
MD5 821fd03d671ccddf6f497871c051e2b7
BLAKE2b-256 b82f32f02c025682841af1c208cbaeb0306f7a4c8eec187c1e7208324f76445c

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