Saltar al contenido principal

Requisitos Previos

Antes de integrar Dodo Payments en tu aplicación móvil, asegúrate de tener:
  • Cuenta de Dodo Payments: Cuenta de comerciante activa con acceso a la API
  • Credenciales de API: Clave de API y clave secreta de webhook desde tu panel de control
  • Proyecto de Aplicación Móvil: Aplicación de Android, iOS, React Native o Flutter
  • Servidor Backend: Para manejar de forma segura la creación de sesiones de pago

Flujo de Integración

La integración móvil sigue un proceso seguro de 4 pasos donde tu backend maneja las llamadas a la API y tu aplicación móvil gestiona la experiencia del usuario.
1

Backend: Crear Sesión de Pago

Documentación de API de Sesión de Pago

Aprende cómo crear una sesión de pago en tu backend usando Node.js, Python y más. Consulta ejemplos completos y referencias de parámetros en la documentación dedicada de API de Sesiones de Pago.
Seguridad: Las sesiones de pago deben ser creadas en tu servidor backend, nunca en la aplicación móvil. Esto protege tus claves de API y asegura una validación adecuada.
2

Móvil: Obtener URL de Pago

Tu aplicación móvil llama a tu backend para obtener la URL de pago:
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
}
Seguridad: Las aplicaciones móviles solo se comunican con tu backend, nunca directamente con la API de Dodo Payments.
3

Móvil: Abrir Pago en el Navegador

4

Backend: Manejar la Finalización del Pago

Procesa la finalización del pago a través de webhooks y URLs de redirección para confirmar el estado del pago.

Integración Específica de la Plataforma

Elige tu plataforma móvil a continuación para ejemplos completos de implementación:

Integración de Android

Implementación 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)
            }
        }
    }
}

Mejores Prácticas

  • Seguridad: Nunca almacenes claves de API en el código de tu aplicación. Usa almacenamiento seguro y pinning de SSL.
  • Experiencia del Usuario: Muestra indicadores de carga, maneja errores de manera adecuada y proporciona mensajes claros.
  • Pruebas: Usa tarjetas de prueba, simula errores de red y prueba en varios dispositivos.

Solución de Problemas

Problemas Comunes

  • WebView no abre el enlace de pago: Asegúrate de que el enlace de pago sea válido y use HTTPS.
  • Callback no recibido: Verifica tu URL de retorno y la configuración del webhook.
  • Errores de clave de API: Verifica que tu clave de API sea correcta y tenga los permisos necesarios.

Recursos Adicionales

Para preguntas o soporte, contacta a [email protected].