Полнофункциональная Python библиотека для работы с платежной системой FreeKassa
Project description
FreeKassa Python Library
Профессиональная Python библиотека для работы с платежной системой FreeKassa.
✨ Особенности
- 🏗️ Профессиональная архитектура - модульная структура с разделением на компоненты
- ✅ 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- интеграция с Flaskdjango_integration.py- интеграция с Djangorecurrent_payments.py- рекуррентные платежи
🤝 Вклад в проект
Приветствуются pull requests! Для больших изменений сначала откройте issue.
📝 Лицензия
MIT License - см. файл LICENSE
🔗 Ссылки
⭐ Поддержите проект
Если библиотека оказалась полезной, поставьте звезду на GitHub!
Создано с ❤️ для разработчиков Python
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 freekassa_no_off-1.0.0.tar.gz.
File metadata
- Download URL: freekassa_no_off-1.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
45a0441d12a5e6d879dd97c38b1eda7d5e2e2690f9a1e9f20eeed03463b4b4fb
|
|
| MD5 |
3894bbcb3c51876d1810db40d4f76f7c
|
|
| BLAKE2b-256 |
ba8d12835cccded7664668bdc6be00ac27596ec898a9dc412de5a2047d80b260
|
File details
Details for the file freekassa_no_off-1.0.0-py3-none-any.whl.
File metadata
- Download URL: freekassa_no_off-1.0.0-py3-none-any.whl
- Upload date:
- Size: 21.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b8529073991d021ba378095a39c7a203a9fdd70fbad5bd843891d95386c0785
|
|
| MD5 |
668aa6ba1bc22eebfa9231d2d1058ac2
|
|
| BLAKE2b-256 |
354cbdf902bd9d6d56033792ccae22304e1e21eb4cc4e3208ea08f640ea64735
|