Skip to main content

Wrapper for the Cardlink API in Python

Project description

Cardlink API Client

Python Version License: MIT PyPI version Code style: black

Асинхронный и синхронный Python-клиент для CardLink API.

Библиотека предоставляет удобный, типобезопасный интерфейс для взаимодействия с платежной системой CardLink. Она поддерживает все основные операции: создание счетов, выплаты, возвраты, управление балансом и поиск транзакций. Клиент полностью типизирован с использованием pydantic и httpx.


Возможности

  • 🚀 Асинхронный и синхронный клиент — выбирайте подходящий стиль взаимодействия.
  • 📦 Строгая типизация — все модели запросов и ответов описаны с помощью Pydantic.
  • 🔑 Простая аутентификация — достаточно передать API-ключ при создании клиента.
  • 🌐 Полный охват API — поддерживаются счета, платежи, выплаты, возвраты, баланс и поиск.
  • 🛡️ Встроенная обработка ошибок — понятные исключения при сетевых сбоях или ошибках API.
  • ⚙️ Гибкая конфигурация — можно задать собственный base_url для работы с тестовым окружением.

Установка

Убедитесь, что у вас установлен Python 3.10 или выше. Затем выполните:

pip install pycardlink

Либо, если вы используете uv:

uv add pycardlink

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

1. Получите API-ключ и Shop ID

  1. Зарегистрируйтесь на cardlink.link.
  2. Создайте магазин и дождитесь его одобрения.
  3. В личном кабинете вы найдете API-ключ и Shop ID.

2. Создание счета (асинхронный клиент)

import asyncio
from pycardlink import CardLinkAsyncClient
from pycardlink.models.requests import BillCreateRequest

async def main():
    client = CardLinkAsyncClient(api_key="your_api_key")
    
    # Создаём счёт на 100 рублей
    bill = await client.bill.create(
        BillCreateRequest(
            amount=100.0,
            shop_id="shop_123",
            description="Оплата заказа №42",
            order_id="order_42"
        )
    )
    
    print(f"Счёт создан: {bill.link_url}")

asyncio.run(main())

3. Создание счета (синхронный клиент)

from pycardlink import CardLinkSyncClient
from pycardlink.models.requests import BillCreateRequest

client = CardLinkSyncClient(api_key="your_api_key")

bill = client.bill.create(
    BillCreateRequest(
        amount=100.0,
        shop_id="shop_123",
        description="Оплата заказа №42",
        order_id="order_42"
    )
)

print(f"Счёт создан: {bill.link_url}")

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

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

pycardlink/
├── __init__.py          # Точка входа, версия, экспорт
├── clients.py           # Асинхронный (CardLinkAsyncClient) и синхронный (CardLinkSyncClient) клиенты
├── controllers.py       # Контроллеры для каждого раздела API (Bill, Payment, Payout, Refund, Balance)
└── models/
    ├── __init__.py
    ├── data.py          # Pydantic-модели данных (Bill, Payment, Payout и др.)
    ├── enums.py         # Перечисления (BillStatus, PaymentCurrency и т.д.)
    └── requests.py      # Модели запросов и ответов (BillCreateRequest, PaymentSearchRequest и т.д.)

Доступные контроллеры

Каждый клиент (CardLinkAsyncClient / CardLinkSyncClient) предоставляет следующие контроллеры:

Контроллер Методы
client.bill create(), toggle_activity(), payments(), search(), status()
client.payment search(), status()
client.payout create_personal(), create_regular(), search(), status(), spb_banks()
client.refund create_full(), create_partial(), search(), status()
client.balance get_merchant_balance()

Модели запросов и ответов

Все модели находятся в пакете pycardlink.models.requests и pycardlink.models.data. Благодаря Pydantic вы получаете автоматическую валидацию данных, подсказки в IDE и сериализацию/десериализацию.

Пример:

from pycardlink.models.requests import PaymentSearchRequest
from pycardlink.models.enums import PaymentStatus

search = PaymentSearchRequest(
    bill_id="bill_123",
    status=PaymentStatus.SUCCESS,
    limit=20
)

Обработка ошибок

Библиотека выбрасывает понятные исключения:

  • RuntimeError — ошибка, возвращённая API (например, неверный запрос).
  • ConnectionError — проблемы с сетью или недоступность сервера.
try:
    bill = await client.bill.create(...)
except RuntimeError as e:
    print(f"Ошибка API: {e}")
except ConnectionError as e:
    print(f"Сетевая ошибка: {e}")

Разработка

Сборка и тестирование

  1. Клонируйте репозиторий:

    git clone https://github.com/austnv/pycardlink.git
    cd pycardlink
    
  2. Установите зависимости:

    uv sync
    
  3. Запустите линтеры (если настроены):

    ruff check .
    

Участие в разработке

Мы приветствуем ваши предложения и pull request'ы! Пожалуйста, открывайте issue для обсуждения предлагаемых изменений перед отправкой PR.


Лицензия

Проект распространяется под лицензией MIT. Подробности см. в файле LICENSE.


Ссылки

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

pycardlink-0.1.0.tar.gz (30.1 kB view details)

Uploaded Source

Built Distribution

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

pycardlink-0.1.0-py3-none-any.whl (18.2 kB view details)

Uploaded Python 3

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