Tochka API wrapper for Python built on top of httpx and pydantic
Project description
tochka_py
Tochka API docs - Sandbox docs
Python-клиент для Tochka API на базе httpx и pydantic.
Сейчас библиотека покрывает:
tochka_py.invoice- полный lifecycle работы со счетами:create,get_file,send_to_email,get_payment_status,deletetochka_py.closing_documents- работа с закрывающими документами:create,get_file,send_to_email,deletetochka_py.webhook- управление webhook-подписками и верификация входящих webhook JWT:create,edit,get,send_test,delete,WebhookVerifier
Поддерживаются синхронные и асинхронные вызовы, единый transport и типизированные модели запросов и ответов.
Также доступен CLI tochka-py для управления webhook-подписками.
Установка
pip install tochka_py
Требуется Python >=3.10.
Быстрый старт
from tochka_py import TochkaClient
from tochka_py.invoice.types import (
ContentInvoice,
CounterpartType,
InvoiceCreateRequest,
InvoiceCreateRequestData,
InvoiceModel,
NdsKind,
PositionModel,
SecondSideModel,
UnitCode,
)
request = InvoiceCreateRequestData(
data=InvoiceCreateRequest(
account_id="12345123451234512345/044525104",
customer_code="1234567ab",
second_side=SecondSideModel(
tax_code="7707083893",
type=CounterpartType.COMPANY,
second_side_name='ООО "Покупатель"',
),
content=ContentInvoice(
invoice=InvoiceModel(
number="42",
total_amount=1000.0,
positions=[
PositionModel(
position_name="Консультационные услуги",
unit_code=UnitCode.PIECE,
nds_kind=NdsKind.WITHOUT_NDS,
price=1000.0,
quantity=1,
total_amount=1000.0,
)
],
)
),
)
)
with TochkaClient(token="your_token") as client:
response = client.invoice.create_sync(request)
print(response.data.document_id)
Получение PDF, статуса оплаты, отправка на email и удаление:
from tochka_py.invoice.types import SendDocumentToEmailRequest
document_id = response.data.document_id
customer_code = request.customer_code
with TochkaClient(token="your_token") as client:
payment_status = client.invoice.get_payment_status_sync(customer_code, document_id)
pdf_file = client.invoice.get_file_sync(customer_code, document_id)
email_result = client.invoice.send_to_email_sync(
customer_code,
document_id,
SendDocumentToEmailRequest(email="test@example.com"),
)
delete_result = client.invoice.delete_sync(customer_code, document_id)
print(payment_status.data.payment_status)
print(pdf_file.filename, pdf_file.content_type, len(pdf_file.content))
print(email_result.data.result, delete_result.data.result)
Closing Documents
Создание закрывающего документа, например акта:
from decimal import Decimal
from tochka_py import TochkaClient
from tochka_py.closing_documents.types import (
ActModel,
ClosingDocumentCreateRequest,
ContentAct,
SecondSideModel,
)
from tochka_py.invoice.types import CounterpartType, NdsKind, PositionModel, UnitCode
request = ClosingDocumentCreateRequest(
account_id="12345123451234512345/044525104",
customer_code="1234567ab",
second_side=SecondSideModel(
tax_code="7707083893",
type=CounterpartType.COMPANY,
),
content=ContentAct(
act=ActModel(
number="ACT-42",
total_amount=Decimal("1000.00"),
positions=[
PositionModel(
position_name="Консультационные услуги",
unit_code=UnitCode.PIECE,
nds_kind=NdsKind.WITHOUT_NDS,
price=Decimal("1000.00"),
quantity=Decimal("1"),
total_amount=Decimal("1000.00"),
)
],
)
),
)
with TochkaClient(token="your_token") as client:
response = client.closing_documents.create_sync(request)
print(response.data.document_id)
Webhooks
Управление webhook-подпиской:
from tochka_py import TochkaClient
from tochka_py.webhook.types import WebhookSubscription, WebhookType
with TochkaClient(token="your_token") as client:
response = client.webhooks.create_sync(
client_id="your_app_client_id",
request=WebhookSubscription(
webhooks_list=[
WebhookType.INCOMING_PAYMENT,
WebhookType.OUTGOING_PAYMENT,
],
url="https://app.example.com/tochka/webhook",
),
)
print(response.data.webhooks_list, response.data.url)
Верификация и парсинг входящего webhook JWT:
from tochka_py.webhook.verifier import WebhookVerifier
raw_webhook_jwt = request_body.decode()
with WebhookVerifier() as verifier:
payload = verifier.decode_sync(raw_webhook_jwt)
print(payload.webhook_type, payload.customer_code)
CLI
Повесить webhook одной командой:
export TOCHKA_API_TOKEN=your_token
tochka-py webhook set \
--client-id your_app_client_id \
--url https://app.example.com/tochka/webhook \
--event incomingPayment \
--event outgoingPayment
Посмотреть текущую подписку:
tochka-py webhook get --client-id your_app_client_id
Отправить тестовый webhook:
tochka-py webhook test --client-id your_app_client_id --event incomingPayment
Удалить подписку:
tochka-py webhook delete --client-id your_app_client_id
CLI использует:
TOCHKA_API_TOKENдля токенаTOCHKA_BASE_URLдля переопределения base URL
Для sandbox можно использовать:
- base URL:
https://enter.tochka.com/sandbox/v2 - токен:
sandbox.jwt.token
Структура API
from tochka_py import TochkaClient
TochkaClient:
invoice.create_sync(...)invoice.create(...)invoice.get_file_sync(...)invoice.get_file(...)invoice.send_to_email_sync(...)invoice.send_to_email(...)invoice.get_payment_status_sync(...)invoice.get_payment_status(...)invoice.delete_sync(...)invoice.delete(...)closing_documents.create_sync(...)closing_documents.create(...)closing_documents.get_file_sync(...)closing_documents.get_file(...)closing_documents.send_to_email_sync(...)closing_documents.send_to_email(...)closing_documents.delete_sync(...)closing_documents.delete(...)webhooks.create_sync(...)webhooks.create(...)webhooks.edit_sync(...)webhooks.edit(...)webhooks.get_sync(...)webhooks.get(...)webhooks.send_test_sync(...)webhooks.send_test(...)webhooks.delete_sync(...)webhooks.delete(...)webhooks.set_sync(...)webhooks.set(...)
Обработка ошибок
Библиотека поднимает исключения из tochka_py.core.errors, например:
AuthenticationErrorRequestValidationErrorNotFoundErrorServerError
У исключений доступны поля product, http_status, code, request_id и raw.
Интеграционные тесты для sandbox
По умолчанию интеграционные тесты отключены.
Запуск unit-тестов:
uv run pytest tests
Запуск integration:
uv run pytest tests -m integration
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
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 tochka_py-0.0.4.tar.gz.
File metadata
- Download URL: tochka_py-0.0.4.tar.gz
- Upload date:
- Size: 56.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.1 {"installer":{"name":"uv","version":"0.10.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f117b62fe9c8c926f74f3c29765ed6d09e694bfd8101ea1ec3f8013958e22015
|
|
| MD5 |
bef462fc0bec5475133b84fa4bd5ac30
|
|
| BLAKE2b-256 |
4dd7ade5b7f5e867375c7d4d61061a9daac1d0186c74bf579748db89030a07de
|
File details
Details for the file tochka_py-0.0.4-py3-none-any.whl.
File metadata
- Download URL: tochka_py-0.0.4-py3-none-any.whl
- Upload date:
- Size: 21.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.1 {"installer":{"name":"uv","version":"0.10.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e825f06f4ddd24cf1796baf4f5bdd2cefeecd22da3790f8c1c624ec22d4998f0
|
|
| MD5 |
e7b14a30d53ebb4ff29a8ac5365272f8
|
|
| BLAKE2b-256 |
e0702ef4eb670200f927435e367f19c2e820276ab04aa700aed644ee502bd284
|