Integriere Dodo Payments mit GoHighLevel (GHL) über No-Code-Zahlungslinks, Overlay-Checkout oder Inline-Checkout und automatisiere die Fulfillment-Prozesse mit Webhooks.
GoHighLevel (GHL) ist eine All-in-One-CRM- und Marketingplattform für Funnels, Websites, E-Mail/SMS und Automatisierung („Workflows“). GHL führt Dodo Payments nicht als integrierten Zahlungsdienstleister auf. Daher verbindest du beide Systeme je nach gewünschtem Integrationsgrad und deinen Programmierkenntnissen auf eine von drei Arten.Bei jedem Ansatz wird das Fulfillment auf dieselbe Weise abgewickelt. Dodo sendet Webhook-Ereignisse an einen Inbound Webhook Workflow in GHL, der den Kontakt mit einem Tag versieht, Zugriff gewährt und Bestätigungen versendet.
Der Kunde wird zum gehosteten Checkout von Dodo weitergeleitet
Die meisten GHL-Nutzer, schnellster Start
B. Overlay Checkout
Benutzerdefinierter Code plus Backend
Ein Modal wird über deiner GHL-Seite geöffnet
Teams, die einen Checkout auf der Seite möchten, ohne den Funnel zu verlassen
C. Inline Checkout
Benutzerdefinierter Code plus Backend
Das Checkout-Formular ist in die Seite eingebettet
Vollständig eingebettete, markengerechte UX
Neu dabei? Beginne mit Ansatz A (Payment Links). Er erfordert keinen Code, funktioniert für jeden GHL-Nutzer und ist in wenigen Minuten eingerichtet. Für die Ansätze B und C wird ein Backend zum Erstellen von Checkout-Sitzungen benötigt. Sie richten sich an Teams, die mit Code vertraut sind.
Ein Dodo Payments-Konto mit mindestens einem erstellten Produkt.
Ein GoHighLevel-Konto mit einem Funnel, einer Website oder einem Workflow.
Zugriff auf Settings → Webhooks (und Settings → Developer für einen API-Schlüssel) in deinem Dodo-Dashboard.
Für die Ansätze B und C: ein kleines Backend oder serverloser Endpoint zum Erstellen von Checkout-Sitzungen.
GHL benötigt eine verbundene Domain, um einen Funnel zu veröffentlichen. Verwende während der Erstellung die Preview des Funnels zum Testen. Beachte, dass benutzerdefiniertes JavaScript (Ansätze B und C) normalerweise nur auf der veröffentlichten Seite unter einer echten Domain ausgeführt wird, nicht in der Preview.
Dies ist die Automatisierungsebene. Richte sie einmal ein, dann funktioniert sie unabhängig davon, welchen Checkout-Ansatz du wählst.
1
Create the workflow
Öffne in deinem GHL-Sub-Account im linken Menü Automation (dadurch wird der Tab Workflows geöffnet). Klicke auf Create workflow und wähle anschließend Start from Scratch.
2
Add the Inbound Webhook trigger
Klicke im Builder auf Add new trigger. Suche im Bereich Add trigger nach webhook und wähle Inbound webhook (unter Triggers → Events) aus. Kopiere die dabei generierte Webhook URL.
3
Register the webhook in Dodo
Gehe im Dodo-Dashboard zu Settings → Webhooks, füge einen neuen Endpoint hinzu und füge die GHL-Inbound-Webhook-URL ein. Führe einen Testkauf durch, damit GHL eine Beispiel-Payload erfasst und du Felder (Kunden-E-Mail, Produkt, Betrag, Status) zuordnen kannst.
4
Add fulfillment actions
Füge im GHL-Workflow abhängig vom Ereignis Aktionen hinzu, z. B. find/create contact by email, add a tag, grant course/membership access und send a confirmation email. Veröffentliche anschließend den Workflow.
Zahlungen werden über Dodo verarbeitet und erscheinen daher nicht im Payments-Tab von GHL. Gleiche sie mithilfe des oben beschriebenen Webhook-Workflows mit GHL ab und behandle den Webhook als maßgebliche Quelle für die Zugriffsgewährung, nicht die Browser-Weiterleitung, da ein Kunde den Tab schließen kann, bevor er zurückkehrt.
Füge einen Dodo-Zahlungslink zu jedem GHL-Button, Funnel-CTA, Button auf einer Bestellseite, E-Mail oder SMS hinzu.
1
Create a product and copy its payment link
Gehe im Dodo-Dashboard zu Products → Add Product, lege name und price fest, wähle one-time oder subscription aus und klicke auf Save. Öffne das Produkt und kopiere den Payment Link (Format: https://checkout.dodopayments.com/buy/{product_id}).
2
Add the link to your GHL button
Bearbeite deine Funnel- oder Website-Seite, wähle den Buy / Checkout button aus, lege die Aktion Open URL / Website fest und füge deinen Dodo-Zahlungslink ein.
3
Set a success page (optional)
Lege in Dodo die return URL des Produkts auf eine GHL-Dankeseite fest, damit Kunden nach der Zahlung wieder in deinen Funnel gelangen.
Du kannst Kundendaten vorausfüllen und sperren oder mithilfe von Query-Parametern für Payment Links Tracking hinzufügen. Das ist nützlich, um eine Funnel- oder Angebots-ID als Metadaten zu übergeben, die du später aus dem Webhook auslesen kannst.
Öffnet den Dodo-Checkout mithilfe des Checkout SDK über CDN als Modal-Overlay auf deiner GHL-Seite. Erfordert ein Backend zum Erstellen einer Checkout-Sitzung und zur Rückgabe von checkoutUrl.
1
Create a backend endpoint that calls the Checkout Sessions API
Dieser Schritt ist nicht optional. Das SDK benötigt eine gültige checkoutUrl, und zum Erstellen einer solchen wird dein geheimer API-Schlüssel benötigt. GHL hostet nur statische Seiten und kann diesen serverseitigen Aufruf nicht für dich ausführen. Außerdem darfst du die Create Checkout Session API niemals direkt vom Browser aus aufrufen, da dadurch dein geheimer Schlüssel im Quelltext der Seite offengelegt würde. Overlay- und Inline-Checkout funktionieren daher nicht mit GHL allein: Du benötigst ein Backend unter deiner Kontrolle, das die Sitzung erstellt und nur die URL zurückgibt.Jedes kleine Backend ist geeignet: eine serverlose Funktion (Cloudflare Workers, Vercel Functions, AWS Lambda, Supabase Edge Functions und ähnliche) oder ein Endpoint auf einem bereits von dir betriebenen Server. Die Logik ist überall gleich: Anfrage empfangen, Dodo’s API mit deinem geheimen Schlüssel aufrufen und checkout_url zurückgeben.Beispiel für die Handler-Logik (an deine bevorzugte Plattform anpassen):
Speichere deinen Dodo-API-Schlüssel als Secret auf der Plattform, auf der du deployest (niemals in den Code übernehmen), erlaube Anfragen von deiner GHL-Domain (CORS) und route den Endpoint unter einer von dir kontrollierten Domain, z. B. https://api.example.com/create-checkout. Wechsle zu https://live.dodopayments.com/checkouts, sobald du in den Live-Modus wechselst.
2
Add a Custom Code element in the GHL page builder
Öffne deinen Funnel-Schritt oder deine Website-Seite im GHL Page Builder und gehe dann wie folgt vor:
Klicke oben links im Builder auf das +-Symbol, um Quick Add zu öffnen.
Wähle Elements aus der linken Kategorienliste aus.
Suche Custom Code (wird auch als HTML angezeigt) und ziehe es auf die Seite.
Füge den folgenden Code in den Code-Editor des Elements ein und speichere ihn.
<!-- Load the Dodo Checkout SDK --><script src="https://cdn.jsdelivr.net/npm/dodopayments-checkout@latest/dist/index.js"></script><script> DodoPaymentsCheckout.DodoPayments.Initialize({ mode: "test", // change to "live" in production displayType: "overlay", onEvent: (event) => console.log("Checkout event:", event), }); async function openDodoCheckout() { // calls the backend endpoint from the previous step, creating a fresh session per click const res = await fetch("https://api.example.com/create-checkout", { method: "POST" }); const { checkoutUrl } = await res.json(); DodoPaymentsCheckout.DodoPayments.Checkout.open({ checkoutUrl }); }</script><button onclick="openDodoCheckout()">Pay Now</button>
3
Publish and test on your domain
Benutzerdefiniertes JS wird normalerweise nur auf der veröffentlichten Seite (verbundene Domain) ausgeführt, nicht immer in der Preview. Veröffentliche die Seite und klicke anschließend auf Pay Now, um zu bestätigen, dass sich das Overlay öffnet.
Bettet das Checkout-Formular mithilfe desselben SDK und eines Mount-Containers in deine GHL-Seite ein (keine Weiterleitung, kein Popup). Wie bei Ansatz B wird ein Backend zum Erstellen der Sitzung benötigt.
1
Create a backend endpoint that calls the Checkout Sessions API
Es gelten dieselben Anforderungen wie beim Overlay, und auch diese sind nicht optional: Zum Erstellen einer Sitzung wird dein geheimer API-Schlüssel benötigt, daher muss dies serverseitig erfolgen. GHL kann dies nicht eigenständig erledigen. Verwende denselben Backend-Endpoint wie im oben beschriebenen Abschnitt Overlay Checkout (jede kleine serverlose Funktion oder jeder Server unter deiner Kontrolle), der die Create Checkout Session API aufruft und { checkoutUrl } zurückgibt.
2
Add a container and SDK via Custom Code
Im GHL Page Builder:
Klicke oben links im Builder auf das +-Symbol, um Quick Add zu öffnen.
Wähle Elements aus der linken Kategorienliste aus.
Suche Custom Code (wird auch als HTML angezeigt) und ziehe es an die Stelle auf der Seite, an der das Checkout-Formular erscheinen soll.
Füge den folgenden Code in den Code-Editor des Elements ein und speichere ihn.
Für Apple Pay beim Inline-Checkout musst du deine Domain verifizieren. Hoste die Zuordnungsdatei und registriere die Domain im Dashboard.
Inline ist die aufwendigste Option in GHL. Sie benötigt benutzerdefinierten Code, ein Backend, eine veröffentlichte Seite unter einer echten Domain und (für Apple Pay) eine Domain-Verifizierung. Wenn du kein vollständig eingebettetes Formular benötigst, solltest du Ansatz A oder B bevorzugen.
Kontakt als bezahlt markieren, Zugriff gewähren, Bestätigung senden
subscription.active
Ein Abonnement wird aktiviert
Mitgliedschaft gewähren, Onboarding-Workflow starten
subscription.renewed
Eine Verlängerungszahlung wird eingezogen
Zugriff für den nächsten Zyklus verlängern
subscription.on_hold
Eine Verlängerung ist fehlgeschlagen
Dunning- oder Erinnerungs-Workflow auslösen
subscription.cancelled / subscription.expired
Abonnement endet
Zugriff entfernen, als abgewandert markieren
Jeder Webhook enthält die Kunden-E-Mail. Verwende die GHL-Aktion find/create contact by email, um die Zahlung dem richtigen Kontakt zuzuordnen. Eine vollständige Liste findest du im Webhook Event Guide.
Lass Dodo im Test Mode, verwende die Testkarte 4242 4242 4242 4242 (beliebiges zukünftiges Ablaufdatum und beliebiger CVC), schließe einen Kauf ab und bestätige, dass der GHL-Workflow ausgelöst wird und das Tag oder der Zugriff angewendet wird.
2
Go live
Wechsle Dodo in den Live Mode und aktualisiere den Webhook-Endpoint für den Live-Modus. Was sich sonst ändert, hängt von deinem Ansatz ab:
Payment Links (A): Ersetze den Link durch den Live-Zahlungslink des Produkts.
Overlay Checkout (B): Richte dein Backend auf https://live.dodopayments.com/checkouts mit deinem Live-API-Schlüssel aus und setze mode des SDK im Aufruf INLINE_CODE_PLACEHOLDER_f5db7a37f0e5ebbcf_END auf "live".
Inline Checkout (C): Wie beim Overlay, da derselbe Backend-Endpoint und dieselbe SDK-Initialisierung verwendet werden.
Führe anschließend einen echten End-to-End-Kauf durch, um dies zu bestätigen.
Behandle den Webhook als maßgebliche Quelle für die Zugriffsgewährung. Reagiere auf payment.succeeded / subscription.active, nicht auf die Browser-Weiterleitung.
Überprüfe die Authentizität des Webhooks mithilfe des Headers webhook-signature (Standard Webhooks), damit nur echte Dodo-Ereignisse das Fulfillment in GHL auslösen.
Prüfe, ob der Dodo-Webhook-Endpoint auf die richtige GHL-Inbound-Webhook-URL verweist, der Workflow veröffentlicht ist und der Trigger eine Beispiel-Payload erfasst hat, sodass das Feld-Mapping vorhanden ist.
Overlay or inline button does nothing
Benutzerdefiniertes JS wird normalerweise nur auf der veröffentlichten Seite (echte Domain) ausgeführt, nicht in der Preview. Bestätige, dass die Seite veröffentlicht ist, das SDK <script> geladen wurde und checkoutUrl eine gültige Sitzungs-URL von deinem Backend ist.
Contact not created or not matched
Stelle sicher, dass dein Workflow find/create contact by email verwendet und das E-Mail-Feld aus der Webhook-Payload zugeordnet wird.
Payment isn't showing in GHL's Payments tab
Das ist erwartungsgemäß. Zahlungen werden über Dodo verarbeitet. Gleiche sie daher mithilfe des Webhook-Workflows mit GHL ab.