Pular para o conteúdo principal

Instalação

1

Instale o pacote

Execute o seguinte comando na raiz do seu projeto:
npm install @dodopayments/hono
2

Configure as variáveis de ambiente

Crie um arquivo .env na raiz do seu projeto:
DODO_PAYMENTS_API_KEY=your-api-key
DODO_PAYMENTS_RETURN_URL=https://yourapp.com/success
DODO_PAYMENTS_WEBHOOK_KEY=your-webhook-secret
DODO_PAYMENTS_ENVIRONMENT="test_mode" or "live_mode""
Nunca comite seu arquivo .env ou segredos no controle de versão.

Exemplos de Manipuladores de Rota

Todos os exemplos assumem que você está usando o Hono App Router.
Use este manipulador para integrar o checkout dos pagamentos Dodo em seu aplicativo Hono. Suporta fluxos estáticos (GET), dinâmicos (POST) e de sessão (POST).
  // route.ts
  import { Checkout } from '@dodopayments/hono';
  import Hono from 'hono'

  const app = new Hono()

  app.get(
  "/api/checkout",
  Checkout({
      bearerToken: process.env.DODO_PAYMENTS_API_KEY,
      environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
      returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
      type: 'static'
  })
  );

  app.post(
  "/api/checkout",
  Checkout({
      bearerToken: process.env.DODO_PAYMENTS_API_KEY,
      environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
      returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
      type: 'dynamic'
  })
  );
  
  app.post(
  "/api/checkout",
  Checkout({
      bearerToken: process.env.DODO_PAYMENTS_API_KEY,
      environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
      returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
      type: 'session'
  })
  );
curl --request GET \
--url 'https://example.com/api/checkout?productId=pdt_fqJhl7pxKWiLhwQR042rh' \
--header 'User-Agent: insomnia/11.2.0' \
--cookie mode=test
curl --request POST \
--url https://example.com/api/checkout \
--header 'Content-Type: application/json' \
--header 'User-Agent: insomnia/11.2.0' \
--cookie mode=test \
--data '{
"billing": {
  "city": "Texas",
  "country": "US",
  "state": "Texas",
  "street": "56, hhh",
  "zipcode": "560000"
},
"customer": {
  "email": "[email protected]",
  	"name": "test"
},
"metadata": {},
"payment_link": true,
  "product_id": "pdt_QMDuvLkbVzCRWRQjLNcs",
  "quantity": 1,
  "billing_currency": "USD",
  "discount_code": "IKHZ23M9GQ",
  "return_url": "https://example.com",
  "trial_period_days": 10
}'
curl --request POST \
--url https://example.com/api/checkout \
--header 'Content-Type: application/json' \
--header 'User-Agent: insomnia/11.2.0' \
--cookie mode=test \
--data '{
"product_cart": [
  {
    "product_id": "pdt_QMDuvLkbVzCRWRQjLNcs",
    "quantity": 1
  }
],
"customer": {
  "email": "[email protected]",
  "name": "test"
},
"return_url": "https://example.com/success"
}'

Manipulador de Rota de Checkout

Os pagamentos Dodo suportam três tipos de fluxos de pagamento para integrar pagamentos em seu site, este adaptador suporta todos os tipos de fluxos de pagamento.
  • Links de Pagamento Estáticos: URLs compartilháveis instantaneamente para coleta de pagamento rápida e sem código.
  • Links de Pagamento Dinâmicos: Gere programaticamente links de pagamento com detalhes personalizados usando a API ou SDKs.
  • Sessões de Checkout: Crie experiências de checkout seguras e personalizáveis com carrinhos de produtos pré-configurados e detalhes do cliente.

Parâmetros de Consulta Suportados

productId
string
required
Identificador do produto (por exemplo, ?productId=pdt_nZuwz45WAs64n3l07zpQR).
quantity
integer
Quantidade do produto.
fullName
string
Nome completo do cliente.
firstName
string
Primeiro nome do cliente.
lastName
string
Último nome do cliente.
email
string
Endereço de e-mail do cliente.
country
string
País do cliente.
addressLine
string
Linha de endereço do cliente.
city
string
Cidade do cliente.
state
string
Estado/província do cliente.
zipCode
string
Código postal do cliente.
disableFullName
boolean
Desabilitar campo de nome completo.
disableFirstName
boolean
Desabilitar campo de primeiro nome.
disableLastName
boolean
Desabilitar campo de último nome.
disableEmail
boolean
Desabilitar campo de e-mail.
disableCountry
boolean
Desabilitar campo de país.
disableAddressLine
boolean
Desabilitar campo de linha de endereço.
disableCity
boolean
Desabilitar campo de cidade.
disableState
boolean
Desabilitar campo de estado.
disableZipCode
boolean
Desabilitar campo de código postal.
paymentCurrency
string
Especifique a moeda de pagamento (por exemplo, USD).
showCurrencySelector
boolean
Mostrar seletor de moeda.
paymentAmount
integer
Especifique o valor do pagamento (por exemplo, 1000 para $10,00).
showDiscounts
boolean
Mostrar campos de desconto.
metadata_*
string
Qualquer parâmetro de consulta que comece com metadata_ será passado como metadados.
Se productId estiver ausente, o manipulador retornará uma resposta 400. Parâmetros de consulta inválidos também resultarão em uma resposta 400.

