YETI³ / SDK

Донаты на YETI3 SDK

yeti3-donations==1.0.0: сборы по сайтам и проектам, ЮKassa и Альфа-Банк через существующий yeti3-acquiring==0.1.2. Библиотека автоматически устанавливает зависимости.

python3 -m venv .venv-donations
source .venv-donations/bin/activate
python -m pip install --index-url https://engine.yeti3.ru/sdk/simple/ yeti3-donations==1.0.0

Подключение к ядру

from yeti3_core import Engine
from yeti3_donations import Package, Gateway

# Эти функции предоставляет ваш хост: защищённые настройки админки и кассы.
gateway = Gateway("yookassa", payment_settings, make_receipt)
engine = Engine()
donations = engine.register(Package(
    database="donations.sqlite3",
    gateway=gateway,
    settings=donation_settings,
))
engine.boot()
try:
    order = donations.create(
        owner="account-42", order_id="donation-0001",
        site="example.org", campaign="support",
        amount=10000, comment="На развитие проекта",
    )
    print(order["url"])
finally:
    engine.shutdown()

Это пример встраивания: payment_settings, donation_settings, make_receipt не заглушки готового приложения, а обязательные функции хоста. Полностью исполняемый пример без реальных списаний: demo.py из документации.

payment_settings() возвращает текущие приватные настройки: enabled, return_url, recipient_revision; для ЮKassa — shop_id, secret, test_mode; для Альфа-Банка — username/password либо token, test_mode. recipient_revision — неизменяемая версия получателя, которую нужно менять при смене банковского получателя. Для проверки старых заказов используйте соответствующие исторические настройки.

donation_settings() возвращает enabled, min_kopecks и max_kopecks. По умолчанию диапазон 100–10000000 копеек. Сумма — целое число копеек, не float. make_receipt(order_id, amount, details) формирует данные чека для выбранного провайдера из разрешённых настроек кассы и данных покупателя. Режим чеков настраивается владельцем; модуль не определяет налоговый статус сбора.

Подтверждение и защита

Обработчик возврата, уведомления провайдера или фоновая задача вызывает:

first_confirmation = donations.reconcile("account-42", "donation-0001")
confirmed_total = donations.total("example.org", "support")

Перед зачислением адаптер повторно запрашивает статус у банка и сверяет заказ, сумму и валюту. ЮKassa дополнительно проверяет получателя и тестовый режим. Повторное подтверждение не увеличивает сумму. Входящий webhook сам по себе ничего не зачисляет. Хост проверяет права пользователя, CSRF, лимиты запросов и получает owner из сессии, а не из произвольного поля браузера.

После таймаута регистрации заказ остаётся REGISTERING: повтор create не вызывает повторное списание. Сверьте заказ с банком и передайте подтверждённые remote_id и URL в registered(). Эта функция доступна только доверенному серверному коду.

SQLite хранится в постоянном приватном каталоге. Создавайте экземпляр модуля на поток/процесс с общим файлом SQLite. Продажи токенов, переводы на карту, регулярные платежи и возвраты эта версия не выполняет.

Ресурсы и проверка

Манифест содержит минимальные ресурсы: 256 МиБ доступной RAM, 512 МиБ диска, 1 CPU. Общий контроль ресурсов реализуется ядром SDK на машине установки; старый установленный SDK необходимо обновить для применения нового правила. Эти значения — исходные рекомендации, а не обещание производительности под нагрузкой.

Проверены логика учёта и контракты обоих адаптеров на тестовых ответах. Реальный платёж не выполнялся: нужны настроенные мерчант и касса. Подключение библиотеки не означает автоматическое появление платёжной страницы на каждом сайте.

Цена модуля в каталоге: 200 Φ за 30 дней. Это цена доступа к модулю; комиссия провайдера и поступающие донаты учитываются отдельно.

Документация ЮKassa: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-process

Скачать исполняемый demo.py Архив SDK-модуля