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

# Клієнти та приклади

Кожен клієнт — один файл без зовнішніх залежностей. Скопіюйте його в проєкт — і у вас є підпис запитів, створення й читання рахунку та перевірка вебхука.

### 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/uk/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` і мережевих помилок.
- Не працюють у браузері та мобільному застосунку — лише на сервері: там зберігається секрет.
