Skip to main content

Полнофункциональная Python библиотека для работы с платежной системой FreeKassa

Project description

FreeKassa Python Library

Профессиональная Python библиотека для работы с платежной системой FreeKassa.

Python License

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

  • 🏗️ Профессиональная архитектура - модульная структура с разделением на компоненты
  • 100% покрытие API - все методы FreeKassa API v1
  • 🔒 Безопасность - валидация данных, проверка подписей и IP
  • 📝 Type hints - полная типизация для IDE
  • 🧪 Тестирование - unit тесты для всех компонентов
  • 📚 Документация - подробные docstrings и примеры
  • 🚀 Production-ready - готово к использованию в продакшене

📦 Установка

pip install freekassa-no-off

Или из исходников:

git clone https://github.com/nloveuser/freekassa-no-off.git
cd freekassa-no-off
pip install -e .

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

API - Создание заказа

from freekassa import FreeKassaAPI, FreeKassaCurrency

api = FreeKassaAPI(
    shop_id=777,
    api_key='your_api_key'
)

order = api.create_order(
    currency_id=FreeKassaCurrency.VISA_RUB,
    email='customer@example.com',
    ip='192.168.1.1',
    amount=1000.00,
    currency='RUB'
)

print(f"Ссылка на оплату: {order['location']}")

SCI - Платежная форма

from freekassa import FreeKassaSCI

sci = FreeKassaSCI(
    merchant_id=777,
    secret_word='secret_word_1',
    secret_word_2='secret_word_2'
)

# Генерация URL
payment_url = sci.generate_payment_url(
    amount=1500.00,
    currency='RUB',
    order_id='ORDER-12345'
)

# Или HTML формы
html_form = sci.generate_payment_form_html(
    amount=1500.00,
    currency='RUB',
    order_id='ORDER-12345',
    button_text='Оплатить заказ'
)

Webhook - Обработка уведомлений

from freekassa import FreeKassaSCI, FreeKassaWebhookHandler

sci = FreeKassaSCI(777, 'secret1', 'secret2')
handler = FreeKassaWebhookHandler(sci)

# В вашем веб-обработчике
notification = handler.handle_notification(
    request_data=request.POST,
    client_ip=request.remote_addr,
    verify_ip=True
)

print(f"Оплачен заказ: {notification['merchant_order_id']}")
print(f"Сумма: {notification['amount']}")

# Вернуть 'YES' для подтверждения
return handler.get_success_response()

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

freekassa-no-off/
├── src/
│   └── freekassa/
│       ├── __init__.py          # Главный модуль
│       ├── exceptions.py        # Исключения
│       │
│       ├── api/                 # API клиент
│       │   ├── __init__.py
│       │   ├── base.py          # Базовый клиент
│       │   ├── client.py        # Главный клиент
│       │   ├── orders.py        # Методы заказов
│       │   ├── withdrawals.py   # Методы выплат
│       │   └── info.py          # Информационные методы
│       │
│       ├── sci/                 # SCI формы и webhook
│       │   ├── __init__.py
│       │   ├── forms.py         # Генерация форм
│       │   └── webhook.py       # Обработка уведомлений
│       │
│       ├── models/              # Модели данных
│       │   ├── __init__.py
│       │   ├── currency.py      # Валюты
│       │   └── status.py        # Статусы и периоды
│       │
│       └── utils/               # Утилиты
│           ├── __init__.py
│           ├── crypto.py        # Криптография
│           └── validators.py    # Валидация
│
├── tests/                       # Тесты
│   ├── __init__.py
│   └── test_all.py
│
├── examples/                    # Примеры
│   ├── basic_usage.py
│   ├── flask_integration.py
│   └── django_integration.py
│
├── docs/                        # Документация
├── setup.py                     # Установка
├── pyproject.toml              # Конфигурация проекта
├── requirements.txt            # Зависимости
├── README.md                   # Этот файл
├── LICENSE                     # MIT License
└── CHANGELOG.md                # История изменений

📚 Документация

Модули

🔌 API (freekassa.api)

Работа с REST API FreeKassa:

from freekassa import FreeKassaAPI

api = FreeKassaAPI(shop_id=777, api_key='key')

# Заказы
order = api.create_order(...)
orders = api.get_orders(order_status=1)
refund = api.refund_order(order_id=123)

# Выплаты
withdrawal = api.create_withdrawal(...)
withdrawals = api.get_withdrawals()
currencies = api.get_withdrawal_currencies()

# Информация
balance = api.get_balance()
currencies = api.get_currencies()
status = api.check_currency_status(4)
shops = api.get_shops()

🎨 SCI (freekassa.sci)

Генерация платежных форм:

