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-2.0.0.tar.gz (20.7 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-2.0.0-py3-none-any.whl (21.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: freekassa_no_off-2.0.0.tar.gz
  • Upload date:
  • Size: 20.7 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-2.0.0.tar.gz
Algorithm Hash digest
SHA256 a99dc3ec314d23c8a63e5e1460148c5e42e0360083664687d7df8f2da1fd1c06
MD5 a8b8f0720f6b3ae725697bf0dda2e5d0
BLAKE2b-256 f82cdc55417058829083e39524c7adaf54df2687d19fe5bf611f9b5996da81de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for freekassa_no_off-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 586d6c9ebd000ff1ed503d229d9ec489685fe9aaef51607213baeaee60cf5491
MD5 316184de19ddb07bf397894468988dd9
BLAKE2b-256 ac52efc7c1c8379b9bf9945f2e084ceabb469e7d5cbab8fcf89ccae227bae71b

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