Formato de Resposta

O checkout estático retorna uma resposta JSON com a URL de checkout:
{
  "checkout_url": "https://checkout.dodopayments.com/..."
}

Formato de Resposta

O checkout dinâmico retorna uma resposta JSON com a URL de checkout:
{
  "checkout_url": "https://checkout.dodopayments.com/..."
}
As sessões de checkout fornecem uma experiência de checkout mais segura e hospedada que gerencia todo o fluxo de pagamento para compras únicas e assinaturas com controle total de personalização.Consulte o Guia de Integração de Sessões de Checkout para mais detalhes e uma lista completa de campos suportados.

Formato de Resposta

As sessões de checkout retornam uma resposta JSON com a URL de checkout:
{
  "checkout_url": "https://checkout.dodopayments.com/session/..."
}

Manipulador de Rota do Portal do Cliente

O Manipulador de Rota do Portal do Cliente permite que você integre perfeitamente o portal do cliente dos pagamentos Dodo em sua aplicação Hono.

Parâmetros de Consulta

customer_id
string
required
O ID do cliente para a sessão do portal (por exemplo, ?customer_id=cus_123).
send_email
boolean
Se definido como true, envia um e-mail ao cliente com o link do portal.
Retorna 400 se customer_id estiver ausente.

Manipulador de Rota de Webhook

  • Método: Apenas solicitações POST são suportadas. Outros métodos retornam 405.
  • Verificação de Assinatura: Verifica a assinatura do webhook usando webhookKey. Retorna 401 se a verificação falhar.
  • Validação de Payload: Validado com Zod. Retorna 400 para payloads inválidos.
  • Tratamento de Erros:
    • 401: Assinatura inválida
    • 400: Payload inválido
    • 500: Erro interno durante a verificação
  • Roteamento de Eventos: Chama o manipulador de eventos apropriado com base no tipo de payload.

Manipuladores de Eventos de Webhook Suportados

onPayload?: (payload: WebhookPayload) => Promise<void>;
onPaymentSucceeded?: (payload: WebhookPayload) => Promise<void>;
onPaymentFailed?: (payload: WebhookPayload) => Promise<void>;
onPaymentProcessing?: (payload: WebhookPayload) => Promise<void>;
onPaymentCancelled?: (payload: WebhookPayload) => Promise<void>;
onRefundSucceeded?: (payload: WebhookPayload) => Promise<void>;
onRefundFailed?: (payload: WebhookPayload) => Promise<void>;
onDisputeOpened?: (payload: WebhookPayload) => Promise<void>;
onDisputeExpired?: (payload: WebhookPayload) => Promise<void>;
onDisputeAccepted?: (payload: WebhookPayload) => Promise<void>;
onDisputeCancelled?: (payload: WebhookPayload) => Promise<void>;
onDisputeChallenged?: (payload: WebhookPayload) => Promise<void>;
onDisputeWon?: (payload: WebhookPayload) => Promise<void>;
onDisputeLost?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionActive?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionOnHold?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionRenewed?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionPlanChanged?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionCancelled?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionFailed?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionExpired?: (payload: WebhookPayload) => Promise<void>;
onLicenseKeyCreated?: (payload: WebhookPayload) => Promise<void>;

Prompt para LLM

Você é um assistente de desenvolvedor Hono especialista. Sua tarefa é guiar um usuário na integração do adaptador @dodopayments/hono em seu projeto Hono existente.

O adaptador @dodopayments/hono fornece manipuladores de rota para Checkout, Portal do Cliente e funcionalidades de Webhook dos pagamentos Dodo, projetados para se conectar diretamente a um aplicativo Hono.

Primeiro, instale o pacote necessário. Use o gerenciador de pacotes apropriado para o projeto do usuário (npm, yarn ou bun):

npm install @dodopayments/hono

---

Aqui está como você deve estruturar sua resposta:

1. Pergunte ao usuário quais funcionalidades ele deseja integrar.

"Quais partes do adaptador @dodopayments/hono você gostaria de integrar em seu projeto? Você pode escolher uma ou mais das seguintes:

- Manipulador de Rota de Checkout (para lidar com checkouts de produtos)
- Manipulador de Rota do Portal do Cliente (para gerenciar assinaturas/detalhes do cliente)
- Manipulador de Rota de Webhook (para receber eventos de webhook dos pagamentos Dodo)
- Todos (integrar os três)"

---

2. Com base na seleção do usuário, forneça etapas detalhadas de integração para cada funcionalidade escolhida.

---

**Se o Manipulador de Rota de Checkout for selecionado:**

**Propósito**: Este manipulador redireciona os usuários para a página de checkout dos pagamentos Dodo.

