Accéder directement au contenu
Créez un compte ou connecter-vous
Logo de la documentation Stripe
/
Demander à l'assistant IA
Créez un compteConnectez-vous
Démarrer
Paiements
Revenus
Plateformes et marketplaces
Gestion de fonds
Ressources pour les développeurs
API et SDKAide
AperçuAccepter un paiementMettre votre intégration à niveau
Paiements en ligne
PrésentationTrouver votre cas d'usage
Utiliser Payment Links
Utiliser une page de paiement préconfiguré
Créer une intégration personnalisée avec Elements
Développer une intégration dans l'application
Utiliser Managed PaymentsPaiements récurrents
Paiements par TPE
Terminal
    Présentation
    Accepter les paiements par TPE
    Disponibilité mondiale
    Conception d'intégration
    Choisir votre lecteur
    Concevoir une intégration
    Démarrage rapide
    Exemples d'applications
    Tests
    Configuration de Terminal
    Configurer votre intégration
    Paiements à plusieurs parties avec Connect
    Se connecter à un lecteur
    Acceptation d'un paiement
    Encaisser des paiements par carte
    Autres moyens de paiement
    Accepter les paiements hors ligne
    Paiement des commande par courrier/par téléphone
    Spécificités régionales
    Lors du règlement
    Collecter des pourboires
    Collecter et enregistrer des informations de paiement pour une utilisation ultérieure
    Autorisations flexibles
    Après le paiement
    Rembourser des transactions
    Fournir des reçus
    Personnalisez Checkout
    Affichage du panier
    Collecter les données saisies à l'écran
    Collecter les données des lectures de la piste magnétique
    Collecter les données des paiements NFC sans contact
    Applications sur des appareils
    Gérer les lecteurs
    Commander, renvoyer ou remplacer des lecteurs
    Enregistrer des lecteurs
    Gérer les emplacements et les zones
    Configurer des lecteurs
    Suivre les lecteurs
    Références
    Documentation de l'API
    Lecteurs mobiles
    Lecteurs intelligents
    Lecteurs Tap to Pay
    Guide de migration du SDK
      Guide de migration vers SDK v4
      Guide de migration du SDK v3
    Liste de contrôle pour le déploiement
    Fiches produit du lecteur Stripe Terminal
Moyens de paiement
Ajouter des moyens de paiement
Gérer les moyens de paiement
Paiement accéléré avec Link
Opérations de paiement
Analyses
Soldes et délai de règlement
Conformité et sécurité
Devises
Refus de paiement
Litiges
Prévention de la fraude
Radar pour la protection contre la fraude
Virements
ReçusRemboursements et annulations
Intégrations avancées
Tunnels de paiement personnalisés
Acquisition flexible
Orchestration multiprestataire
Au-delà des paiements
Constituez votre entreprise
Cryptomonnaies
Commerce agentique
Financial Connections
Climate
Vérifier l'identité
États-Unis
Français (France)
AccueilPaiementsTerminal

Guide de migration du SDK Terminal

Découvrez comment migrer vers la version 5.0.0 du SDK Stripe Terminal.

Les SDK Stripe Terminal pour iOS et Android ont été mis à jour avec un certain nombre de changements majeurs au niveau des API et du comportement, dont certains nécessitent que vous mettiez à jour votre intégration avec le SDK Stripe Terminal. Nous apportons régulièrement des modifications aux mises à jour de versions majeures susceptibles d’affecter le fonctionnement ou le comportement de votre intégration, afin d’améliorer la cohérence entre nos SDK et de simplifier la logique et l’intégration de votre application. Ce guide vous présente les dernières modifications pour vous aider à mettre à niveau votre intégration.

Remarque

Vous créez une nouvelle intégration à Stripe Terminal ? Consultez la page Conception d’une intégration pour savoir quelles sont les premières étapes.

Migrer vers la version 5.0.0

