Quick Start
Platform Examples
Checkout Customization
Mobile Recipes
start(...), con recuperación de sesiones abandonadas integrada. Usa un
WebView manual únicamente si ninguno se adapta a tu stack.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 dashboard
- Proyecto de aplicación móvil: Aplicación Android, iOS, React Native o Flutter
- Servidor backend: Para gestionar de forma segura la creación de sesiones de checkout
Flujo de integración
La integración móvil sigue un proceso seguro de 4 pasos en el que tu backend gestiona las llamadas a la API y tu aplicación móvil administra la experiencia del usuario.status del deep link es únicamente una indicación de UI sobre lo que debes mostrar al usuario. Concede siempre el acceso desde el webhook payment.succeeded / subscription.active en tu backend, nunca basándote solo en el resultado móvil.Backend: Create Checkout Session
Checkout Session API Docs
Mobile: Get Checkout URL
- iOS (Swift)
- Android (Kotlin)
- React Native (JavaScript)
- Flutter (Dart)
Mobile: Open Checkout in Browser
Pick your mobile SDK
Backend: Handle Payment Completion
Elige tu SDK
Cada SDK móvil expone el mismo contrato: una llamadastart(...) abre el checkout alojado de Dodo en la superficie de navegador nativa de la plataforma y devuelve un CheckoutResult tipado cuyo status es succeeded, failed, cancelled, pending o expired. Ninguno contiene una clave de API ni llama a la API de Dodo Payments, y los cuatro admiten la recuperación de sesiones abandonadas.
Android
com.dodopayments.api:checkout-android abre una pestaña personalizada de Chrome. Requiere minSdk 23.iOS
dodopayments-mobile-sdk-ios abre SFSafariViewController. Requiere iOS 16 o posterior.React Native
@dodopayments/react-native-checkout, un Turbo Module sobre ambos núcleos nativos. Requiere React Native 0.76 o posterior.Flutter
dodopayments_checkout, un canal Pigeon sobre ambos núcleos nativos. Requiere Flutter 3.44 o posterior.Registrar un esquema de URL de callback
Los cuatro SDK devuelven el control a tu aplicación mediante un esquema de URL personalizado que tú eliges, por ejemplomyapp://checkout/return. Regístralo una vez por plataforma:
- Android
- iOS
- Expo
checkout_url en el navegador del sistema de la plataforma (Android Custom Tabs / iOS SFSafariViewController) e intercepta la navegación hacia tu return_url; después, lee los parámetros de consulta status y payment_id. Los SDK anteriores hacen exactamente esto por ti.Personalización de la apariencia
Cada SDK acepta un parámetro opcionalcustomization en start(...) / CheckoutParams que controla la apariencia y el comportamiento de la superficie de navegador nativa: la barra de herramientas, los botones y la presentación. Esto es independiente del tema propio de la página de checkout, que configuras en el servidor mediante customization.theme_config en la sesión de checkout.
Las opciones se agrupan por plataforma porque Android Custom Tab e iOS SFSafariViewController exponen controles nativos diferentes. Todos los campos son opcionales; omitir por completo customization utiliza la apariencia predeterminada de cada plataforma.
Android - Custom Tab
Android - Custom Tab
default muestra el icono de sistema «X»; back dibuja una flecha de retroceso en su lugar.iOS - SFSafariViewController
iOS - SFSafariViewController
pageSheet se presenta como una tarjeta que se puede cerrar deslizando; fullScreen cubre toda la pantalla.presentationStyle es fullScreen; pageSheet mantiene las barras fijadas independientemente de esta configuración.- React Native
- Flutter
- Android (Kotlin)
- iOS (Swift)
Personalización de la página de checkout
La sección Personalización de la apariencia anterior controla la superficie del navegador nativo: barra de herramientas, botones y combinación de colores. La propia página de checkout —los campos que aparecen, el tema y los métodos de pago visibles— se configura en el servidor al crear la sesión de checkout. Estos parámetros tienen el mayor impacto en la conversión móvil. Los parámetros siguientes se encuentran en tres ubicaciones diferentes de la solicitud de la sesión de checkout; la columna Dónde se incluye indica a qué objeto pertenece cada uno. Equivocarse aquí es el error más habitual: un parámetro incluido en el objeto incorrecto se ignora silenciosamente.
show_order_details: false moves the contact and payment fields above the fold, instead of behind the order summary.
minimal_address: true para recopilar solo un código postal en lugar de los campos completos de calle, ciudad y estado:

