Документація / Довідник
Клієнти та приклади
Кожен клієнт — один файл без зовнішніх залежностей. Скопіюйте його в проєкт — і у вас є підпис запитів, створення й читання рахунку та перевірка вебхука.
Node.js
Node 22+. Класи CoineticClient, CoineticError, функція verifyWebhook.
PHP
PHP 8.1+, розширення curl і json. \Cryptopay\Client, \Cryptopay\verify_webhook.
Python
Python 3.9+, лише стандартна бібліотека. CoineticClient, verify_webhook.
Що всередині
| Функція | 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.
Усі чотири перевірено на тих самих еталонах
Підписи запитів і вебхуків в усіх клієнтів збігаються з еталонними значеннями. Пишете клієнт іншою мовою — спершу досягніть збігу з ними: так найшвидше знайти помилку в підписі.
Мінімальний потік
псевдокод
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і мережевих помилок. - Не працюють у браузері та мобільному застосунку — лише на сервері: там зберігається секрет.