@dodopayments/astro fornece ao seu projeto Astro três handlers de endpoint. Checkout retorna URLs de checkout, CustomerPortal envia um cliente ao Customer Portal e Webhooks verifica eventos de webhook e os encaminha para o seu código.
Checkout Handler
Crie URLs de checkout com fluxos de checkout estático, dinâmico e de sessão de checkout.
Customer Portal
Permita que os clientes gerenciem suas assinaturas e seus dados.
Webhooks
Receba e processe eventos de webhook do Dodo Payments.
Instalação
1
Install the Package
Execute este comando na raiz do seu projeto:O pacote lista o Astro 4 ou 5 e o
zod 3.25 ou posterior como peer dependencies.2
Set Up Environment Variables
Crie um arquivo
.env na raiz do seu projeto. Crie a API key em Developer → API Keys. Adicione o endpoint de webhook em Developer → Webhooks e copie o Signing secret para DODO_PAYMENTS_WEBHOOK_KEY:DODO_PAYMENTS_RETURN_URL é o local para onde os clientes são encaminhados após o checkout. Se você não passar um ambiente, os handlers usarão live_mode. Uma API key do modo de teste funciona somente com test_mode.Exemplos de Route Handler
Os exemplos são endpoints de servidor do Astro em
src/pages/api/. Endpoints que chamam o Dodo Payments precisam ser renderizados sob demanda, portanto adicione um server adapter ao seu projeto Astro. No modo de saída padrão static do Astro, os endpoints são renderizados no momento do build. Por isso, cada exemplo exporta prerender = false para renderizar o endpoint a cada requisição.- Checkout Handler
- Customer Portal Handler
- Webhook Handler
Use este handler para adicionar o checkout do Dodo Payments ao seu app. O handler
GET disponibiliza o checkout estático. O handler POST disponibiliza sessões de checkout ou checkout dinâmico quando você define type: "dynamic". Um arquivo de endpoint pode exportar apenas um handler POST, portanto o exemplo de checkout dinâmico pressupõe que você definiu type: "dynamic".Checkout Route Handler
O checkout handler é compatível com as três formas de receber pagamentos com o Dodo Payments:- Static Payment Links: URLs compartilháveis que coletam pagamentos sem código.
- Dynamic Payment Links: links de pagamento que você gera com detalhes personalizados. Eles usam endpoints deprecated.
- Checkout Sessions: checkout hospedado com um carrinho de produtos, dados do cliente e opções de personalização. Este é o fluxo recomendado.
Checkout aceita estas opções:
O handler disponibiliza o checkout estático para requisições
GET. Para requisições POST, ele cria um link de pagamento dinâmico quando type é dynamic e uma sessão de checkout nos demais casos.
Static Checkout (GET)
Static Checkout (GET)
Parâmetros de consulta compatíveis
string
obrigatório
Identificador do produto, por exemplo
?productId=pdt_nZuwz45WAs64n3l07zpQR.integer
padrão:"1"
Quantidade do produto.
string
Nome completo do cliente. Ignorado se
firstName ou lastName for fornecido.string
Primeiro nome do cliente.
string
Sobrenome do cliente.
string
Endereço de e-mail do cliente.
string
País do cliente, como um código ISO 3166-1 alpha-2.
string
Endereço da rua do cliente.
string
Cidade do cliente.
string
Estado ou província do cliente.
string
CEP ou código postal do cliente.
boolean
Defina como
true para desabilitar o campo de nome completo.boolean
Defina como
true para desabilitar o campo de primeiro nome.boolean
Defina como
true para desabilitar o campo de sobrenome.boolean
Defina como
true para desabilitar o campo de e-mail.boolean
Defina como
true para desabilitar o campo de país.boolean
Defina como
true para desabilitar o campo de linha de endereço.boolean
Defina como
true para desabilitar o campo de cidade.boolean
Defina como
true para desabilitar o campo de estado.boolean
Defina como
true para desabilitar o campo de CEP.string
Moeda do pagamento, por exemplo
USD.boolean
padrão:"true"
Mostra ou oculta o seletor de moeda.
number
Fixa o valor cobrado, em unidades maiores da moeda, por exemplo
12.5 para $12.50. Funciona somente com produtos Pay What You Want e é ignorado se estiver abaixo do preço mínimo do produto.boolean
padrão:"true"
Mostra ou oculta a seção de descontos.
string
Qualquer parâmetro de consulta que comece com
metadata_ é enviado ao checkout como metadata, por exemplo metadata_orderId=123.email com disableEmail=true. O handler adiciona returnUrl da configuração ao link como redirect_url.Formato da resposta
O checkout estático retorna uma resposta JSON com a URL de checkout. No modo de teste, a URL usatest.checkout.dodopayments.com:Dynamic Checkout (POST)
Dynamic Checkout (POST)
- Envie os parâmetros como um corpo JSON em uma requisição POST.
- Compatível com pagamentos únicos e recorrentes. O handler recupera o produto e cria uma assinatura se o produto for recorrente; caso contrário, cria um pagamento único.
- O corpo precisa de
billing(comstreet,city,state,countryezipcode) ecustomer, além deproduct_idouproduct_cart. As assinaturas precisam deproduct_id. - Para ver todos os campos de corpo compatíveis, consulte:
Formato da resposta
O checkout dinâmico retorna uma resposta JSON com o link de pagamento como URL de checkout:Checkout Sessions (POST)
Checkout Sessions (POST)
As sessões de checkout criam um checkout hospedado para compras únicas e assinaturas, com controle total sobre a personalização.
product_cart é o único campo obrigatório e precisa de pelo menos um produto. Se o corpo não tiver return_url, o handler usará returnUrl da configuração.Cada checkout_url funciona uma vez e expira após 24 horas ou após 15 minutos quando você passa confirm: true. Uma sessão criada com payment_method_id não retorna checkout_url; portanto, o handler responde com 400.Para obter mais detalhes e consultar todos os campos compatíveis, veja o Guia de integração de Checkout Sessions.Formato da resposta
As sessões de checkout retornam uma resposta JSON com a URL de checkout:Customer Portal Route Handler
O route handler do Customer Portal cria uma sessão do Customer Portal para o cliente informado e redireciona o navegador para ela.CustomerPortal aceita as mesmas opções bearerToken e environment que Checkout.
Parâmetros de consulta
string
obrigatório
O ID do cliente para a sessão do portal, por exemplo
?customer_id=cus_123.boolean
Se definido como
true, o Dodo Payments também enviará o link do portal ao cliente por e-mail.customer_id estiver ausente e 500 se não for possível criar a sessão do portal.
Webhook Route Handler
O webhook route handler verifica cada requisição com o secret do webhook, passado comowebhookKey, antes de executar seu código:
- Method: somente requisições POST são compatíveis. Outros métodos retornam 405.
- Signature Verification: verifica os headers
webhook-id,webhook-timestampewebhook-signaturecomwebhookKey, seguindo a especificação Standard Webhooks. Retorna 401 se a verificação falhar. - Payload Validation: valida o payload com o Zod. Retorna 400 para um payload inválido.
- Error Handling:
- 401: assinatura inválida
- 400: payload inválido
- 500: erro interno durante a verificação
- Event Routing: chama
onPayloadpara cada evento, depois chama o handler correspondente ao tipo do evento e retorna 200.