Wrapper for the Cardlink API in Python
Project description
Cardlink API Client
Асинхронный и синхронный 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
- Зарегистрируйтесь на cardlink.link.
- Создайте магазин и дождитесь его одобрения.
- В личном кабинете вы найдете 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}")
Разработка
Сборка и тестирование
-
Клонируйте репозиторий:
git clone https://github.com/austnv/pycardlink.git cd pycardlink
-
Установите зависимости:
uv sync -
Запустите линтеры (если настроены):
ruff check .
Участие в разработке
Мы приветствуем ваши предложения и pull request'ы! Пожалуйста, открывайте issue для обсуждения предлагаемых изменений перед отправкой PR.
Лицензия
Проект распространяется под лицензией MIT. Подробности см. в файле LICENSE.
Ссылки
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 pycardlink-0.1.0.tar.gz.
File metadata
- Download URL: pycardlink-0.1.0.tar.gz
- Upload date:
- Size: 30.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9a1de136357c5312ac0ef4a3dcf28e42b3676b97e6da8356aabac2849e581028
|
|
| MD5 |
56700e281698d1de2c0bf4e93182ff35
|
|
| BLAKE2b-256 |
231d20f9b893d59eeff714f8af351ca924f781e70715feef99ac1dfafa88ce42
|
Provenance
The following attestation bundles were made for pycardlink-0.1.0.tar.gz:
Publisher:
publish.yml on austnv/pycardlink
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pycardlink-0.1.0.tar.gz -
Subject digest:
9a1de136357c5312ac0ef4a3dcf28e42b3676b97e6da8356aabac2849e581028 - Sigstore transparency entry: 1553164333
- Sigstore integration time:
-
Permalink:
austnv/pycardlink@474d27ca92bccbf236caaea5871fad40d8dc5f8a -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/austnv
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@474d27ca92bccbf236caaea5871fad40d8dc5f8a -
Trigger Event:
push
-
Statement type:
File details
Details for the file pycardlink-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pycardlink-0.1.0-py3-none-any.whl
- Upload date:
- Size: 18.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ef0950d5d79bd66368255e60b5b48554690ad62ea0472ac9e08d7f599b514e5
|
|
| MD5 |
fdb97eae6585956ccb35fbaaa2769678
|
|
| BLAKE2b-256 |
ddedb295e26dc199a1d95667d0a726be417de3b68e2b6674a361fd4e5d1b13bc
|
Provenance
The following attestation bundles were made for pycardlink-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on austnv/pycardlink
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pycardlink-0.1.0-py3-none-any.whl -
Subject digest:
3ef0950d5d79bd66368255e60b5b48554690ad62ea0472ac9e08d7f599b514e5 - Sigstore transparency entry: 1553164346
- Sigstore integration time:
-
Permalink:
austnv/pycardlink@474d27ca92bccbf236caaea5871fad40d8dc5f8a -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/austnv
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@474d27ca92bccbf236caaea5871fad40d8dc5f8a -
Trigger Event:
push
-
Statement type: