---
title: Клиенты: Node, PHP, Python, Go
description: Готовые клиенты API Coinetic — один файл без внешних зависимостей для Node.js, PHP, Python и Go: подпись запросов, счета, проверка вебхуков.
url: https://coinetic.money/ru/docs/sdks/
lang: ru
---

# Клиенты и примеры

Каждый клиент — один файл без внешних зависимостей. Скопируйте его в проект — и у вас есть подпись запросов, создание и чтение счёта и проверка вебхука.

### Node.js

Node 22+. Классы `CoineticClient`, `CoineticError`, функция `verifyWebhook`.

    Скачать cryptopay.js ↓

### PHP

PHP 8.1+, расширения curl и json. `\Cryptopay\Client`, `\Cryptopay\verify_webhook`.

    Скачать Cryptopay.php ↓

### Python

Python 3.9+, только стандартная библиотека. `CoineticClient`, `verify_webhook`.

    Скачать cryptopay.py ↓

### Go

Go 1.22+, только стандартная библиотека. Пакет `cryptopayclient`.

    Скачать cryptopay.go ↓

## Что внутри

| Функция | Node.js | PHP | Python | Go |
| --- | --- | --- | --- | --- |
| Подпись запроса | `signRequest` | `sign_request` | `sign_request` | `SignRequest` |
| Создать счёт | `createInvoice` | `createInvoice` | `create_invoice` | `CreateInvoice` |
| Получить счёт | `getInvoice` | `getInvoice` | `get_invoice` | `GetInvoice` |
| Проверить вебхук | `verifyWebhook` | `verify_webhook` | `verify_webhook` | `VerifyWebhook` |
| Статусы «можно выдавать» | `PAID_STATUSES` | `PAID_STATUSES` | `PAID_STATUSES` | `PaidStatuses` |

Технические имена файлов и классов (`cryptopay.*`, `CryptopayClient`) — исторические и не меняются; в Node.js и Python есть псевдонимы `CoineticClient` и `CoineticError`.

## Все четыре проверены на одних эталонах

Подписи запросов и вебхуков у всех клиентов совпадают с [эталонными значениями](https://coinetic.money/ru/docs/authentication/#test-vectors). Пишете клиент на другом языке — сначала добейтесь совпадения с ними: так быстрее всего найти ошибку в подписи.

## Минимальный поток

`псевдокод`

```
invoice = client.createInvoice({order_id, price_amount: "3.00", price_currency: "USD",
                                return_url: "https://shop.example/orders/42"},
                               idempotencyKey = "order-42")
redirect(invoice.checkout_url)

on POST /webhooks/coinetic (raw body!):
    event = verifyWebhook(WEBHOOK_SECRET, headers, rawBody)   # иначе 400/401
    if seen(event.id): return 200                             # повторная доставка
    inv = client.getInvoice(event.data.invoice_id)            # перепроверка
    if inv.status in PAID_STATUSES: grantOnce(inv.order_id)
    return 200
```

## Чего клиенты не делают

- Не хранят секреты — ключ и секрет передаются извне, из переменных окружения или секрет-менеджера.
- Не хранят обработанные `X-Webhook-Id` — это ваша база.
- Не превращают суммы в числа: все суммы — строки.
- Не повторяют запросы сами — повторяйте с тем же `Idempotency-Key` при `429`, `5xx` и сетевых ошибках.
- Не работают в браузере и мобильном приложении — только на сервере: там живёт секрет.