Voici les éléments à retenir concernant les SDK de Stripe Terminal pour iOS et Android :

  • Intégration simplifiée des paiements
    • Traitez les paiements, configurez les intentions et effectuez les remboursements à l’aide d’un seul appel de méthode combinant les étapes de collecte et de confirmation.
  • Prend en charge les variantes asynchrones modernes de Swift et les coroutines Kotlin pour simplifier les flux asynchrones complexes
    • Concurrence Swift (async/await) pour iOS et Kotlin Coroutines pour Android.
  • Annulation par le client activée par défaut
    • Sur les lecteurs pris en charge, les clients peuvent désormais annuler les transactions par défaut pendant les flux de paiement, de configuration, de remboursement et de collecte de données.
  • Amélioration de l’observabilité de la reconnexion automatique du lecteur mobile et du lecteur Tap to Pay
    • Gestion améliorée de la reconnexion automatique des lecteurs avec davantage d’états de connexion pour les lecteurs mobiles (Bluetooth et USB) et les lecteurs Tap to Pay.
  • Découvrez la prise en charge des cartes acceptées pour Tap to Pay sur Android Aperçu public
    • Acceptez les paiements par carte Discover avec Tap to Pay sur Android.
  • Mises à jour vers les versions minimales des plateformes prises en charge pour iOS 14.0 et iOS 15.0

Si votre application utilise actuellement une version du SDK Android Terminal antérieure à la version 5.0.0, vous devez effectuer plusieurs modifications pour la mettre à niveau. Pour obtenir la liste détaillée des modifications apportées entre les versions 4.x et 5.0.0, consultez les logs de modifications du SDK.

Intégration simplifiée des paiements

Mise à jour vers le traitement des paiements unifié

Le SDK v5 introduit des méthodes simplifiées qui combinent les étapes collecter et confirmer en une seule opération. Bien que les méthodes collectPaymentMethod et confirmPaymentIntent existantes continuent de fonctionner, nous vous recommandons d’utiliser les nouvelles méthodes unifiées, pour des intégrations plus simples.

Traitement des paiements avec processPaymentIntent

Remplacer les étapes collecter et confirmer en deux temps par un appel de méthode processPaymentIntent unique.

_Avant _

Kotlin
Java
No results
// Step 1: Collect payment method Terminal.getInstance().collectPaymentMethod( paymentIntent, collectConfig, object : PaymentIntentCallback { override fun onSuccess(paymentIntent: PaymentIntent) { // Step 2: Confirm the payment Terminal.getInstance().confirmPaymentIntent(paymentIntent, object : PaymentIntentCallback { override fun onSuccess(confirmedPaymentIntent: PaymentIntent) { // Payment successful } override fun onFailure(e: TerminalException) { // Payment confirmation failed } }) } override fun onFailure(e: TerminalException) { // Payment method collection failed } } )

_Après _

Kotlin
Java
No results
// Process and confirm the payment in one step Terminal.getInstance().processPaymentIntent( paymentIntent, collectConfig, confirmConfig, object : PaymentIntentCallback { override fun onSuccess(paymentIntent: PaymentIntent) { // Payment successful } override fun onFailure(e: TerminalException) { // Payment failed } } )

Traitement des remboursements avec processRefund

Les méthodes collectRefundPaymentMethod et confirmRefund sont désormais obsolètes. Utilisez plutôt processRefund.

_Avant _

Kotlin
Java
No results
// Step 1: Collect refund payment method val refundParams = RefundParameters.ByChargeId( id = "ch_123", amount = 1000L, currency = "cad" ).build() Terminal.getInstance().collectRefundPaymentMethod( refundParams, object : Callback { override fun onSuccess() { // Step 2: Confirm the refund Terminal.getInstance().confirmRefund(object : RefundCallback { override fun onSuccess(refund: Refund) { // Refund successful } override fun onFailure(e: TerminalException) { // Refund confirmation failed } }) } override fun onFailure(e: TerminalException) { // Refund collection failed } } )

_Après _

Kotlin
Java
No results
val refundParams = RefundParameters.ByChargeId( id = "ch_123", amount = 1000, currency = "cad" ).build() // Process the refund in one step Terminal.getInstance().processRefund( refundParams, object : RefundCallback { override fun onSuccess(refund: Refund) { // Refund successful } override fun onFailure(e: TerminalException) { // Refund failed } } )

