Cette page présente le SDK Android de checkout,
com.dodopayments.api:checkout-android, qui ouvre le checkout hébergé de Dodo Payments dans votre application. Pour appeler l’API Dodo Payments depuis votre serveur, utilisez plutôt le SDK Kotlin backend.Checkout Sessions API
Créez le
checkout_url que ce SDK ouvre.Mobile Integration Guide
Bonnes pratiques pour les parcours de checkout mobile.
androidx.browser.customtabs) et renvoie un CheckoutResult typé lorsque le client termine ou quitte le checkout. Votre backend crée la session de checkout et envoie son checkout_url à l’application. Le SDK ne contient aucun code réseau et ne stocke aucune clé API ; il n’appelle donc jamais l’API Dodo Payments.
Prérequis : minSdk 23, Kotlin et Java 17. Le SDK dépend uniquement de androidx.activity, androidx.browser et kotlinx-coroutines-android.
Installation
1
Add the Dependency
Ajoutez le SDK depuis Maven Central au La personnalisation de l’apparence nécessite la version 1.1.0 ou ultérieure.
build.gradle.kts de votre module d’application :build.gradle.kts
2
Register a Callback URL Scheme
Définissez votre schéma de callback comme placeholder de manifeste Gradle. Le manifeste du SDK déclare lui-même le filtre d’intention de l’activité de redirection avec le placeholder Utilisez le même schéma dans
${dodoCallbackScheme} ; cette propriété est donc la seule étape de configuration. Vous n’avez pas besoin d’ajouter de XML au manifeste :build.gradle.kts
CheckoutParams.returnUrl, par exemple myapp://checkout/return, et définissez la même URL que celle indiquée dans le return_url de la session de checkout lorsque votre backend crée la session. Le SDK fait correspondre l’URL de retour selon le schéma, l’hôte et le chemin, et ignore la query string. L’URL n’a pas besoin de charger une page réelle.Si vous omettez le placeholder, le build échoue avec une erreur de placeholder non résolu. Si le placeholder ne correspond pas au schéma de
returnUrl, le SDK lève PLATFORM_ERROR avant d’ouvrir le checkout.Utilisation
Le SDK propose deux façons de démarrer le checkout : un activity result launcher et une suspend function. Les deux renvoient le mêmeCheckoutResult.
- Launcher (Recommended)
- Suspend Function
Enregistrez le contrat avec
registerForActivityResult, puis lancez-le :Signification du résultat
Le SDK construitCheckoutResult à partir des paramètres de requête de l’URL de retour.
CheckoutStatus
requis
L’une des cinq valeurs suivantes :
SUCCEEDED: l’URL de retour contientstatus=succeeded(paiement unique) oustatus=active(abonnement).FAILED: le paiement a été refusé (status=failed).CANCELLED: le client a fermé le Custom Tab avant l’arrivée de l’URL de retour. Le SDK ne connaît pas le résultat et le paiement peut avoir abouti ; n’affichez donc pas d’écran d’échec. Effectuez plutôt le rapprochement de la session abandonnée.PENDING: le paiement est finalisé ultérieurement (status=processingou toute valeurrequires_*), ou le paramètrestatusétait absent ou non reconnu. Effectuez le rapprochement comme pourCANCELLED.EXPIRED: la session de checkout a expiré (status=expired).
String?
Le paramètre de requête
payment_id, lorsque l’URL de retour en contient un. Affichez-le dans votre interface, mais ne l’utilisez pas pour accorder l’accès. Consultez Vérifier le paiement.String?
Le paramètre de requête
subscription_id. Défini pour les checkouts d’abonnement.List<String>?
Le paramètre de requête
license_key. Défini lorsque le checkout inclut des produits avec clé de licence.String?
Le paramètre de requête
email. Défini lorsque le checkout recueille une adresse e-mail.Map<String, String>
Chaque paramètre de requête de l’URL de retour, verbatim.
Vérifier le paiement
Webhooks
Écoutez les événements de paiement en temps réel.
Get Payment Detail
Interrogez l’état du paiement à la demande.
payment.succeeded ou subscription.active. Ne vous fiez pas uniquement à CheckoutResult.status.
Personnalisation de l’apparence
Pour modifier la barre d’outils, les boutons et le jeu de couleurs du Custom Tab, transmettez unBrowserCustomization comme customization à CheckoutParams. Chaque champ est facultatif et prend par défaut la valeur null. Pour un champ null, le SDK ne définit pas cette option ; le navigateur qui héberge le Custom Tab applique donc sa propre valeur par défaut.
Int?
Couleur d’arrière-plan de la barre d’outils, sous forme d’entier ARGB
Color.Couleur de la barre de navigation, sous forme d’entier ARGB
Color.Couleur du séparateur au-dessus de la barre de navigation, sous forme d’entier ARGB
Color.CloseButtonStyle?
DEFAULT affiche l’icône système “X”. BACK affiche une flèche de retour dessinée par le SDK.CloseButtonPosition?
Côté de la barre d’outils où le bouton de fermeture apparaît :
START ou END.Affiche l’icône de partage de la barre d’outils.
false la masque.Boolean?
Affiche le titre de la page sous l’URL dans la barre d’outils.
Boolean?
Masque automatiquement la barre d’outils lorsque la page défile.
Boolean?
Affiche “Ajouter cette page aux favoris” dans le menu supplémentaire.
Boolean?
Affiche “Télécharger la page” dans le menu supplémentaire.
ColorScheme?
LIGHT ou DARK force cette apparence, quel que soit le réglage système de l’appareil. SYSTEM suit le réglage système.checkoutLauncher de Utilisation :
Erreurs
DodoCheckout.start lève CheckoutError uniquement en cas de mauvaise utilisation ou d’échec de la plateforme. Lisez la raison dans CheckoutError.code :
INVALID_CHECKOUT_URL:checkoutUrln’est pas une URL de session de checkouthttps(chemin commençant par/session/) surcheckout.dodopayments.comoutest.checkout.dodopayments.com.INVALID_RETURN_URL:returnUrln’est pas une URL absolue avec un schéma et un hôte.ALREADY_IN_PROGRESS: un autre checkout est en cours. Un seul checkout peut être exécuté à la fois.PLATFORM_ERROR: échec inattendu de la plateforme, notamment lorsque le schémareturnUrlne correspond pas à votre placeholderdodoCallbackScheme.
CANCELLED ou FAILED), et jamais une erreur levée. Avec le launcher, les erreurs de validation sont levées par launcher.launch(...). Un échec de la plateforme après le lancement ne peut pas être propagé par le callback de résultat de l’activité ; le launcher renvoie donc CANCELLED avec le code d’erreur dans raw["error"].
Sessions abandonnées
Le SDK enregistre la session de checkout au démarrage du checkout et n’efface cet enregistrement que lorsque le checkout se termine avecSUCCEEDED, FAILED ou EXPIRED. L’enregistrement est conservé si l’application est arrêtée pendant le checkout, ainsi qu’après un résultat CANCELLED ou PENDING, car dans ces cas le SDK ne connaît pas le résultat. Recherchez-le au prochain lancement de l’application et après chaque résultat CANCELLED ou PENDING :
abandoned.sessionId est l’ID de la session de checkout, qui commence par cks_. abandoned.createdAt correspond à l’heure de début du checkout, sous forme d’horodatage epoch en millisecondes. Votre backend peut rechercher la session avec Get Checkout Session, qui renvoie son payment_id et son payment_status. Tant que le paiement n’a pas atteint un statut final, traitez-le comme en attente et non comme échoué.
Voir aussi
Mobile Integration Guide
Bonnes pratiques pour les parcours de checkout mobile.
Kotlin SDK
SDK backend pour les opérations côté serveur.