Esta página aborda o SDK oficial de checkout do Dodo Payments para iOS e Swift. Ele abre o checkout hospedado do Dodo Payments em uma visualização de navegador nativa e retorna um resultado tipado.
Checkout Sessions API
Crie o
checkout_url que este SDK abre a partir do seu backend.Mobile Integration Guide
Veja como este SDK se encaixa no fluxo completo de pagamentos móveis.
SFSafariViewController e retorna um CheckoutResult tipado quando o cliente conclui ou sai do checkout. Ele não armazena nenhuma API key e não contém código de rede, portanto nunca chama a API do Dodo Payments. O checkout é executado na visualização do navegador. O SDK apresenta e fecha essa visualização e lê o resultado da URL de retorno.
Requisitos: iOS 16 ou posterior e Swift 6.2 ou posterior (o pacote declara swift-tools-version: 6.2). O SDK não tem dependências de terceiros.
Instalação
1
Add the Package
No Xcode, acesse File → Add Package Dependencies e insira a URL do pacote:Selecione a versão 1.1.0 ou posterior. A personalização da aparência requer a versão 1.1.0.Para adicionar o pacote em O produto da biblioteca é
Package.swift, em vez disso, adicione esta dependência:Package.swift
DodoCheckout.2
Register a Callback URL Scheme
Registre um esquema de URL para que o iOS encaminhe a URL de retorno do checkout de volta ao seu app. Adicione um tipo de URL ao seu Você também pode adicionar o tipo de URL no Xcode em Info → URL Types.Use este esquema no
Info.plist:Info.plist
returnUrl que você passa ao SDK, por exemplo myapp://checkout/return, e defina a mesma URL como return_url da sessão de checkout quando o seu backend criar a sessão. O SDK compara a URL de retorno pelo esquema, host e caminho. A URL não precisa carregar uma página real.Uso
DodoCheckout.start é uma função async que é executada no ator principal. Passe checkoutUrl como um URL criado a partir do checkout_url retornado pelo seu backend:
onEvent recebe eventos .opened, .returnReceived e .closed. Seus valores name são checkout.opened, checkout.return_received e checkout.closed. Use os eventos apenas para logging, nunca para decidir o resultado.
Encaminhamento da URL de retorno
SFSafariViewController não pode capturar sua própria URL de retorno, então o iOS abre a URL no seu app. Encaminhe cada URL recebida para DodoCheckout.handleOpenURL(_:). Em um app sem cenas, chame-o a partir do application(_:open:options:) do app delegate.
- SwiftUI
- SceneDelegate
Você pode encaminhar todas as URLs.
handleOpenURL atua apenas em uma URL que corresponde ao returnUrl do checkout em andamento e retorna true para ela. Para qualquer outra URL, ele retorna false; portanto, trate essa URL por conta própria.O significado do resultado
O SDK criaCheckoutResult a partir dos parâmetros de consulta na URL de retorno.
CheckoutStatus
obrigatório
Um dos cinco valores:
succeeded: a URL de retorno temstatus=succeeded(pagamento único) oustatus=active(assinatura).failed: o pagamento foi recusado (status=failed).cancelled: o cliente fechou a sheet antes que a URL de retorno chegasse. O SDK não conhece o resultado, e o pagamento pode ter sido bem-sucedido; portanto, não exiba uma tela de falha. Em vez disso, faça a reconciliação da sessão abandonada.pending: o pagamento é liquidado posteriormente (status=processingou qualquer valorrequires_*), ou o parâmetrostatusestava ausente ou não foi reconhecido. Faça a reconciliação como emcancelled.expired: a sessão de checkout expirou (status=expired).
String?
O parâmetro de consulta
payment_id, quando a URL de retorno inclui um. Mostre-o na sua UI, mas não o use para conceder acesso. Consulte Verificar o pagamento.String?
O parâmetro de consulta
subscription_id. Definido para checkouts de assinatura.[String]?
O parâmetro de consulta
license_key. Definido quando o checkout inclui produtos com chaves de licença.String?
O parâmetro de consulta
email. Definido quando o checkout captura um endereço de e-mail.[String: String]
Cada parâmetro de consulta da URL de retorno, literalmente.
Verificar o pagamento
Webhooks
O Dodo Payments chama o seu backend quando um pagamento é bem-sucedido ou uma assinatura é ativada.
Get Payment Detail
Consulte
paymentId com sua secret key para verificar o status.result.status.
Personalização da aparência
Para alterar o botão de fechamento da sheet, o estilo de apresentação e o esquema de cores, passe umBrowserCustomization como customization para start(...). Todos os campos são opcionais. Para um campo nil, o SDK não define essa opção e o iOS aplica seu próprio padrão. A exceção é presentationStyle, em que nil significa pageSheet.
DismissButtonStyle?
Estilo do botão de fechamento:
done, close ou cancel. O iOS decide se ele será renderizado como um rótulo ou um ícone.PresentationStyle?
pageSheet (o padrão) apresenta um cartão que o cliente pode deslizar para baixo para fechar. fullScreen cobre a tela inteira e não tem gesto de fechamento.Bool?
Permite que a barra de ferramentas seja recolhida conforme a página rola. Ela só tem efeito visível quando
presentationStyle é fullScreen. Com pageSheet, as barras permanecem fixas independentemente desta configuração.ColorScheme?
light ou dark força essa aparência independentemente da configuração do sistema do dispositivo. system segue a configuração do sistema. Esta opção aplica o tema somente aos controles nativos ao redor da página. O modo claro ou escuro da própria página de checkout vem de customization.theme na sessão de checkout, e suas cores vêm de customization.theme_config.SFSafariViewController subjacente estão obsoletas a partir do iOS 26.
Erros
start lança CheckoutError somente em caso de uso incorreto ou falha da plataforma. Leia o motivo em error.code. O cancelamento por parte do cliente ou um pagamento recusado sempre é um resultado, nunca um erro lançado.
invalidCheckoutUrl(INVALID_CHECKOUT_URL):checkoutUrlnão é uma URL de sessão de checkouthttps(caminho começando com/session/) emcheckout.dodopayments.comoutest.checkout.dodopayments.com.invalidReturnUrl(INVALID_RETURN_URL):returnUrlnão é uma URL absoluta com esquema e host.alreadyInProgress(ALREADY_IN_PROGRESS): outro checkout está em execução. Apenas um checkout pode ser executado por vez.platformError(PLATFORM_ERROR): falha inesperada da plataforma, como a ausência de um view controller a partir do qual apresentar.
alreadyInProgress: um registro encontrado nesse momento pertence ao checkout que ainda está em execução.
Sessões abandonadas
O SDK registra a sessão de checkout quando apresenta o checkout e limpa o registro somente quando o checkout termina com
succeeded, failed ou expired. O registro permanece quando o app é encerrado durante o checkout e após um resultado cancelled ou pending. Verifique se há um registro na próxima inicialização e após cada resultado cancelled ou pending.abandoned.sessionId é o ID da sessão de checkout, que começa com cks_. abandoned.createdAt é o checkout Date iniciado. Seu backend pode consultar a sessão com Obter sessão de checkout, que retorna payment_id e payment_status. Até que o pagamento alcance um status final, trate-o como pendente, não como falho.
Relacionado
Mobile Integration Guide
O mesmo contrato para Android, React Native e Flutter.
React Native SDK
Encapsula este mesmo núcleo Swift no iOS.