Traitement des SetupIntents avec processSetupIntent

Remplacer les étapes collecter et confirmer en deux temps par un appel de méthode processSetupIntent unique.

_Avant _

Kotlin
Java
No results
// Step 1: Collect setup intent payment method Terminal.getInstance().collectSetupIntentPaymentMethod( intent = setupIntent, allowRedisplay = AllowRedisplay.ALWAYS, callback = object : SetupIntentCallback { override fun onSuccess(setupIntent: SetupIntent) { // Step 2: Confirm the setup intent Terminal.getInstance().confirmSetupIntent(setupIntent, object : SetupIntentCallback { override fun onSuccess(confirmedSetupIntent: SetupIntent) { // Setup intent successful } override fun onFailure(e: TerminalException) { // Setup intent confirmation failed } }) } override fun onFailure(e: TerminalException) { // Setup intent collection failed } } )

_Après _

Kotlin
Java
No results
// Configure with allowRedisplay val config = CollectSetupIntentConfiguration.Builder() .build() // Process the setup intent in one step Terminal.getInstance().processSetupIntent( intent = setupIntent, allowRedisplay = AllowRedisplay.ALWAYS, collectConfig = config, callback = object : SetupIntentCallback { override fun onSuccess(setupIntent: SetupIntent) { // Setup intent successful } override fun onFailure(e: TerminalException) { // Setup intent failed } } )

Prise en charge des coroutines Kotlin

Pour les développeurs Kotlin, un nouveau module facultatif stripeterminal-ktx fournit des wrappers de fonctions de suspension pour les API Terminal asynchrones.

Remarque

Ajoutez cette dépendance : implementation(« com.stripe:stripeterminal-ktx:5.0.0 »)

_Avant _

