Clients en voorbeelden
Elke client is één bestand zonder externe dependencies. Kopieer het naar uw project en u kunt requests ondertekenen, facturen aanmaken en opvragen en webhooks verifiëren.
Node.js
Node 22+. Klassen CoineticClient, CoineticError, functie verifyWebhook.
PHP
PHP 8.1+, extensies curl en json. \Cryptopay\Client, \Cryptopay\verify_webhook.
Python
Python 3.9+, alleen de standaardbibliotheek. CoineticClient, verify_webhook.
Wat erin zit
| Functie | Node.js | PHP | Python | Go |
|---|---|---|---|---|
| Request ondertekenen | signRequest | sign_request | sign_request | SignRequest |
| Factuur aanmaken | createInvoice | createInvoice | create_invoice | CreateInvoice |
| Factuur opvragen | getInvoice | getInvoice | get_invoice | GetInvoice |
| Webhook verifiëren | verifyWebhook | verify_webhook | verify_webhook | VerifyWebhook |
| Statussen ‘klaar om te leveren’ | PAID_STATUSES | PAID_STATUSES | PAID_STATUSES | PaidStatuses |
De technische namen van bestanden en klassen (cryptopay.*, CryptopayClient) zijn historisch en veranderen niet; in Node.js en Python zijn er de aliassen CoineticClient en CoineticError.
Alle vier getest op dezelfde referentiewaarden
De handtekeningen van requests en webhooks komen bij alle clients overeen met de referentiewaarden. Schrijft u een client in een andere taal, zorg dan eerst dat u daarop uitkomt: zo vindt u een fout in de handtekening het snelst.
Minimale flow
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) # anders 400/401
if seen(event.id): return 200 # herhaalde levering
inv = client.getInvoice(event.data.invoice_id) # extra controle
if inv.status in PAID_STATUSES: grantOnce(inv.order_id)
return 200Wat de clients niet doen
- Ze bewaren geen secrets — sleutel en secret komen van buitenaf, uit omgevingsvariabelen of een secret manager.
- Ze bewaren geen verwerkte
X-Webhook-Id's — dat doet uw database. - Ze zetten bedragen niet om in getallen: alle bedragen zijn strings.
- Ze herhalen requests niet zelf — herhaal met dezelfde
Idempotency-Keybij429,5xxen netwerkfouten. - Ze werken niet in de browser of in een mobiele app — alleen op de server: daar staat het secret.