Documentatie / Naslag

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.

cryptopay.js downloaden ↓

PHP

PHP 8.1+, extensies curl en json. \Cryptopay\Client, \Cryptopay\verify_webhook.

Cryptopay.php downloaden ↓

Python

Python 3.9+, alleen de standaardbibliotheek. CoineticClient, verify_webhook.

cryptopay.py downloaden ↓

Go

Go 1.22+, alleen de standaardbibliotheek. Package cryptopayclient.

cryptopay.go downloaden ↓

Wat erin zit

FunctieNode.jsPHPPythonGo
Request ondertekenensignRequestsign_requestsign_requestSignRequest
Factuur aanmakencreateInvoicecreateInvoicecreate_invoiceCreateInvoice
Factuur opvragengetInvoicegetInvoiceget_invoiceGetInvoice
Webhook verifiërenverifyWebhookverify_webhookverify_webhookVerifyWebhook
Statussen ‘klaar om te leveren’PAID_STATUSESPAID_STATUSESPAID_STATUSESPaidStatuses

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

pseudocode
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 200

Wat 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-Key bij 429, 5xx en netwerkfouten.
  • Ze werken niet in de browser of in een mobiele app — alleen op de server: daar staat het secret.