minimal_address: true reduces the billing address to a single postcode field.
theme: "system" para que el checkout siga la preferencia de modo claro u oscuro del dispositivo:

With theme: system, the checkout follows the device's light or dark appearance automatically.
Full checkout session parameter reference
Recetas optimizadas para móviles
Cada receta siguiente es el cuerpo completo de una solicitud de sesión de checkout. Copia la que coincida con tu escenario, sustituye el ID de tu producto y pásala al endpoint de creación de sesiones de tu backend.Minimal Mobile Checkout - fastest path to payment
Minimal Mobile Checkout - fastest path to payment
- Node.js SDK
- Python SDK
One-Click Returning Customer - saved card, instant confirmation
One-Click Returning Customer - saved card, instant confirmation
confirm: true para omitir por completo el formulario de checkout.- Node.js SDK
- Python SDK
status del retorno mediante deep link es únicamente una indicación de UI. Confirma el acceso escuchando el webhook payment.succeeded en tu backend.Subscription with Free Trial - trial before first charge
Subscription with Free Trial - trial before first charge
- Node.js SDK
- Python SDK
subscription.active, no cuando el SDK móvil devuelva el resultado. Consulta la Subscription Integration Guide para ver el flujo completo del webhook.On-Demand Mandate - save a card for future variable charges
On-Demand Mandate - save a card for future variable charges
- Node.js SDK
- Python SDK
Flujos de suscripción desde dispositivos móviles
Las suscripciones se crean mediante el mismo flujo de sesión de checkout utilizado para los pagos únicos: el SDK móvil abre el checkout alojado, el cliente se suscribe y tu aplicación gestiona el retorno mediante deep link. Después, el ciclo de vida de la suscripción se administra íntegramente en el backend.Suscripciones recurrentes normales
Para facturación a intervalos fijos (mensual o anual), crea una sesión de checkout con un producto de suscripción y un deep linkreturn_url. Tu backend recibe subscription.active cuando se confirma la suscripción.
Suscripciones on-demand
Las suscripciones on-demand permiten autorizar una vez el método de pago de un cliente y cobrar importes variables posteriormente; son ideales para recargas de wallet, pago por uso y cualquier escenario en el que el importe del cargo no se conozca de antemano. Consulta la receta On-Demand Mandate anterior para ver el cuerpo completo de la solicitud. Consideraciones móviles importantes:- Establece
show_on_demand_tag: falsepara que la página de checkout no muestre lenguaje relacionado con «subscription» u «on-demand». En casos de tokenización de tarjetas, los clientes no esperan terminología de suscripción. - Después de autorizar el mandato, tu backend recibe
subscription.active. Guardasubscription_id; lo utilizarás para todos los cargos futuros.
Suscripción con prueba gratuita
Pasasubscription_data.trial_period_days en la sesión de checkout para ofrecer una prueba antes del primer ciclo de facturación. El cliente autoriza su método de pago durante el registro de la prueba; el primer cargo se realiza automáticamente cuando termina la prueba. Consulta la receta Subscription with Free Trial anterior para ver el cuerpo completo de la solicitud.
Mejoras y reducciones de plan
Los cambios de plan se realizan mediante la API en tu backend, no mediante una nueva sesión de checkout. Dodo Payments calcula automáticamente el prorrateo. Para ofrecer una opción de autoservicio a los clientes, inserta un enlace al Customer Portal o intégralo.Subscription Integration Guide
On-Demand Subscriptions
Upgrade / Downgrade
Customer Portal
Reducir el abandono del checkout
Los checkouts móviles presentan un abandono mayor que los web: las pantallas más pequeñas, las distracciones y los formularios más largos contribuyen a ello. Las mejoras más rápidas provienen de la propia configuración de la sesión de checkout.Optimizar el formulario
Prellenar los datos del cliente
Cada campo que el cliente no tiene que escribir es un motivo menos para abandonar:- Clientes nuevos: establece
customer.emailecustomer.namedesde tu sesión de autenticación. - Clientes recurrentes: establece
customer.customer_idpara prellenar automáticamente todos los datos guardados. - Moneda: pasa siempre
billing_currencyybilling_address.countryjuntos.
Herramientas de recuperación
Abandoned Cart Recovery
Payment Retries
Subscription Dunning
Recovery Overview
Prácticas recomendadas
- Seguridad: Nunca incluyas una clave de API en tu aplicación. Crea sesiones de checkout en tu backend y pasa al cliente únicamente la
checkout_urlresultante. - Autoridad: Trata
CheckoutResult.statuscomo una indicación de UI. Concede acceso solo después de que tu backend confirme el pago. - Experiencia de usuario: Muestra un estado de carga mientras tu backend crea la sesión y gestiona
cancelledcomo un resultado normal, no como un error. - Pruebas: Usa el modo de prueba y tarjetas de prueba, y verifica el recorrido de ida y vuelta de la return-URL en un dispositivo real y en un simulador.
- Conversión: Establece
show_order_details: falseeminimal_address: truepara obtener las mejores tasas de finalización del checkout móvil. Mover los métodos de pago above the fold y reducir los campos del formulario son los dos cambios de mayor impacto que puedes realizar. - Moneda: Pasa siempre explícitamente
billing_currencyybilling_address.country; si falta cualquiera de ellos, Adaptive Currency puede cambiar la moneda de facturación según la dirección IP del cliente. - Facturación on-demand: Establece
show_on_demand_tag: falseal utilizar suscripciones on-demand para tokenizar tarjetas. Los clientes que usan un flujo de recarga de wallet no esperan ver lenguaje relacionado con «subscription». - Recuperación: Activa la recuperación de carritos abandonados en tu dashboard de Dodo Payments para volver a captar automáticamente a los clientes que no completan el checkout.
Solución de problemas
Problemas habituales
- El callback nunca llega: El esquema de
returnUrldebe coincidir con el que registraste. En Android es el placeholder de manifestdodoCallbackScheme; en iOS y React Native es el tipo de URLInfo.plist. - El checkout vuelve al navegador en lugar de a tu aplicación (iOS): No has reenviado la URL entrante. Llama a
DodoCheckout.handleOpenURL(url)desde.onOpenURL,scene(_:openURLContexts:)o un listenerLinkingde React Native. PLATFORM_ERRORen Android: Normalmente se debe a una discrepancia en el esquema. También puede aparecer siMainActivityestableceandroid:taskAffinity=""(el valor predeterminado estándarflutter create), lo que puede hacer que algunos builds de OEM pierdan el checkout en curso.ALREADY_IN_PROGRESS: Hay un checkout abierto. Espera a que finalice o descarta el anterior antes de iniciar otro.- El build falla por un placeholder no resuelto: Añadiste el SDK de Android, pero nunca estableciste
manifestPlaceholders["dodoCallbackScheme"]. - El pago se realizó correctamente, pero no se concedió acceso: Es lo esperado si te basas en el resultado móvil. Concede el acceso desde el webhook
payment.succeeded/subscription.active. - Apple Pay / Google Pay no aparecen en móviles: El checkout se está cargando dentro de un WebView integrado (
WKWebView/ AndroidWebView), que suprime las wallets y puede interrumpir 3-D Secure. Ábrelo con el SDK o en el navegador del sistema (Custom Tabs /SFSafariViewController).
Recursos adicionales
- Guía de integración de pagos
- Documentación de Webhooks
- Proceso de pruebas
- Preguntas frecuentes técnicas
- Personalización de la sesión de checkout
- On-Demand Subscriptions
- Mejora/reducción de suscripción
- Recuperación de carritos abandonados
- Customer Portal
