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.
PHP
PHP 8.1+, Erweiterungen curl und json. \Cryptopay\Client, \Cryptopay\verify_webhook.
Python
Python 3.9+, nur Standardbibliothek. CoineticClient, verify_webhook.
Was enthalten ist
| Funktion | Node.js | PHP | Python | Go |
|---|---|---|---|---|
| Anfrage signieren | signRequest | sign_request | sign_request | SignRequest |
| Rechnung erstellen | createInvoice | createInvoice | create_invoice | CreateInvoice |
| Rechnung abrufen | getInvoice | getInvoice | get_invoice | GetInvoice |
| Webhook prüfen | verifyWebhook | verify_webhook | verify_webhook | VerifyWebhook |
| Status „auslieferbar“ | PAID_STATUSES | PAID_STATUSES | PAID_STATUSES | PaidStatuses |
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
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 200Was 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-Keybei429,5xxund Netzwerkfehlern. - Sie laufen nicht im Browser oder in mobilen Apps – nur auf dem Server: Dort liegt das Secret.