Dokumentation / Referenz

Clients und Beispiele

Jeder Client ist eine einzige Datei ohne externe Abhängigkeiten. Kopieren Sie sie ins Projekt – schon haben Sie Anfragesignatur, Erstellen und Lesen von Rechnungen sowie Webhook-Prüfung.

Node.js

Node 22+. Klassen CoineticClient, CoineticError, Funktion verifyWebhook.

cryptopay.js herunterladen ↓

PHP

PHP 8.1+, Erweiterungen curl und json. \Cryptopay\Client, \Cryptopay\verify_webhook.

Cryptopay.php herunterladen ↓

Python

Python 3.9+, nur Standardbibliothek. CoineticClient, verify_webhook.

cryptopay.py herunterladen ↓

Go

Go 1.22+, nur Standardbibliothek. Paket cryptopayclient.

cryptopay.go herunterladen ↓

Was enthalten ist

FunktionNode.jsPHPPythonGo
Anfrage signierensignRequestsign_requestsign_requestSignRequest
Rechnung erstellencreateInvoicecreateInvoicecreate_invoiceCreateInvoice
Rechnung abrufengetInvoicegetInvoiceget_invoiceGetInvoice
Webhook prüfenverifyWebhookverify_webhookverify_webhookVerifyWebhook
Status „auslieferbar“PAID_STATUSESPAID_STATUSESPAID_STATUSESPaidStatuses

Die technischen Datei- und Klassennamen (cryptopay.*, CryptopayClient) sind historisch bedingt und bleiben unverändert; in Node.js und Python gibt es die Aliase CoineticClient und CoineticError.

Alle vier gegen dieselben Referenzwerte getestet

Die Anfrage- und Webhook-Signaturen aller Clients stimmen mit den Referenzwerten überein. Schreiben Sie einen Client in einer anderen Sprache, bringen Sie ihn zuerst mit diesen Werten in Übereinstimmung: So finden Sie Signaturfehler am schnellsten.

Minimaler Ablauf

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)   # sonst 400/401
    if seen(event.id): return 200                             # erneute Zustellung
    inv = client.getInvoice(event.data.invoice_id)            # Gegenprüfung
    if inv.status in PAID_STATUSES: grantOnce(inv.order_id)
    return 200

Was die Clients nicht tun

  • Sie speichern keine Secrets – Schlüssel und Secret werden von außen übergeben, aus Umgebungsvariablen oder dem Secret-Manager.
  • Sie speichern keine verarbeiteten X-Webhook-Id – das ist Aufgabe Ihrer Datenbank.
  • Sie wandeln Beträge nicht in Zahlen um: Alle Beträge sind Strings.
  • Sie wiederholen Anfragen nicht selbst – wiederholen Sie mit demselben Idempotency-Key bei 429, 5xx und Netzwerkfehlern.
  • Sie laufen nicht im Browser oder in mobilen Apps – nur auf dem Server: Dort liegt das Secret.