Terminal.getInstance().discoverReaders(config, object : DiscoveryListener { override fun onUpdateDiscoveredReaders(readers: List<Reader>) { val selectedReader = readers[0] Terminal.getInstance().connectReader(selectedReader, connectionConfig, object : ReaderCallback { override fun onSuccess(reader: Reader) { // Handle successful connection } override fun onFailure(e: TerminalException) { // Handle connection failure } }) } })

_Après _

// Add dependency: implementation("com.stripe:stripeterminal-ktx:5.0.0") coroutineScope { try { val readers = Terminal.getInstance().discoverReaders(discoveryConfig) .filter { it.isNotEmpty() } .first() val selectedReader = readers.first() val reader = Terminal.getInstance().connectReader(selectedReader, connectConfig) // Handle successful connection } catch(e: TerminalException) { // Handle failures on discovery or connect } }

Plateforme et initialisation

Mise à jour Initialisation du terminal

La méthode Terminal.initTerminal a été renommée Terminal.init. Elle nécessite désormais un paramètre OfflineListener annulable.

_Avant _

Kotlin
Java
No results
Terminal.initTerminal(applicationContext, LogLevel.VERBOSE, tokenProvider, terminalListener)

_Après _

Kotlin
Java
No results
Terminal.init(applicationContext, LogLevel.VERBOSE, tokenProvider, terminalListener, offlineListener)

Détection et connexion du lecteur

Gérer les changements d’état de reconnexion

Une nouvelle valeur RECONNECTING a été ajoutée à l’énumération ConnectionStatus. Lors de la connexion initiale, Terminal.getInstance().getConnectedReader() aura la valeur null jusqu’à ce que la tentative de connexion aboutisse.

_Avant _

Kotlin
Java
No results
override fun onConnectionStatusChange(status: ConnectionStatus) { when (status) { ConnectionStatus.NOT_CONNECTED -> { // Handle not connected } ConnectionStatus.CONNECTED -> { // Handle connected } } }

_Après _

Kotlin
Java
No results
override fun onConnectionStatusChange(status: ConnectionStatus) { when (status) { ConnectionStatus.NOT_CONNECTED -> { // Handle not connected } ConnectionStatus.CONNECTED -> { // Handle connected } ConnectionStatus.RECONNECTING -> { // Handle reconnection in progress } } }

Connexion simplifiée avec easyConnect

Pour les lecteurs intelligents, Tap to Pay et les intégrations d’applications sur appareils, vous pouvez désormais utiliser Terminal.easyConnect, qui combine la détection et la connexion en un seul appel de méthode.

_Avant _

Kotlin
Java
No results
// Step 1: Discover the reader Terminal.getInstance().discoverReaders(config, object : DiscoveryListener { override fun onUpdateDiscoveredReaders(readers: List<Reader>) { val selectedReader = readers[0] // Step 2: Connect to the reader Terminal.getInstance().connectReader(selectedReader, connectionConfig, readerCallback) } })

_Après _

Kotlin
Java
No results
// Discover and connect in one step by providing discovery filter val easyConnectConfig = InternetEasyConnectConfiguration( discoveryConfiguration = DiscoveryConfiguration.InternetDiscoveryConfiguration( location = "YOUR-LOCATION-ID", // optional discoveryFilter = DiscoveryFilter.BySerial("YOUR-READER-SERIAL-NUMBER"), ), connectionConfiguration = ConnectionConfiguration.InternetConnectionConfiguration( internetReaderListener = internetReaderListener, ) ) Terminal.getInstance().easyConnect( easyConnectConfig, object : ReaderCallback { override fun onSuccess(reader: Reader) { // Handle successful connection } override fun onFailure(e: TerminalException) { // Handle failure } } )

Filtrage de détection lecteur Internet

La détection de lecteur Internet prend désormais en charge le filtrage par ID de lecteur ou numéro de série. Définissez la propriété discoveryFilter sur InternetDiscoveryConfiguration, pour découvrir un lecteur spécifique.

_Avant _

Kotlin
Java
No results
val config = InternetDiscoveryConfiguration(location = "tml_1234567890")

_Après _

Kotlin
Java
No results
val config = InternetDiscoveryConfiguration( location = "tml_1234567890", // optional discoveryFilter = DiscoveryFilter.BySerial("READER-SERIAL-NUMBER"), // or DiscoveryFilter.ByReaderId("tmr_YOUR-READER-STRIPE-ID) to filter by reader id )

Acceptation des paiements et recouvrement des données

L’annulation par le client est désormais activée par défaut.

Sur les lecteurs Android, la possibilité pour les clients d’annuler des transactions est désormais activée par défaut. Vous pouvez désactiver cette fonctionnalité en définissant customerCancellation sur DISABLE_IF_AVAILABLE.

_Avant _

Kotlin
Java
No results
val config = CollectConfiguration.Builder() .setEnableCustomerCancellation(false) .build()

_Après _

Kotlin
Java
No results
val config = CollectPaymentIntentConfiguration.Builder() .setCustomerCancellation(CustomerCancellation.DISABLE_IF_AVAILABLE) .build()

Mises à jour des paramètres remboursement Interac

Si vous créez des RefundParameters pour un remboursement Interac à l’aide d’un ID PaymentIntent, vous devez désormais également transmettre la clé secrète du client de la PaymentIntent. Vous pouvez également continuer à utiliser l’ID de facturation, qui ne nécessite pas la clé secrète du client.

_Avant _

Kotlin
Java
No results
val refundParams = RefundParameters.Builder( RefundParameters.Id.PaymentIntent("pi_123"), 1000, "cad" ).build()

_Après _

Kotlin
Java
No results
val refundParams = RefundParameters.ByPaymentIntentId( paymentIntentId = "pi_123", clientSecret = "pi_123_secret_abc", amount = 1000, currency = "cad" ).build()

Mettre à jour votre intégration Apps on Devices

Les coordonnées Maven de la fonctionnalité Apps on Devices sont désormais com.stripe:stripeterminal-appsondevices:5.0.0. Mettez à jour vos dépendances pour pointer vers le nouvel artefact. Stripe ne mettra plus à jour l’ancien artefact handoffclient.

Nous avons renommé toutes les classes Handoff en AppsOnDevices afin de mieux décrire les fonctionnalités associées.

_Avant _

build.gradle.kts
Kotlin
Groovy
No results
dependencies { implementation("com.stripe:stripeterminal-handoffclient:4.0.0") }

_Après _

build.gradle.kts
Kotlin
Groovy
No results
dependencies { implementation("com.stripe:stripeterminal-appsondevices:5.0.0") }

Renommer les classes Handoff en AppsOnDevices

Nous avons renommé toutes les classes Handoff en AppsOnDevices pour la configuration de découverte, la configuration de connexion, les écouteurs et les fournisseurs de tokens.

_Avant _

Kotlin
Java
No results
val discoveryConfig = HandoffDiscoveryConfiguration() Terminal.getInstance().discoverReaders( discoveryConfig, object : DiscoveryListener { override fun onUpdateDiscoveredReaders(readers: List<Reader>) { val reader = readers.first() val connectionConfig = HandoffConnectionConfiguration( handoffReaderListener = object : HandoffReaderListener { override fun onDisconnect(reason: DisconnectReason) { // Handle disconnect } } ) Terminal.getInstance().connectReader(reader, connectionConfig, readerCallback) } } ) val tokenProvider = HandoffConnectionTokenProvider()

_Après _

Kotlin
Java
No results
val discoveryConfig = AppsOnDevicesDiscoveryConfiguration() Terminal.getInstance().discoverReaders( discoveryConfig, object : DiscoveryListener { override fun onUpdateDiscoveredReaders(readers: List<Reader>) { val reader = readers.first() val connectionConfig = AppsOnDevicesConnectionConfiguration( appsOnDevicesListener = object : AppsOnDevicesListener { override fun onDisconnect(reason: DisconnectReason) { // Handle disconnect } } ) Terminal.getInstance().connectReader(reader, connectionConfig, readerCallback) } } ) val tokenProvider = AppsOnDevicesConnectionTokenProvider()

Mise à jour de l’intégration Tap to Pay sur Android

Exigences du système

Tap to Pay sur Android 5.0.0 et ses versions ultérieures nécessitent que votre appareil Android fonctionne sous Android 13 ou toute version ultérieure.

Cette version exige également que le KeyStore de votre appareil Android prenne en charge les contrats de clés garantis par le matériel. Cela est vérifié automatiquement pour vous par supportsReadersOfType(), mais peut également être vérifié en s’assurant que la version FEATURE_HARDWARE_KEYSTORE de votre appareil est 100 ou supérieure. Cette exigence dépendant des capacités matérielles d’un appareil, il est donc possible qu’elle ne soit pas satisfaite par les appareils qui ont été initialement proposés sous Android 12 ou inférieur, même s’ils ont été mis à niveau pour répondre à l’exigence d’exécution d’Android 13. Cette nouvelle exigence signifie que les appareils comme la Samsung Galaxy Tab Active4 Pro ne sont plus pris en charge dans les versions 5.0.0 et supérieures du SDK.

Pour les environnements de production, la découverte du lecteur échoue avec une erreur TAP_TO_PAY_INSECURE_ENVIRONMENT si les options développeur, le débogage USB ou Wi-Fi, ou d’autres options de débogage sont activées sur l’appareil. Cela ne s’applique pas à l’utilisation du lecteur Tap to Pay simulé.

Refonte de la configuration TapZone

La classe TapToPayUxConfiguration.TapZone a été remaniée. Les champs indicateur et position sont remplacés par un objet TapZone unique.

_Avant _

Kotlin
Java
No results
val config = TapToPayUxConfiguration.Builder() .setTapZone( indicator = TapZoneIndicator.ABOVE, position = TapZonePosition.Manual(0.5f, 0.2f) ) .build()

_Après _

Kotlin
Java
No results
// Position the tap zone above the reader UI val config = TapToPayUxConfiguration.Builder() .setTapZone(TapZone.Above(horizontalBias = 0.2f)) .build() // Or position it on the left side of the screen val config2 = TapToPayUxConfiguration.Builder() .setTapZone(TapZone.Left()) // Center vertically by default .build()
Cette page vous a-t-elle été utile ?
OuiNon
  • Besoin d'aide ? Contactez le service Support.
  • Consultez notre log des modifications.
  • Des questions ? Contactez l'équipe commerciale.
  • LLM ? Lire llms.txt.
  • Propulsé par Markdoc