Pular para o conteúdo principal

Pré-requisitos

Antes de integrar o Dodo Payments em seu aplicativo móvel, certifique-se de que você possui:
  • Conta Dodo Payments: Conta de comerciante ativa com acesso à API
  • Credenciais da API: Chave da API e chave secreta do webhook do seu painel
  • Projeto de Aplicativo Móvel: Aplicativo Android, iOS, React Native ou Flutter
  • Servidor Backend: Para gerenciar de forma segura a criação de sessões de checkout

Fluxo de Integração

A integração móvel segue um processo seguro de 4 etapas onde seu backend gerencia chamadas de API e seu aplicativo móvel gerencia a experiência do usuário.
1

Backend: Criar Sessão de Checkout

Documentação da API de Sessão de Checkout

Aprenda como criar uma sessão de checkout em seu backend usando Node.js, Python e mais. Veja exemplos completos e referências de parâmetros na documentação dedicada da API de Sessões de Checkout.
Segurança: As sessões de checkout devem ser criadas em seu servidor backend, nunca no aplicativo móvel. Isso protege suas chaves de API e garante a validação adequada.
2

Móvel: Obter URL de Checkout

Seu aplicativo móvel chama seu backend para obter a URL de checkout:
func getCheckoutURL(productId: String, customerEmail: String, customerName: String) async throws -> String {
    let url = URL(string: "https://your-backend.com/api/create-checkout-session")!
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    
    let requestData: [String: Any] = [
        "productId": productId,
        "customerEmail": customerEmail,
        "customerName": customerName
    ]
    request.httpBody = try JSONSerialization.data(withJSONObject: requestData)
    
    let (data, _) = try await URLSession.shared.data(for: request)
    let response = try JSONDecoder().decode(CheckoutResponse.self, from: data)
    return response.checkout_url
}
Segurança: Aplicativos móveis se comunicam apenas com seu backend, nunca diretamente com a API do Dodo Payments.
3

Móvel: Abrir Checkout no Navegador

4

Backend: Lidar com a Conclusão do Pagamento

Processar a conclusão do pagamento via webhooks e URLs de redirecionamento para confirmar o status do pagamento.

Integração Específica da Plataforma

Escolha sua plataforma móvel abaixo para exemplos completos de implementação:

Integração Android

Implementação de Chrome Custom Tabs

// Add Chrome Custom Tabs dependency to build.gradle
implementation 'androidx.browser:browser:1.5.0'

// In your Activity
class PaymentActivity : AppCompatActivity() {
    private var customTabsSession: CustomTabsSession? = null
    private var customTabsClient: CustomTabsClient? = null
    private var customTabsServiceConnection: CustomTabsServiceConnection? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // Initialize Custom Tabs
        customTabsServiceConnection = object : CustomTabsServiceConnection() {
            override fun onCustomTabsServiceConnected(name: ComponentName, client: CustomTabsClient) {
                customTabsClient = client
                customTabsClient?.warmup(0L)
                customTabsSession = customTabsClient?.newSession(object : CustomTabsCallback() {
                    override fun onNavigationEvent(navigationEvent: Int, extras: Bundle?) {
                        // Handle navigation events
                    }
                })
            }
            override fun onServiceDisconnected(name: ComponentName) {
                customTabsClient = null
            }
        }
        CustomTabsClient.bindCustomTabsService(
            this,
            "com.android.chrome",
            customTabsServiceConnection!!
        )
        // Get checkout URL from backend and launch
        lifecycleScope.launch {
            try {
                val checkoutURL = getCheckoutURL("prod_123", "[email protected]", "Customer Name")
                val customTabsIntent = CustomTabsIntent.Builder(customTabsSession)
                    .build()
                customTabsIntent.launchUrl(this@PaymentActivity, Uri.parse(checkoutURL))
            } catch (e: Exception) {
                // Handle error
                Log.e("PaymentActivity", "Failed to get checkout URL", e)
            }
        }
    }
}

Melhores Práticas

  • Segurança: Nunca armazene chaves de API no código do seu aplicativo. Use armazenamento seguro e SSL pinning.
  • Experiência do Usuário: Mostre indicadores de carregamento, trate erros de forma adequada e forneça mensagens claras.
  • Testes: Use cartões de teste, simule erros de rede e teste em vários dispositivos.

Solução de Problemas

Problemas Comuns

  • WebView não abrindo link de pagamento: Certifique-se de que o link de pagamento é válido e usa HTTPS.
  • Callback não recebido: Verifique sua URL de retorno e configuração de webhook.
  • Erros de chave da API: Verifique se sua chave da API está correta e possui as permissões necessárias.

Recursos Adicionais

Para perguntas ou suporte, entre em contato com [email protected].