Krypto-Zahlungen für Shops mit digitalen Gütern
Wie ein Shop für Schlüssel, Konten, Downloads und Abos Krypto akzeptiert: Lieferablauf, Teilzahlungen, wiederholte Webhooks und was Sie Kunden versprechen.

Ein Shop, der Lizenzschlüssel, Spielkonten, Downloads oder Zugänge verkauft, hat eine ungewöhnliche Eigenschaft: Das Produkt wird in dem Moment geliefert, in dem das Geld eintrifft, ohne dass jemand dazwischen steht. Genau deshalb passt Krypto dazu, und genau deshalb zählen die Details des Zahlungsablaufs. Dieser Leitfaden erklärt, was sich ändert, wie Sie die Lieferung an den Zahlungsstatus koppeln und welche Fehler digitale Shops Bestand kosten.
Warum digitale Güter und Krypto zusammenpassen
Drei Eigenschaften digitaler Güter decken sich mit der Funktionsweise von Krypto-Zahlungen:
- Die Lieferung ist sofort, also muss es auch die Zahlung sein. Ein Kunde, der auf seinen Schlüssel wartet, will nicht auf die Abwicklung einer Bank warten. Eine Krypto-Zahlung ist endgültig, sobald das Netzwerk sie bestätigt, und Ihr System kann sofort liefern.
- Die Zielgruppe ist schon da. Käufer von Software-Schlüsseln, Spielgegenständen, VPN-Zugängen, Hosting und ähnlichen Produkten besitzen oft Stablecoins und zahlen lieber damit, auch Kunden aus Ländern, in denen die Karten Ihres Marktes nicht funktionieren.
- Es gibt keine Kartenrückbuchungen. Der Absender kann eine Krypto-Überweisung nicht rückgängig machen. Für einen Shop, der mit angefochtenen Kartenzahlungen bei günstigen, sofort gelieferten Artikeln schlechte Erfahrungen gemacht hat, ist das eine echte Veränderung. Es bedeutet auch, dass eine Erstattung Ihre Entscheidung und eine Überweisung ist, die Sie selbst senden; schreiben Sie Ihre Erstattungsregeln also vor dem Start.
Die Preisgestaltung bleibt einfach: Sie legen den Preis in US-Dollar fest, und der Kunde zahlt den Gegenwert in dem Asset und Netzwerk, das er auf der Zahlungsseite wählt.
Der Ablauf vom Warenkorb zum gelieferten Produkt
Der Weg einer Bestellung sieht so aus:
- Der Kunde legt ein Produkt in den Warenkorb und gibt eine E-Mail-Adresse an (oder meldet sich an).
- An der Kasse wählt er „Mit Krypto bezahlen“. Ihr Server erstellt eine Zahlung für die Bestellung und erhält einen Link zur gehosteten Zahlungsseite.
- Sie leiten den Kunden auf diese Seite weiter. Er wählt ein Asset und ein Netzwerk und zahlt den genauen Betrag aus seiner eigenen Wallet.
- Ist die Zahlung abgeschlossen, ruft das Gateway Ihren Webhook auf.
- Ihr Server markiert die Bestellung als bezahlt, nimmt einen Schlüssel oder gewährt Zugang und sendet ihn per E-Mail und zeigt ihn auf der Bestellseite an.
Ihr Shop erzeugt nie eine Adresse, überwacht keine Blockchain und vergleicht keine Beträge. Er tut zwei Dinge: eine Zahlung erstellen und auf den Endstatus reagieren. Die Schritt-für-Schritt-Version mit Code finden Sie unter Krypto-Zahlungen auf einer Website akzeptieren.
Erstellen Sie die Zahlung mit Ihrer eigenen Bestellnummer
Erstellen Sie die Zahlung aus Ihrem Backend mit einem einzigen POST an https://api.qvard.com/api/v1/payment. Die Anfrage enthält Ihren Schlüssel im Header Authorization: Bearer und ein JSON mit der Bestellnummer als id, dem price in US-Dollar und optional einer paymentSystemId, wenn die Seite mit einem bestimmten Asset und Netzwerk geöffnet werden soll. Die Antwort ist 201 mit einer redirectUrl.
Verwenden Sie eine Bestellnummer, die in Ihrem System vor der Zahlung existiert, und eine pro Kauf. Läuft die Anfrage in ein Timeout und senden Sie sie mit derselben id für dieselbe Zahlungsmethode erneut, erhalten Sie die bestehende Zahlung statt einer zweiten; ein erneuter Versuch ist also sicher.
Erstellen Sie die Zahlung erst, wenn der Kunde auf Bezahlen geklickt hat, nicht schon beim Aufbau des Warenkorbs. Sonst tauchen abgebrochene Warenkörbe als Haufen unbezahlter Zahlungen auf.
Nur bei vollständiger Zahlung liefern, und nur einmal
Das ist die Regel, die Ihren Bestand schützt. Eine Zahlung hat vier Status: wait (erstellt), partial (der Kunde hat weniger als erforderlich gesendet), completed (der volle Betrag ist angekommen) und rejected. Qvard ruft Ihren Webhook auf, wenn eine Zahlung abgeschlossen ist, mit der von Ihnen gesendeten id und dem status.
Daraus ergeben sich zwei Anforderungen an Ihren Handler:
- Handeln Sie nur bei completed. Geben Sie nie einen Schlüssel heraus, weil der Kunde auf Ihre Seite zurückgekehrt ist, und nie bei einem Teilbetrag. Den Zahlungsnachweis liefert der Webhook, nicht der Browser.
- Seien Sie idempotent. Der Webhook wird wiederholt, bis Ihr Endpunkt genau mit HTTP 200 antwortet (fünf Versuche in rund sechs Minuten), und eine Wiederholung kann eintreffen, nachdem die erste erfolgreich war. Geben Sie den Schlüssel heraus und markieren Sie die Bestellung in einer einzigen Datenbanktransaktion als geliefert, und überspringen Sie bereits gelieferte Bestellungen. Sonst kann Sie eine Zahlung zwei Schlüssel kosten.
Prüfen Sie die Signatur X-Qvard-Signature jedes Webhooks: HMAC-SHA256 mit Ihrem geheimen Schlüssel, in konstanter Zeit verglichen; weisen Sie Abweichungen ab. Mehr dazu unter Krypto-Zahlungs-Webhooks absichern.
// Called from the Qvard webhook handler after the X-Qvard-Signature check.
async function onQvardEvent({ id, status }) {
const order = await db.orders.findById(id);
if (!order) return; // unknown order: ignore
if (status !== 'completed') return; // deliver only on a full payment
if (order.deliveredAt) return; // the webhook can arrive twice
// One transaction: take a key and mark the order, so a retry cannot take a second key.
await db.transaction(async (tx) => {
const key = await tx.licenseKeys.takeFree(order.productId);
await tx.orders.update(order.id, { state: 'paid', deliveredAt: new Date(), keyId: key.id });
await mailer.send(order.email, 'Your purchase', 'Key: ' + key.value);
});
}Zeigen Sie dem Kunden, was passiert
Rücksprung-URLs nach der Zahlung sind noch nicht verfügbar; ein Kunde, der bezahlt hat, kehrt also von selbst auf Ihre Seite zurück, oft einige Sekunden bevor Ihr Webhook verarbeitet ist. Bereiten Sie sich auf diesen Moment vor:
- Geben Sie jeder Bestellung eine Seite, die den aktuellen Status zeigt: wartet auf Zahlung, bezahlt und geliefert oder ein Problem.
- Lassen Sie die Seite sich selbst aktualisieren, solange der Status „wartend“ ist, damit der Schlüssel ohne Neuladen erscheint.
- Senden Sie den Schlüssel zusätzlich per E-Mail. Menschen schließen Tabs, und die E-Mail ist die Kopie, nach der sie später suchen.
- Wenn die Bestellung noch nicht als bezahlt markiert ist, sagen Sie das klar und bitten Sie den Kunden, nicht zweimal zu zahlen.
Die meisten Support-Tickets in digitalen Shops lauten „Ich habe bezahlt und nichts bekommen“. Eine Statusseite und eine E-Mail senken sie am stärksten.
Unterzahlung und abgelaufene Bestellungen
Krypto-Kunden senden manchmal etwas weniger als verlangt, weil eine Auszahlungsgebühr der Börse vom Betrag abgezogen wurde oder weil sie später zahlen als geplant. Entscheiden Sie vorab, was Sie dann tun.
- Teilzahlung. Der Status ist
partial. Liefern Sie nicht. Üblich ist, die Bestellung offen zu halten und den Kunden zu bitten, den Rest zu senden, oder zu erstatten und zu stornieren. Wählen Sie eine Variante und teilen Sie sie dem Kunden auf der Bestellseite mit. - Kurs und Zeit. Der Kurs auf der Zahlungsseite ist eine Stunde lang festgesetzt, der Betrag ändert sich also nicht, während der Kunde zahlt. Halten Sie den Bestand für die Bestellung mindestens so lange vor und geben Sie ihn frei, wenn die Bestellung nie bezahlt wird.
- Begrenzter Bestand. Ist nur noch ein Schlüssel übrig, reservieren Sie ihn beim Erstellen der Zahlung und geben Sie ihn bei Ablauf frei; sonst können zwei Kunden denselben Schlüssel bezahlen.
Halten Sie die Logik klein. Ein Shop mit genau drei Ergebnissen (bezahlt, teilweise bezahlt, nicht bezahlt) lässt sich leichter betreiben als einer mit einem Dutzend Sonderfällen.
Was Sie Kunden sagen sollten
Eine klare Zahlungsseite konvertiert besser als eine clevere. Nennen Sie neben dem Button:
- welche Assets und Netzwerke Sie akzeptieren (siehe unterstützte Coins) und dass der Kunde in dem Netzwerk zahlen muss, das er auf der Zahlungsseite gewählt hat;
- dass die Lieferung nach abgeschlossener Zahlung automatisch erfolgt und wo der Schlüssel erscheint;
- Ihre Erstattungsregel in einem Satz, da der Kunde eine Krypto-Zahlung nicht rückgängig machen kann.
Nennen Sie außerdem den Preis in Dollar und lassen Sie die Zahlungsseite den genauen Betrag im gewählten Asset anzeigen. Nennen Sie den Krypto-Betrag nicht selbst auf der Produktseite; er ändert sich mit dem Kurs.
Was bei Qvard heute fertig ist und was nicht
Seien Sie realistisch, was die Integration angeht. Qvard arbeitet über seine API: Ihr Shop erstellt die Zahlung und empfängt den Webhook. Ein fertiges Plugin für Shop-Plattformen gibt es noch nicht, Zahlungslinks und eine separate Sandbox sind in Entwicklung, und Kunden kehren nach der Zahlung von selbst auf Ihre Seite zurück. Für einen Shop mit Entwickler oder einer Freelancer-Stunde ist das ein kleines Stück Code. Lesen Sie die Entwicklerdokumentation und die Integrationsübersicht und öffnen Sie eine Demo-Rechnung, um zu sehen, was Ihr Kunde sehen wird.
Zum Geld: Die Mittel liegen auf Ihrem Qvard-Guthaben und Sie lassen sie auf Ihre eigene Wallet auszahlen; die Auszahlung kostet nur die Netzwerkgebühr, und es gibt keine Abo-Gebühr. Eine Auszahlung auf ein Bankkonto in Fiat ist nicht verfügbar.
FAQ
Kann ich das Produkt nach einer Krypto-Zahlung automatisch liefern?
Ja. Qvard ruft Ihren Webhook auf, wenn die Zahlung abgeschlossen ist, und Ihr Server kann dann einen Schlüssel nehmen oder Zugang gewähren und ihn an den Kunden senden. Liefern Sie nur beim Status completed und machen Sie den Handler sicher gegen doppelte Ausführung.
Was passiert, wenn der Kunde weniger als den vollen Betrag sendet?
Die Zahlung erhält den Status partial, und es wird kein Abschluss-Webhook gesendet. Liefern Sie nicht. Bitten Sie den Kunden, den Rest zu senden, oder erstatten Sie ihm das Geld, wie es Ihre Regel vorsieht.
Gibt es bei Krypto-Zahlungen Rückbuchungen?
Nein. Der Absender kann eine Krypto-Überweisung nicht rückgängig machen. Das schützt Sie vor angefochtenen Kartenzahlungen, bedeutet aber auch, dass Sie Erstattungen selbst senden; legen Sie also von Anfang an eine Erstattungsregel fest.
Kann ich Preise in Dollar festlegen?
Ja, der Preis wird in US-Dollar festgelegt. Der Kunde zahlt den Gegenwert in dem Asset und Netzwerk, das er auf der Zahlungsseite wählt, zu einem für eine Stunde festgesetzten Kurs.
Gibt es ein Plugin für meine Shop-Plattform?
Noch nicht. Heute läuft die Integration über die API: eine Anfrage zum Erstellen einer Zahlung und ein Webhook zum Empfang des Ergebnisses.

