Integre o Dodo Payments ao GoHighLevel (GHL) usando links de pagamento sem código, checkout em overlay ou checkout inline, e automatize o fulfillment com webhooks.
GoHighLevel (GHL) é uma plataforma completa de CRM e marketing que inclui funis, sites, e-mail/SMS e automação (“Workflows”). O GHL não lista o Dodo Payments como um processador integrado, então você conecta os dois de uma destas três formas, dependendo de quanto deseja incorporar o checkout e de quanto código pode escrever.Em todas as abordagens, o fulfillment é tratado da mesma forma. O Dodo envia eventos de webhook para um Inbound Webhook Workflow do GHL, que adiciona uma tag ao contato, concede acesso e envia confirmações.
O cliente é redirecionado para o checkout hospedado do Dodo
A maioria dos usuários do GHL, lançamento mais rápido
B. Checkout em overlay
Código personalizado e um backend
Um modal é aberto sobre a página do GHL
Equipes que querem checkout na página sem sair do funil
C. Checkout inline
Código personalizado e um backend
Formulário de checkout incorporado à página
UX totalmente incorporada e com a marca
Não conhece este processo? Comece pela Abordagem A (Links de pagamento). Ela não exige código, funciona para todos os usuários do GHL e leva apenas alguns minutos. As abordagens B e C precisam de um backend para criar checkout sessions e são destinadas a equipes familiarizadas com código.
Uma conta do Dodo Payments com pelo menos um produto criado.
Uma conta do GoHighLevel com um funil, site ou workflow.
Acesso a Settings → Webhooks (e a Settings → Developer para obter uma API key) no dashboard do Dodo.
Para as abordagens B e C: um pequeno backend ou endpoint serverless para criar checkout sessions.
O GHL exige um connected domain para publicar um funil. Durante a criação, use o Preview do funil para testar. Observe que o JavaScript personalizado (abordagens B e C) geralmente é executado apenas na página publicada em um domínio real, não no Preview.
Esta é a camada de automação. Configure-a uma vez e ela funcionará independentemente da abordagem de checkout escolhida.
1
Create the workflow
Na sub-account do GHL, abra Automation no menu à esquerda (isso abre a aba Workflows). Clique em Create workflow e escolha Start from Scratch.
2
Add the Inbound Webhook trigger
No builder, clique em Add new trigger. No painel Add trigger, pesquise por webhook e selecione Inbound webhook (listado em Triggers → Events). Copie a Webhook URL gerada.
3
Register the webhook in Dodo
No dashboard do Dodo, acesse Settings → Webhooks, adicione um novo endpoint e cole a URL do Inbound Webhook do GHL. Faça uma compra de teste para que o GHL capture um payload de exemplo e você possa mapear os campos (e-mail do cliente, produto, valor, status).
4
Add fulfillment actions
De volta ao workflow do GHL, adicione ações com base no evento, como find/create contact by email, add a tag, grant course/membership access e send a confirmation email. Em seguida, Publish o workflow.
Os pagamentos são processados no Dodo, portanto não aparecerão na aba Payments do GHL. Reconcilie-os no GHL usando o workflow de webhook acima e trate o webhook como a fonte de verdade para conceder acesso, não o redirecionamento do navegador, pois o cliente pode fechar a aba antes de retornar.
Adicione um link de pagamento do Dodo a qualquer botão do GHL, CTA de funil, botão de página de pedido, e-mail ou SMS.
1
Create a product and copy its payment link
No dashboard do Dodo, acesse Products → Add Product, defina o name e o price, escolha one-time ou subscription e clique em Save. Abra o produto e copie o Payment Link (formato: https://checkout.dodopayments.com/buy/{product_id}).
2
Add the link to your GHL button
Edite seu funil ou página do site, selecione o Buy / Checkout button, defina a ação como Open URL / Website e cole seu link de pagamento do Dodo.
3
Set a success page (optional)
Defina a return URL do produto no Dodo como uma página de agradecimento do GHL, para que os clientes retornem ao funil após o pagamento.
Você pode preencher previamente e bloquear os dados do cliente ou adicionar tracking usando parâmetros de query do payment link. Isso é útil para passar um ID de funil ou oferta como metadata, que poderá ser lido novamente a partir do webhook.
Abordagem B: Checkout em overlay (código personalizado)
Abre o checkout do Dodo como um modal overlay na página do GHL usando o Checkout SDK via CDN. Requer um backend para criar uma checkout session e retornar seu checkoutUrl.
1
Create a backend endpoint that calls the Checkout Sessions API
Esta etapa é obrigatória. O SDK precisa de um checkoutUrl ativo, e sua criação exige sua secret API key. O GHL hospeda apenas páginas estáticas; ele não pode executar essa chamada no lado do servidor por você. Além disso, você nunca deve chamar a Create Checkout Session API diretamente do navegador, pois isso exporia sua secret key no código-fonte da página. Portanto, o checkout overlay e o inline não funcionam apenas com o GHL: você precisa de um backend sob seu controle que crie a session e retorne somente a URL.Qualquer backend pequeno funciona: uma função serverless (Cloudflare Workers, Vercel Functions, AWS Lambda, Supabase Edge Functions e similares) ou um endpoint em um servidor que você já execute. A lógica é a mesma em qualquer plataforma: receber a solicitação, chamar a API do Dodo com sua secret key e retornar o checkout_url.Exemplo de lógica do handler (adapte à plataforma de sua preferência):
Armazene sua API key do Dodo como um secret na plataforma em que fizer o deploy (nunca faça commit dela no código), permita solicitações do seu domínio do GHL (CORS) e disponibilize o endpoint em um domínio sob seu controle, por exemplo, https://api.example.com/create-checkout. Mude para https://live.dodopayments.com/checkouts quando passar para o modo live.
2
Add a Custom Code element in the GHL page builder
Abra a etapa do funil ou a página do site no construtor de páginas do GHL e, em seguida:
Clique no ícone + no canto superior esquerdo do builder para abrir Quick Add.
Selecione Elements na lista de categorias à esquerda.
Encontre Custom Code (também exibido como HTML) e arraste-o para a página.
Cole o código abaixo no editor de código do elemento e salve.
<!-- 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
O Custom JS é executado na página publicada (connected domain), mas nem sempre no Preview. Publique e clique em Pay Now para confirmar que o overlay é aberto.
Incorpora o formulário de checkout dentro da página do GHL (sem redirecionamento e sem popup) usando o mesmo SDK com um container de mount. Assim como a abordagem B, requer um backend para criar a session.
1
Create a backend endpoint that calls the Checkout Sessions API
O requisito é o mesmo do overlay e também é obrigatório: criar uma session exige sua secret API key, portanto isso deve acontecer no lado do servidor. O GHL não pode fazer isso sozinho. Reutilize o mesmo endpoint de backend descrito acima na seção Overlay Checkout (qualquer função serverless pequena ou servidor sob seu controle) que chama a Create Checkout Session API e retorna { checkoutUrl }.
2
Add a container and SDK via Custom Code
No construtor de páginas do GHL:
Clique no ícone + no canto superior esquerdo do builder para abrir Quick Add.
Selecione Elements na lista de categorias à esquerda.
Encontre Custom Code (também exibido como HTML) e arraste-o para a página onde deseja que o formulário de checkout apareça.
Cole o código abaixo no editor de código do elemento e salve.
Para usar Apple Pay no checkout inline, verifique seu domínio. Hospede o arquivo de associação e registre o domínio no dashboard.
O inline é a opção mais complexa no GHL. Ele requer código personalizado, um backend, uma página publicada em um domínio real e, para o Apple Pay, a verificação do domínio. Se você não precisa de um formulário totalmente incorporado, prefira a abordagem A ou B.
Adicionar uma tag de pago ao contato, conceder acesso, enviar confirmação
subscription.active
Uma subscription é ativada
Conceder acesso à membership, iniciar o workflow de onboarding
subscription.renewed
Um pagamento de renovação é realizado
Estender o acesso para o próximo ciclo
subscription.on_hold
Uma renovação falha
Acionar um workflow de cobrança ou lembrete
subscription.cancelled / subscription.expired
A subscription termina
Remover o acesso, adicionar a tag de churn
Todo webhook inclui o e-mail do cliente. Use a ação find/create contact by email do GHL para associar o pagamento ao contato correto. Para ver a lista completa, consulte o Webhook Event Guide.
Mantenha o Dodo no Test Mode, use o cartão de teste 4242 4242 4242 4242 (qualquer data de validade futura e qualquer CVC), conclua uma compra e confirme que o workflow do GHL é acionado e aplica a tag ou concede o acesso.
2
Go live
Mude o Dodo para Live Mode e atualize o endpoint de webhook do modo live. O que mais precisará ser alterado depende da sua abordagem:
Links de pagamento (A): substitua pelo link de pagamento live do produto.
Checkout overlay (B): aponte seu backend para https://live.dodopayments.com/checkouts usando sua live API key e defina o mode do SDK como "live" na chamada Initialize.
Checkout inline (C): igual ao overlay, pois usa o mesmo endpoint de backend e a mesma inicialização do SDK.
Em seguida, faça uma compra real de ponta a ponta para confirmar.
Trate o webhook como a fonte de verdade para conceder acesso. Tome ações com base em payment.succeeded / subscription.active, não no redirecionamento do navegador.
Verifique a autenticidade do webhook usando o header webhook-signature (Standard Webhooks), para que somente eventos genuínos do Dodo acionem o fulfillment no GHL.
Verifique se o endpoint de webhook do Dodo aponta para a URL correta do Inbound Webhook do GHL, se o workflow está publicado e se o trigger capturou um payload de exemplo para que o mapeamento dos campos exista.
Overlay or inline button does nothing
O Custom JS geralmente é executado apenas na página publicada (domínio real), não no Preview. Confirme se a página está publicada, se o SDK <script> foi carregado e se checkoutUrl é uma URL de session válida retornada pelo seu backend.
Contact not created or not matched
Verifique se seu workflow usa find/create contact by email e se o campo de e-mail foi mapeado a partir do payload do webhook.
Payment isn't showing in GHL's Payments tab
Isso é esperado. Os pagamentos são processados no Dodo, portanto reconcilie-os no GHL usando o workflow de webhook.