@dodopayments/astro stellt deinem Astro-Projekt drei Endpunkt-Handler bereit. Checkout gibt Checkout-URLs zurück, CustomerPortal sendet einen Kunden zum Customer Portal und Webhooks überprüft Webhook-Ereignisse und leitet sie an deinen Code weiter.
Checkout Handler
Erstelle Checkout-URLs mit statischen, dynamischen und Checkout-Session-Abläufen.
Customer Portal
Ermögliche es Kunden, ihre Abonnements und Daten zu verwalten.
Webhooks
Empfange und verarbeite Dodo Payments Webhook-Ereignisse.
Installation
1
Install the Package
Führe diesen Befehl im Stammverzeichnis deines Projekts aus:Das Paket führt Astro 4 oder 5 sowie
zod 3.25 oder höher als Peer-Dependencies auf.2
Set Up Environment Variables
Erstelle eine Datei
.env im Stammverzeichnis deines Projekts. Erstelle den API-Schlüssel unter Developer → API Keys. Füge deinen Webhook-Endpunkt unter Developer → Webhooks hinzu und kopiere das Signing secret in DODO_PAYMENTS_WEBHOOK_KEY:DODO_PAYMENTS_RETURN_URL ist das Ziel, zu dem Kunden nach dem Checkout weitergeleitet werden. Wenn du keine Umgebung übergibst, verwenden die Handler live_mode. Ein API-Schlüssel für den Testmodus funktioniert nur mit test_mode.Beispiele für Route-Handler
Die Beispiele sind Astro-Server-Endpunkte in
src/pages/api/. Endpunkte, die Dodo Payments aufrufen, müssen bei Bedarf gerendert werden. Füge daher einen Server-Adapter zu deinem Astro-Projekt hinzu. Im standardmäßigen static-Ausgabemodus von Astro werden Endpunkte zur Build-Zeit gerendert. Deshalb exportiert jedes Beispiel prerender = false, um den Endpunkt stattdessen bei jeder Anfrage zu rendern.- Checkout Handler
- Customer Portal Handler
- Webhook Handler
Verwende diesen Handler, um Dodo Payments checkout zu deiner App hinzuzufügen. Der Handler
GET stellt statischen Checkout bereit. Der Handler POST stellt Checkout-Sessions bereit oder dynamischen Checkout, wenn du type: "dynamic" festlegst. Eine Endpunktdatei kann nur einen POST-Handler exportieren. Daher setzt das Beispiel für dynamischen Checkout voraus, dass du type: "dynamic" festlegst.Checkout-Route-Handler
Der Checkout-Handler unterstützt alle drei Möglichkeiten, Zahlungen mit Dodo Payments entgegenzunehmen:- Statische Payment Links: Teilbare URLs, die ohne Code Zahlungen einziehen.
- Dynamische Payment Links: Payment Links, die du mit benutzerdefinierten Daten generierst. Sie verwenden veraltete Endpunkte.
- Checkout-Sessions: Gehosteter Checkout mit einem Produktwarenkorb, Kundendaten und Anpassungsoptionen. Dies ist der empfohlene Ablauf.
Checkout akzeptiert diese Optionen:
Der Handler stellt statischen Checkout für
GET-Anfragen bereit. Für POST-Anfragen erstellt er einen dynamischen Payment Link, wenn type den Wert dynamic hat, und andernfalls eine Checkout-Session.
Static Checkout (GET)
Static Checkout (GET)
Unterstützte Query-Parameter
Legt den berechneten Betrag in den Haupteinheiten der Währung fest, zum Beispiel
12.5 für $12.50. Funktioniert nur mit Pay What You Want-Produkten und wird ignoriert, wenn der Betrag unter dem Mindestpreis des Produkts liegt.Jeder Query-Parameter, der mit
metadata_ beginnt, wird als Metadaten an den Checkout übergeben, zum Beispiel metadata_orderId=123.email zusammen mit disableEmail=true. Der Handler fügt returnUrl aus seiner Konfiguration als redirect_url zum Link hinzu.Antwortformat
Statischer Checkout gibt eine JSON-Antwort mit der Checkout-URL zurück. Im Testmodus verwendet die URLtest.checkout.dodopayments.com:Dynamic Checkout (POST)
Dynamic Checkout (POST)
- Sende die Parameter als JSON-Body in einer POST-Anfrage.
- Unterstützt sowohl einmalige als auch wiederkehrende Zahlungen. Der Handler ruft das Produkt ab und erstellt anschließend ein Abonnement, wenn es sich um ein wiederkehrendes Produkt handelt, andernfalls eine einmalige Zahlung.
- Der Body benötigt
billing(mitstreet,city,state,countryundzipcode) undcustomersowieproduct_idoderproduct_cart. Abonnements benötigenproduct_id. - Eine Übersicht aller unterstützten Body-Felder findest du unter:
Antwortformat
Dynamischer Checkout gibt eine JSON-Antwort mit dem Payment Link als Checkout-URL zurück:Checkout Sessions (POST)
Checkout Sessions (POST)
Checkout-Sessions erstellen einen gehosteten Checkout für einmalige Käufe und Abonnements mit vollständiger Kontrolle über die Anpassung.
product_cart ist das einzige erforderliche Feld und benötigt mindestens ein Produkt. Wenn der Body kein return_url enthält, verwendet der Handler returnUrl aus seiner Konfiguration.Jedes checkout_url kann einmal verwendet werden und läuft nach 24 Stunden ab oder nach 15 Minuten, wenn du confirm: true übergibst. Eine mit payment_method_id erstellte Session gibt kein checkout_url zurück, daher antwortet der Handler mit 400.Weitere Informationen und eine Übersicht aller unterstützten Felder findest du im Checkout Sessions Integration Guide.Antwortformat
Checkout-Sessions geben eine JSON-Antwort mit der Checkout-URL zurück:Customer-Portal-Route-Handler
Der Customer-Portal-Route-Handler erstellt eine Customer-Portal-Session für den angegebenen Kunden und leitet den Browser dorthin weiter.CustomerPortal akzeptiert dieselben Optionen bearerToken und environment wie Checkout.
Query-Parameter
Wenn auf
true gesetzt, sendet Dodo Payments dem Kunden zusätzlich den Portal-Link per E-Mail.customer_id fehlt, und 500, wenn die Portal-Session nicht erstellt werden kann.
Webhook-Route-Handler
Der Webhook-Route-Handler überprüft jede Anfrage mit deinem Webhook-Secret, das alswebhookKey übergeben wird, bevor er deinen Code ausführt:
- Methode: Es werden nur POST-Anfragen unterstützt. Andere Methoden führen zu 405.
- Signaturüberprüfung: Überprüft die Header
webhook-id,webhook-timestampundwebhook-signaturemitwebhookKeygemäß der Standard-Webhooks-Spezifikation. Gibt 401 zurück, wenn die Überprüfung fehlschlägt. - Payload-Validierung: Validiert den Payload mit Zod. Gibt 400 für einen ungültigen Payload zurück.
- Fehlerbehandlung:
- 401: Ungültige Signatur
- 400: Ungültiger Payload
- 500: Interner Fehler bei der Überprüfung
- Ereignisweiterleitung: Ruft
onPayloadfür jedes Ereignis auf, anschließend den Handler für den Ereignistyp, und gibt 200 zurück.