Metadata-Version: 2.4
Name: paydex
Version: 1.0.0
Summary: Клиент API Paydex: счета, СБП/карты/USDT, уведомления с проверкой подписи, возвраты. Синхронный и async (aiogram)
License-Expression: MIT
Project-URL: Documentation, https://paydex.pro/docs/sdk
Keywords: paydex,payments,sbp,aiogram,webhook
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# Paydex для Python

Клиент API Paydex для Python 3.9+: счета (СБП, карты, USDT), уведомления с проверкой подписи, возвраты, выводы.
Без зависимостей. `Paydex` — синхронный (Django, Flask), `AsyncPaydex` — для aiogram, FastAPI, aiohttp.

```sh
pip install https://paydex.pro/downloads/paydex-1.0.0-py3-none-any.whl
```

## Бот на aiogram

```python
from paydex import AsyncPaydex
from paydex.aiohttp import webhook_handler

paydex = AsyncPaydex(PAYDEX_SECRET_KEY, PAYDEX_WEBHOOK_SECRET)

# оплата
inv = await paydex.create_invoice("199.00", f"tg{user_id}-{int(time.time())}", description="VPN на месяц")
# кнопка с url=inv["url"]; кнопка «Проверить оплату» → await paydex.get_invoice(inv["id"])

# уведомления: обработчик сам проверит подпись и перечитает счёт из API
async def on_event(event, invoice):
    if invoice and invoice["status"] == "paid":
        await give_access(invoice["orderId"])   # может прийти повторно — выдавайте один раз

app.router.add_post("/paydex/webhook", webhook_handler(paydex, on_event))
```

Полный пример бота с тарифами, кнопками и защитой от двойной выдачи — `examples/aiogram_bot.py`.

## Сайт (Django / Flask)

```python
paydex = Paydex(PAYDEX_SECRET_KEY, PAYDEX_WEBHOOK_SECRET)
inv = paydex.create_invoice("1500.00", f"order-{order.id}", successUrl="https://shop.example/thanks")
return redirect(inv["url"])

# webhook view
try:
    res = paydex.confirm_webhook(request.body, request.headers)
except WebhookSignatureError:
    return HttpResponse(status=401)
if res["invoice"] and res["invoice"]["status"] == "paid":
    mark_paid(res["invoice"]["orderId"], res["invoice"]["amount"])
return HttpResponse("ok")
```

Суммы — строкой или `Decimal` (`"1500.00"`), float не принимается.
Ошибки — `PaydexError` с полями `status`, `code` (`validation`, `order_id_conflict`, `not_found`…) и `message`.
Сетевые сбои, 5xx и 429 для чтения и создания счёта повторяются сами (до 2 раз).

Методы: `create_invoice`, `get_invoice`, `find_invoice_by_order_id`, `list_invoices`, `iter_invoices`, `start_invoice`,
`refund_invoice`, `wait_for_invoice`, `get_refund`, `get_methods`, `get_balance`, `create_payout`, `get_payout`,
`list_payouts`, `verify_webhook`, `parse_webhook`, `confirm_webhook`, `request`.

Документация: https://paydex.pro/docs/sdk
