Документація / Довідник

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

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

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.jsPHPPythonGo
Підпис запитуsignRequestsign_requestsign_requestSignRequest
Створити рахунокcreateInvoicecreateInvoicecreate_invoiceCreateInvoice
Отримати рахунокgetInvoicegetInvoiceget_invoiceGetInvoice
Перевірити вебхукverifyWebhookverify_webhookverify_webhookVerifyWebhook
Статуси «можна видавати»PAID_STATUSESPAID_STATUSESPAID_STATUSESPaidStatuses

Технічні назви файлів і класів (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 і мережевих помилок.
  • Не працюють у браузері та мобільному застосунку — лише на сервері: там зберігається секрет.