Este é o pacote oficial do Dodo Payments para Flutter (
dodopayments_checkout
no pub.dev). Também existe um pacote separado desenvolvido pela comunidade; consulte
Projetos da comunidade.Checkout Sessions API
Crie o checkout_url que este SDK abrirá a partir do seu backend.
Mobile Integration Guide
Veja como isso se encaixa no fluxo completo de pagamentos mobile.
dodopayments_checkout abre o checkout hospedado do Dodo em
SFSafariViewController no iOS e em uma Chrome Custom Tab no Android — os mesmos
núcleos nativos usados pelos SDKs independentes de iOS e
Android. Toda a lógica do checkout reside
nesses núcleos nativos; a camada Dart encaminha a chamada por meio de um canal
Pigeon tipado. Ela não armazena nenhuma chave de API e
nunca chama a API do Dodo Payments.
Requer Flutter 3.44+ / Dart 3.12+, iOS 16+ e Android minSdk 23.
Instalação
1
Add the Dependency
pubspec.yaml
2
Register a Callback URL Scheme
- iOS
- Android
Adicione um tipo de URL para seu esquema em Em seguida, encaminhe as URLs recebidas (por exemplo, usando
ios/Runner/Info.plist:ios/Runner/Info.plist
app_links) para o SDK, pois
SFSafariViewController não consegue capturar sua própria URL de retorno:É seguro encaminhar todas as URLs aqui.
handleOpenURL só atua em URLs
que correspondem ao seu returnUrl registrado e resolve false para qualquer outra URL.Uso
O que o resultado significa
CheckoutStatus
obrigatório
Um entre
succeeded, failed, cancelled, pending, expired.String?
Definido quando a URL de retorno incluiu um. Exiba-o na interface; não o use
para conceder acesso. Consulte Verificar o pagamento abaixo.
String?
Definido para checkouts de assinatura.
List<String>?
Definido quando o checkout inclui produtos com chaves de licença.
String?
Definido quando o checkout captura um e-mail.
Map<String, String>
Todos os parâmetros de consulta da URL de retorno, sem alterações.
Verificar o pagamento
Webhooks
O Dodo Payments chama seu backend quando um pagamento é bem-sucedido ou uma assinatura é ativada.
Get Payment Detail
Consulte
paymentId com sua chave secreta para verificar diretamente o status.result.status.
Personalização da aparência
Personalize a barra de ferramentas, os botões e o esquema de cores do navegador de checkout por meio decustomization em CheckoutParams. As opções são agrupadas por plataforma porque
Custom Tab do Android e SFSafariViewController do iOS expõem diferentes
controles nativos. Todos os campos são opcionais; omitir customization usa a aparência padrão de cada
plataforma.
Android — Custom Tab
Android — Custom Tab
Color?
Cor de fundo da barra de ferramentas.
Cor da barra de navegação.
Cor do divisor acima da barra de navegação.
CloseButtonStyle
standard exibe o ícone de sistema “X”; back desenha uma seta de voltar.CloseButtonPosition
Em qual lado da barra de ferramentas o botão de fechar aparece.
Exibe o ícone de compartilhamento da barra de ferramentas.
bool
Exibe o título da página abaixo da URL na barra de ferramentas.
bool
Permite que a barra de ferramentas se oculte automaticamente conforme a página é rolada.
bool
Exibe “Adicionar esta página aos favoritos” no menu de opções.
bool
Exibe “Baixar página” no menu de opções.
BrowserColorScheme
Força a aparência clara ou escura, independentemente da configuração do sistema do dispositivo.
iOS — SFSafariViewController
iOS — SFSafariViewController
DismissButtonStyle
Rótulo ou ícone do botão de dispensar.
PresentationStyle
pageSheet é apresentado como um cartão que pode ser dispensado deslizando; fullScreen cobre a tela inteira.bool
Permite que a barra de ferramentas seja recolhida durante a rolagem. Visível somente quando
presentationStyle é fullScreen — pageSheet mantém as barras fixas, independentemente desta configuração.BrowserColorScheme
Força a aparência clara ou escura, independentemente da configuração do sistema do dispositivo.
Erros
start lança CheckoutException somente em caso de uso incorreto ou falha da plataforma.
Um pagamento cancelado ou recusado é sempre um resultado, nunca uma exceção.
invalidCheckoutUrl(INVALID_CHECKOUT_URL): não é uma URL de sessão decheckout.dodopayments.com.invalidReturnUrl(INVALID_RETURN_URL): não é uma URL absoluta válida.alreadyInProgress(ALREADY_IN_PROGRESS): um checkout já está em execução.platformError(PLATFORM_ERROR): falha inesperada da plataforma.
Sessões abandonadas
Se o aplicativo for encerrado durante o checkout, recupere a sessão na próxima inicialização e
reconcilie-a com seu backend.
Relacionados
Mobile Integration Guide
O mesmo contrato para Android, iOS e React Native.
Community Projects
Também existe um pacote separado para Flutter, criado pela comunidade.