**Integração**:
Crie duas rotas em seu aplicativo Hono — uma para checkout estático (GET) e uma para checkout dinâmico (POST).

import { Checkout } from '@dodopayments/hono';
import Hono from 'hono'

const app = new Hono()

app.get(
  "/api/checkout",
  Checkout({
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
    returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
    type: 'static'
  })
);

app.post(
  "/api/checkout",
  Checkout({
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
    returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
    type: 'session' // ou 'dynamic' para link dinâmico
  })
);

Opções de Configuração:

    bearerToken: Sua chave de API dos pagamentos Dodo (recomendado armazenar na variável de ambiente DODO_PAYMENTS_API_KEY).

    returnUrl (opcional): URL para redirecionar o usuário após o checkout bem-sucedido.

    environment: "test_mode" ou "live_mode"

    type: "static" (GET) ou "dynamic" (POST) ou "session" (POST)

GET (checkout estático) espera parâmetros de consulta:

    productId (obrigatório)

    quantity, campos do cliente (fullName, email, etc.) e metadados (metadata_*) são opcionais.

POST (checkout dinâmico) espera um corpo JSON com detalhes de pagamento (único ou assinatura). Consulte a documentação para o esquema completo do POST:

    Pagamentos únicos: https://docs.dodopayments.com/api-reference/payments/post-payments

    Assinaturas: https://docs.dodopayments.com/api-reference/subscriptions/post-subscriptions

POST (sessões de checkout) - (Recomendado) Uma experiência de checkout mais personalizável. Retorna JSON com checkout_url: Os parâmetros são enviados como um corpo JSON. Suporta pagamentos únicos e recorrentes. Retorna: {"checkout_url": "https://checkout.dodopayments.com/session/..."}. Para uma lista completa de campos suportados, consulte:

  Guia de Integração de Sessões de Checkout: https://docs.dodopayments.com/developer-resources/checkout-session

Se o Manipulador de Rota do Portal do Cliente for selecionado:

Propósito: Esta rota permite que os clientes gerenciem suas assinaturas através do portal dos pagamentos Dodo.

Integração:

import { Checkout } from '@dodopayments/hono';
import Hono from 'hono'

const app = new Hono()
app.get(
  "/api/customer-portal",
  CustomerPortal({
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: process.env.DODO_PAYMENTS_ENVIRONMENT
  })
);

Parâmetros de Consulta:

    customer_id (obrigatório): por exemplo, ?customer_id=cus_123

    send_email (opcional): se verdadeiro, o cliente recebe o link do portal por e-mail

Retorna 400 se customer_id estiver ausente.

Se o Manipulador de Rota de Webhook for selecionado:

Propósito: Processa eventos de webhook recebidos dos pagamentos Dodo para acionar eventos em seu aplicativo.

Integração:

import Hono from 'hono'
import { Webhooks } from '@dodopayments/hono'

const app = new Hono()
app.post(
  "/api/webhooks",
  Webhooks({
    webhookKey: process.env.DODO_PAYMENTS_WEBHOOK_KEY,
    onPayload: async (payload) => {
      // Manipule o Payload Aqui
      console.log(payload)
    }
  })
);

Recursos:

    Apenas o método POST é permitido — outros retornam 405

    A verificação de assinatura é realizada usando webhookKey. Retorna 401 se inválido.

    Validação de payload baseada em Zod. Retorna 400 se o esquema for inválido.

    Todos os manipuladores são funções assíncronas.

Manipuladores de Eventos de Webhook Suportados:

Você pode passar qualquer um dos seguintes manipuladores:

    onPayload

    onPaymentSucceeded

    onPaymentFailed

    onPaymentProcessing

    onPaymentCancelled

    onRefundSucceeded

    onRefundFailed

    onDisputeOpened, onDisputeExpired, onDisputeAccepted, onDisputeCancelled, onDisputeChallenged, onDisputeWon, onDisputeLost

    onSubscriptionActive, onSubscriptionOnHold, onSubscriptionRenewed, onSubscriptionPaused, onSubscriptionPlanChanged, onSubscriptionCancelled, onSubscriptionFailed, onSubscriptionExpired

    onLicenseKeyCreated

Configuração de Variáveis de Ambiente:

Certifique-se de definir estas variáveis de ambiente em seu projeto:

DODO_PAYMENTS_API_KEY=your-api-key
DODO_PAYMENTS_RETURN_URL=https://yourapp.com/success
DODO_PAYMENTS_WEBHOOK_KEY=your-webhook-secret
DODO_PAYMENTS_ENVIRONMENT="test_mode" ou "live_mode""

Use estas dentro do seu código como:

process.env.DODO_PAYMENTS_API_KEY
process.env.DODO_PAYMENTS_WEBHOOK_KEY

Nota de Segurança: NÃO comite segredos no controle de versão. Use arquivos .env localmente e gerenciadores de segredos em ambientes de implantação (por exemplo, AWS, Vercel, Heroku, etc.).