from freekassa import FreeKassaSCI

sci = FreeKassaSCI(777, 'secret1', 'secret2')

# URL для оплаты
url = sci.generate_payment_url(
    amount=1000.00,
    currency='RUB',
    order_id='ORDER-123',
    email='customer@example.com'
)

# HTML форма
html = sci.generate_payment_form_html(
    amount=1000.00,
    currency='RUB',
    order_id='ORDER-123',
    button_text='Оплатить'
)

🔔 Webhook (freekassa.sci)

Обработка уведомлений:

from freekassa import FreeKassaWebhookHandler

handler = FreeKassaWebhookHandler(sci)

notification = handler.handle_notification(
    request_data=request.POST,
    client_ip=request.remote_addr,
    verify_ip=True
)

# Обязательно вернуть 'YES'
return handler.get_success_response()

💰 Модели (freekassa.models)

Константы и модели данных:

from freekassa import FreeKassaCurrency, OrderStatus, RecurrentPeriod

# Валюты
FreeKassaCurrency.VISA_RUB        # 4
FreeKassaCurrency.BITCOIN         # 24
FreeKassaCurrency.SBP             # 42

# Статусы
OrderStatus.NEW                   # 0
OrderStatus.PAID                  # 1

# Периоды подписок
RecurrentPeriod.DAY              # "day"
RecurrentPeriod.MONTH            # "month"

🛠️ Утилиты (freekassa.utils)

Вспомогательные функции:

from freekassa.utils import (
    generate_md5_signature,
    generate_hmac_sha256_signature,
    validate_amount,
    validate_email,
    validate_ip
)

Исключения

from freekassa import FreeKassaException
from freekassa.exceptions import (
    FreeKassaAPIException,          # Ошибка API
    FreeKassaValidationException,   # Ошибка валидации
    FreeKassaSignatureException,    # Ошибка подписи
    FreeKassaIPException,           # Ошибка IP
    FreeKassaNetworkException       # Ошибка сети
)

try:
    order = api.create_order(...)
except FreeKassaValidationException as e:
    print(f"Ошибка валидации: {e}")
except FreeKassaAPIException as e:
    print(f"Ошибка API: {e}")

🔐 Безопасность

Библиотека включает:

  • ✅ Автоматическую валидацию всех входных данных
  • ✅ Проверку подписей (HMAC SHA256 для API, MD5 для SCI)
  • ✅ Проверку IP адресов серверов FreeKassa
  • ✅ Защиту от replay-атак (монотонный nonce)
  • ✅ Безопасное хранение секретов (не логируются)

🧪 Тестирование

# Запуск всех тестов
python -m unittest discover tests

# Запуск конкретного теста
python -m unittest tests.test_all.TestFreeKassaAPI

# С подробным выводом
python -m unittest tests.test_all -v

📖 Примеры

См. папку examples/ для подробных примеров:

  • basic_usage.py - базовое использование
  • flask_integration.py - интеграция с Flask
  • django_integration.py - интеграция с Django
  • recurrent_payments.py - рекуррентные платежи

🤝 Вклад в проект

Приветствуются pull requests! Для больших изменений сначала откройте issue.

📝 Лицензия

MIT License - см. файл LICENSE

🔗 Ссылки

⭐ Поддержите проект

Если библиотека оказалась полезной, поставьте звезду на GitHub!


Создано с ❤️ для разработчиков Python

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

freekassa_no_off-3.0.0.tar.gz (20.6 kB view details)

Uploaded Source

Built Distribution

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

freekassa_no_off-3.0.0-py3-none-any.whl (21.3 kB view details)

Uploaded Python 3

File details

Details for the file freekassa_no_off-3.0.0.tar.gz.

File metadata

  • Download URL: freekassa_no_off-3.0.0.tar.gz
  • Upload date:
  • Size: 20.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for freekassa_no_off-3.0.0.tar.gz
Algorithm Hash digest
SHA256 0ad8ce57b34eb327a36a3c02759113acbfa6af3b5cf49b2158de150cbabd3122
MD5 33c4cffe186408b342569210e41a6f89
BLAKE2b-256 e7b3927d99050dc160f3df6383c5c1e6599a1d28ee9b7c9e3d7ac1654b7a8d47

See more details on using hashes here.

File details

Details for the file freekassa_no_off-3.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for freekassa_no_off-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 eff5d5e5142f93122f37be2c9cf99efc6152d0e2986a7dcdfe635737ba8815eb
MD5 08eb1ef1a44d184c383a5457166e8d34
BLAKE2b-256 95128328d2c80feab82af300f6033d0ca69c0648300cb3189ff872ae044c0d7f

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