Seamless SDK (Paiement Android)
Cette page fournit un guide d'intégration du SDK Seamless de Yuno pour les paiements Android.
SDK recommandéNous recommandons d'utiliser le SDK Seamless Android pour une intégration fluide. Cette option offre une solution de paiement flexible avec des composants d'interface utilisateur (UI) pré-construits et des options de personnalisation.
Ce SDK est idéal pour les commerçants qui :
- Composants d'interface utilisateur de paiement pré-construits avec options de personnalisation
- Ont besoin de personnaliser l'expérience de paiement tout en maintenant la conformité PCI
- Exigent un équilibre entre la vitesse d'implémentation et la personnalisation
Le SDK Seamless inclut des fonctionnalités telles que :
- Composants de l'interface utilisateur pour les paiements prédéfinis avec options de personnalisation
- Support de multiples méthodes de paiement
- Gestion avancée du statut de paiement
- Gestion complète des erreurs
Pour les commerçants nécessitant un contrôle complet de l'interface utilisateur ou des fonctionnalités plus avancées, veuillez considérer l'utilisation de notre Full SDK.
Prérequis
Avant de commencer l'intégration du SDK Android de Yuno, assurez-vous que votre projet répond aux exigences techniques. De plus, les pré-requis suivants doivent être en place :
- Vous devez disposer d'un compte Yuno actif.
- Vous avez besoin de vos identifiants API Yuno (
account_id,public-api-keyetprivate-secret-key), que vous pouvez obtenir dans la Section Développeurs du tableau de bord Yuno. Ces identifiants sont requis pour authentifier les requêtes auprès de l'API Yuno, utilisée pour :- Créer un
customer, requis avant d'initier les paiements - Créer un
checkout_session, qui initialise le flux de paiement - Créer le paiement associé à la session
- Créer un
Vérifier la version du SDKConsultez les Notes de version ou le dépôt du Yuno Android SDK pour vérifier la version actuelle du SDK disponible.
Étape 1 : Créer un client
Créez un client en utilisant le endpoint Créer un client avant d'initier les paiements. Cette étape est requise pour :
- Identifier la personne effectuant le paiement
- Activer la fonctionnalité de carte enregistrée (si activée)
- Suivre l'historique des paiements
L'identifiant du client rretourné par cet endpoint sera utilisé lors de la création de la checkout_session.
Étape 2 : Créer une session de paiement
Créez une nouvelle checkout_session à l'aide du endpoint Créer une session de paiement pour initialiser le flux de paiement. Assurez-vous de :
- Inclure l'ID du client obtenu à l'étape précédente
- Conservez l'ID de la
checkout_sessionretourné pour l'utiliser à l'Étape 6
Contrôle de l'authentification par rapport à la capture par envoi
payment_method.detail.card.capturedans la session de paiement :false= autoriser uniquement,true= capturer immédiatement.
Paramètres clés
| Paramètres | Requis | Description |
|---|---|---|
amount | Oui | L'objet montant de la transaction principale contenant la currency (code ISO 4217) et la value (montant numérique dans cette devise). |
alternative_amount | Non | Une représentation de la devise alternative du montant de la transaction avec la même structure que amount (currency et value). Utile pour les scénarios multi-devises, comme l'affichage des prix aux clients dans leur devise préférée (par exemple, USD) tout en traitant le paiement dans la devise locale (par exemple, COP). |
Utilisation de la session de paiementLe champ
checkout_sessionest unique pour chaque tentative de paiement et ne peut pas être réutilisée.
Étape 3 : Ajouter le SDK à votre projet
Ajoutez la source du dépôt :
maven { url "https://yunopayments.jfrog.io/artifactory/snapshots-libs-release" }Incluez le code suivant dans le fichier build.gradle pour ajouter la dépendance du SDK Yuno à l'application :
dependencies {
implementation 'com.yuno.payments:android-sdk:{last_version}'
}Étape 4 : Configurer les permissions
Le SDK Yuno nécessite des permissions réseau. Assurez-vous que la permission INTERNET est incluse dans votre AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />Étape 5 : Initialiser le SDK
Récupérez vos clés API publiques depuis le Tableau de bord Yuno.
Si vous n'avez pas implémenté une classe Application personnalisée, créez-en une. Dans la méthode onCreate() de votre classe d'application, appelez la fonction d'initialisation (Yuno.initialize) :
class CustomApplication : Application() {
override fun onCreate() {
super.onCreate()
Yuno.initialize(
this,
PUBLIC_API_KEY,
config = YunoConfig()
)
}
}Utilisez l'endpoint YunoConfig pour définir des configurations supplémentaires pour le SDK. Le tableau suivant énumère et décrit les options de personnalisation :
| Option | Description |
|---|---|
| cardFlow | Définit le flux du formulaire de la carte. L'option par défaut est CardFormType.ONE_STEP. Consulter la section Options de rendu pour plus d'informations. |
| saveCardEnabled | Active la case à cocher Enregistrer la carte pour les flux de cartes. Pour plus d'informations, consultez la section Sauvegarder la carte. |
| language | Définit la langue à utiliser dans les formulaires de paiement. Vous pouvez choisir l'une des options linguistiques disponibles :
|
| styles | Permet la personnalisation de l'interface utilisateur à l'échelle du SDK. Utilisez-le pour définir des styles visuels globaux (famille de polices, apparence des boutons) via un objet YunoStyles . Pour plus d'informations, consultez la page styles . |
| numéroDeCartePlaceholder | Ce champ facultatif vous permet de personnaliser le texte de remplacement pour le champ du numéro de carte. Il prend en charge les caractères alphanumériques, les espaces et les caractères UTF-8 pour la localisation. Si aucun texte n'est fourni, le SDK utilise le texte de remplacement par défaut (« Numéro de carte »). Cette personnalisation n'affecte pas le formatage de la carte, le masquage, la logique BIN ou la validation. |
| Masquer le nom du titulaire de la carte | Ce champ facultatif vous permet de masquer le champ du nom du titulaire de la carte dans le formulaire de carte. Lorsqu'il est défini sur true, le champ du nom du titulaire de la carte n'est pas affiché. Lorsqu'il n'est pas spécifié ou défini sur false, le champ du nom du titulaire de la carte s'affiche (comportement par défaut). Le fait de masquer ce champ n'a aucune incidence sur le PAN, la date d'expiration, la collecte du CVV, la logique BIN ou les validations 3DS/fournisseur. Le commerçant est tenu de s'assurer que le nom du titulaire de la carte est fourni lorsque son fournisseur de services de paiement l'exige. |
Le bloc de code suivant montre un exemple de YunoConfig:
classe de données YunoConfig(
val cardFlow : CardFormType CardFormType.ONE_STEP,
val saveCardEnabled : Boolean = false,
val language : YunoLanguage? = null,
val styles : YunoStyles? = null,
val cardNumberPlaceholder : String? = null, // Facultatif : texte de remplacement personnalisé pour le champ du numéro de carte
val hideCardholderName: Boolean? = null // Facultatif : définir sur true pour masquer le champ du nom du titulaire de la carte
)Étape 6 : Démarrer le paiement
Appelez la fonction startCheckout dans la méthode onCreate() de l'activité qui intègre le SDK pour lancer un nouveau processus de paiement avec le SDK Seamless :
startCheckout(
checkoutSession: "checkout_session",
country_code: "US",
callbackPaymentState: ((String?) -> Unit)?,
merchantSessionId: String? = null
)| Paramètres | Description |
|---|---|
checkoutSession | Le champ checkout_session liée au paiement. |
country_code | Code du pays où le paiement est effectué. Consultez la Couverture des pays pour une liste complète des pays pris en charge et de leurs codes. |
callbackPaymentState | Une fonction qui retourne le processus de paiement actuel. Facultatif si vous n'avez pas besoin du résultat. |
merchantSessionId | Identifiant facultatif pour le suivi de la session du commerçant. La valeur par défaut est null. |
Les états de paiement possibles retournés par callbackPaymentState sont :
const val PAYMENT_STATE_SUCCEEDED = "SUCCEEDED"
const val PAYMENT_STATE_FAIL = "FAIL"
const val PAYMENT_STATE_PROCESSING = "PROCESSING"
const val PAYMENT_STATE_REJECT = "REJECT"
const val PAYMENT_STATE_INTERNAL_ERROR = "INTERNAL_ERROR"
const val PAYMENT_STATE_STATE_CANCELED_BY_USER = "CANCELED"Le tableau suivant fournit des informations supplémentaires sur les états possibles :
| État | Description | Action supplémentaire requise |
|---|---|---|
SUCCEEDED | La transaction ou le processus de paiement a été complété avec succès. | Non. |
FAIL | La transaction a échoué en raison d'erreurs (validation des données, échec de connexion serveur, problèmes techniques/réseau). | Oui. Recherchez la cause de la défaillance (validation, réseau, serveur) et prenez des mesures correctives. |
PROCESSING | La transaction est en cours, en attente d'approbation ou de vérification. | Non. |
REJECT | La transaction a été rejetée pour des raisons telles qu'une insuffisance de fonds ou un soupçon d'activité frauduleuse. | Oui. Informer l'utilisateur du rejet, fournir la raison si possible, et suggérer des actions. |
INTERNAL_ERROR | Une erreur interne inattendue s'est produite dans le système qui gère le processus de paiement. | Oui. Nécessite une intervention technique pour examiner le système, résoudre les problèmes internes et réessayer ou informer l'utilisateur. |
CANCELED | L'utilisateur a volontairement annulé la transaction ou abandonné le processus de paiement. | Non. |
Validation du statut de paiement
Cette section explique comment le SDK gère le statut des paiements lorsque les utilisateurs annulent ou quittent les flux de paiement, et comment le statut du SDK est lié au statut des paiements backend dans ces scénarios.
Synchroniser les modes de paiement (Google Pay)
Pour les méthodes de paiement synchronisées telles que Google Pay, lorsqu'un utilisateur annule ou ferme l'interface utilisateur du portefeuille avant de recevoir la réponse du prestataire de services de paiement (PSP) :
- Statut du SDK: Retours
CANCELED(CANCELLED) - Statut du paiement backend: Restes
PENDINGjusqu'à l'expiration du délai PSP ou l'annulation par le commerçant - Important: Le SDK ne renverra pas
REJECTouPROCESSINGdans ce scénario
Cela garantit que le paiement backend reste en attente et peut être correctement traité par le système du commerçant.
Modes de paiement asynchrones (PIX et méthodes basées sur les QR codes)
Pour les méthodes de paiement asynchrones telles que PIX, lorsqu'un utilisateur ferme la fenêtre du code QR (clique sur X) avant d'avoir terminé le paiement :
- Statut du SDK: Retours
PROCESSING, éventuellement avec un sous-statut tel queCLOSED_BY_USER - Statut du paiement backend: Restes
PENDINGet le code QR reste valide jusqu'à son expiration. - Réutilisation de la session de paiement: la réouverture de la même session de paiement permet d'afficher le même code QR valide.
- Pas d'annulation automatique: le paiement PIX n'est pas automatiquement annulé lorsque l'utilisateur ferme la fenêtre QR.
Ce comportement permet aux utilisateurs de revenir au flux de paiement et de terminer la transaction à l'aide du même code QR avant son expiration.
Paiements asynchrones expirés
Si un code QR PIX expire naturellement :
- Statut du backend: Mis à jour vers
EXPIRED - Statut du SDK: Les rappels SDK et endpoints d'interrogation endpoints
EXPIREDde manière cohérente
Cela garantit que les commerçants reçoivent des informations précises sur le statut lorsqu'un moyen de paiement a expiré.
Étape 7 : Obtenir un token à usage unique (OTT) du paiement
Appeler la méthode startPaymentSeamlessLite pour démarrer un processus de paiement :
startPaymentSeamlessLite(
paymentSelected: PaymentSelected,
callbackPaymentState: ((String?) -> Unit)?,
showPaymentStatus: Boolean,
)Le tableau suivant décrit les paramètres permettant de lancer le paiement :
| Paramètres | Description |
|---|---|
paymentSelected | Spécifie le mode de paiement, soit via un token sécurisé, soit via un type de paiement sélectionné. |
callbackPaymentState | Paramètre facultatif. Cette fonction gère les mises à jour d'état. |
showPaymentStatus | Paramètre facultatif. S true, affiche l'écran de résultat par défaut du SDK. |
Vous recevrez le statut de paiement via callbackPaymentState, indiquant si le paiement a réussi ou si un problème est survenu.
Étape 8 : Créer le paiement
Appeler la méthode startPaymentSeamlessLite avec la méthode de paiement sélectionnée pour terminer le processus de paiement :
startPaymentSeamlessLite(
paymentSelected: PaymentSelected,
callbackPaymentState: ((String?) -> Unit)?,
showPaymentStatus: Boolean,
)Fonctionnalités Complémentaires
Le SDK Android de Yuno fournit des services et des configurations supplémentaires que vous pouvez utiliser pour améliorer l'expérience de vos clients. Utilisez la personnalisation du SDK pour changer l'apparence du SDK afin qu'il corresponde à votre marque ou pour configurer le loader.
styles
stylesAvec l'option de personnalisation styles , vous pouvez définir des styles visuels globaux via un objet YunoStyles . Il vous permet d'appliquer une image de marque cohérente dans tout le SDK en personnalisant l'apparence des boutons et la typographie.
classe de données YunoStyles(
val buttonStyles: YunoButtonStyles? = null,
val fontFamily: FontFamily? = null
)| Paramètres | Description |
|---|---|
buttonStyles | Personnalise les boutons principaux affichés dans le SDK. |
fontFamily | Définit la famille de polices utilisée sur tous les éléments de texte du SDK. |
Le champ YunoButtonStyles vous permet de définir des paramètres spécifiques pour l'apparence des boutons :
data class YunoButtonStyles(
val backgroundColor : Couleur ? = null,
val contentColor : Couleur ? = null,
val cornerRadius : Dp ? = null,
val elevation : Dp ? = null,
val padding : Dp ? = null,
val fontFamily : FontFamily ? = null,
val fontSize : TextUnit ? = null,
val fontStyle : FontStyle ? = null
)Utilisez l'endpoint YunoConfig décrite à l'étape 5, pour appliquer l'option de personnalisation des styles .
Loader
La fonctionnalité du loader est contrôlée par le paramètre keepLoader dans la classe de données YunoConfig qui est documentée en ligne dans la section de configuration du SDK ci-dessus.
Sauvegarde de carte pour les futurs paiements
Vous pouvez également afficher une case à cocher pour sauvegarder ou enregistrer des cartes en utilisant cardSaveEnable: true. Les exemples suivants montrent la case à cocher pour les deux rendus de formulaire de carte :
Options de rendu
Vous pouvez choisir entre deux options de rendu de formulaire de carte. Les captures d'écran suivantes montrent la différence entre cardFormType ONE_STEP et STEP_BY_STEP:
Accès à l'Application DémoEn plus des exemples de code fournis, vous pouvez consulter le dépôt Yuno pour l'implémentation complète des SDK Android de Yuno.
Mise à jour il y a 26 jours