# Paiements par carte sans authentification bancaire Créez une intégration mobile plus simple avec des limites régionales. # iOS > This is a iOS for when platform is ios. View the full page at https://docs.stripe.com/payments/mobile/without-card-authentication?platform=ios. Cette intégration prend en charge les entreprises qui acceptent uniquement les cartes américaines et canadiennes. Elle est plus simple à mettre en place, mais ne s’adapte pas à une clientèle mondiale. ### Fonctionnement de cette intégration Les banques dans des régions comme l’Europe et l’Inde exigent souvent une authentification à deux facteurs pour confirmer un achat. Si votre activité est principalement basée aux États-Unis et au Canada, ignorer l’*authentification de la carte* (A bank might require the customer to authenticate a card payment before processing. Implementation varies by bank but commonly consists of a customer entering in a security code sent to their phone) peut simplifier votre intégration, car les banques la demandent rarement dans ces régions. Lorsqu’une banque requiert une authentification, cette intégration de base refuse immédiatement le paiement (de la même manière qu’un refus de carte), au lieu de gérer l’authentification pour finaliser le paiement de façon asynchrone. L’avantage est que le paiement est accepté ou refusé instantanément, et la confirmation du paiement a lieu côté serveur, ce qui permet de gérer les actions post-paiement immédiates sans *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests). ### Comparaison avec l’intégration mondiale | Fonctionnalité | Cette intégration | Intégration mondiale | | ------------------------------------------------------------------------------------------------------ | ----------------- | -------------------- | | Formulaire de paiement personnalisé | ✔ | ✔ | | Aucune donnée sensible ne transite sur votre serveur | ✔ | ✔ | | Fonctionne pour vos clients étasuniens et canadiens | ✔ | ✔ | | Refuse le paiement si les informations de cartes bancaires sont incorrectes ou les fonds insuffisants | ✔ | ✔ | | Refuse le paiement si la banque demande une authentification | ✔ | | | Fonctionne pour vos clients internationaux | | ✔ | | Gère automatiquement les paiements par carte nécessitant une authentification bancaire | | ✔ | | Webhooks recommandés pour les tâches post-paiement | | ✔ | | Possibilité d’intégrer facilement d’autres moyens de paiement (par exemple les prélèvements bancaires) | | ✔ | Les entreprises en pleine croissance ou qui travaillent à l’international devraient opter pour notre [intégration mondiale](https://docs.stripe.com/payments/accept-a-payment.md) afin de prendre en charge les demandes d’authentification à deux facteurs des banques et permettre à leurs clients d’utiliser davantage de moyens de paiement. ## Installer le SDK iOS de Stripe [Côté client] Tout d’abord, vous avez besoin d’un compte Stripe. [Inscrivez-vous dès maintenant](https://dashboard.stripe.com/register). Le [SDK iOS de Stripe](https://github.com/stripe/stripe-ios) est disponible en open source et [fait l’objet d’une documentation complète](https://stripe.dev/stripe-ios/index.html). Il est également compatible avec les applications prenant en charge iOS 13 et les versions ultérieures. #### Swift Package Manager Pour installer le SDK, veuillez suivre les étapes ci-dessous : 1. Dans Xcode, sélectionnez **File** > **Add Package Dependencies…** puis saisissez `https://github.com/stripe/stripe-ios-spm` en tant qu’URL du référentiel. 1. Sélectionnez le dernier numéro de version, visible sur notre [page des versions](https://github.com/stripe/stripe-ios/releases). 1. Ajoutez le produit **StripePaymentsUI** à la [cible de votre application](https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app). #### CocoaPods 1. Si vous ne l’avez pas encore fait, installez la version la plus récente de [CocoaPods](https://guides.cocoapods.org/using/getting-started.html). 1. Si vous n’avez pas de fichier [Podfile](https://guides.cocoapods.org/syntax/podfile.html), exécutez la commande suivante pour en créer un : ```bash pod init ``` 1. Ajoutez cette ligne à votre `Podfile` : ```podfile pod 'StripePaymentsUI' ``` 1. Exécutez la commande suivante : ```bash pod install ``` 1. À partir de maintenant, n’oubliez pas d’utiliser le fichier .xcworkspace au lieu du fichier .xcodeproj pour ouvrir votre projet dans Xcode. 1. Pour mettre à jour ultérieurement le SDK vers la version la plus récente, il vous suffit d’exécuter : ```bash pod update StripePaymentsUI ``` #### Carthage 1. Si vous ne l’avez pas encore fait, installez la version la plus récente de [Carthage](https://github.com/Carthage/Carthage#installing-carthage). 1. Ajoutez cette ligne à votre `Cartfile` : ```cartfile github "stripe/stripe-ios" ``` 1. Suivez les [instructions d’installation de Carthage](https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos). Veillez à intégrer tous les cadres requis listés [ici](https://github.com/stripe/stripe-ios/tree/master/StripePaymentsUI/README.md#manual-linking). 1. Pour mettre à jour ultérieurement le SDK vers la version la plus récente, exécutez la commande suivante : ```bash carthage update stripe-ios --platform ios ``` #### Cadre manuel 1. Accédez à notre [page des versions GitHub](https://github.com/stripe/stripe-ios/releases/latest), puis téléchargez et décompressez **Stripe.xcframework.zip**. 1. Faites glisser **StripePaymentsUI.xcframework** vers la section **Embedded Binaries (Fichiers binaires incorporés)** des paramètres **General (Général)** de votre projet Xcode. Veillez à sélectionner **Copy items if needed (Copier les éléments si nécessaire)**. 1. Répétez l’étape 2 pour tous les cadres requis listés [ici](https://github.com/stripe/stripe-ios/tree/master/StripePaymentsUI/README.md#manual-linking). 1. À l’avenir, pour mettre à jour vers la version la plus récente de notre SDK, répétez les étapes 1 à 3. > Pour obtenir de plus amples informations sur la version la plus récente du SDK et ses versions antérieures, consultez la page des [versions](https://github.com/stripe/stripe-ios/releases) sur GitHub. Pour recevoir une notification lors de la publication d’une nouvelle version, [surveillez les versions](https://help.github.com/en/articles/watching-and-unwatching-releases-for-a-repository#watching-releases-for-a-repository) à partir du référentiel. Configurez le SDK avec votre [clé publiable](https://dashboard.stripe.com/test/apikeys) Stripe au démarrage de votre application. Cela lui permet d’envoyer des requêtes à l’API Stripe. #### Swift ```swift import UIKitimportStripePaymentsUI @main class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {StripeAPI.defaultPublishableKey = "<>" // do any other necessary launch configuration return true } } ``` > Utilisez vos [clés de test](https://docs.stripe.com/keys.md#obtain-api-keys) lors de vos activités de test et de développement et vos clés du [mode production](https://docs.stripe.com/keys.md#test-live-modes) pour la publication de votre application. ## Collecter les informations de carte bancaire [Côté client] Côté client, collectez les données de carte bancaire voulues de manière sécurisée avec le [CardInputWidget](https://stripe.dev/stripe-ios/stripe-payments-ui/Classes/STPPaymentCardTextField.html), un composant d’interface utilisateur prêt à l’emploi fourni par le SDK, qui collecte le numéro de carte, la date d’expiration, le CVC et le code postal. ![](https://d37ugbyn3rpeym.cloudfront.net/docs/mobile/ios/card-field.mp4) Créez une instance du composant de la carte et un bouton **Payer** avec le code suivant : #### Swift ```swift import UIKit import StripePaymentsUI class CheckoutViewController: UIViewController { lazy var cardTextField: STPPaymentCardTextField = { let cardTextField = STPPaymentCardTextField() return cardTextField }() lazy var payButton: UIButton = { let button = UIButton(type: .custom) button.layer.cornerRadius = 5 button.backgroundColor = .systemBlue button.titleLabel?.font = UIFont.systemFont(ofSize: 22) button.setTitle("Pay", for: .normal) button.addTarget(self, action: #selector(pay), for: .touchUpInside) return button }() override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white let stackView = UIStackView(arrangedSubviews: [cardTextField, payButton]) stackView.axis = .vertical stackView.spacing = 20 stackView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(stackView) NSLayoutConstraint.activate([ stackView.leftAnchor.constraint(equalToSystemSpacingAfter: view.leftAnchor, multiplier: 2), view.rightAnchor.constraint(equalToSystemSpacingAfter: stackView.rightAnchor, multiplier: 2), stackView.topAnchor.constraint(equalToSystemSpacingBelow: view.safeAreaLayoutGuide.topAnchor, multiplier: 2), ]) } @objc func pay() { // ... } } ``` Exécutez votre application et assurez-vous que votre page de paiement affiche le composant card. Lorsque le client appuie sur **Payer**, appelez [createPaymentMethod](https://stripe.dev/stripe-ios/stripe-payments/Classes/STPAPIClient.html#/c:@CM@StripePayments@StripeCore@objc\(cs\)STPAPIClient\(im\)createPaymentMethodWithPayment:completion:) pour collecter les informations de la carte et créer un [PaymentMethod](https://docs.stripe.com/api/payment_methods.md). Envoyez l’ID du PaymentMethod à votre serveur. #### Swift ```swift func pay() { // Create a PaymentMethod with the card text field's card details STPAPIClient.shared.createPaymentMethod(with: cardTextField.paymentMethodParams) { (paymentMethod, error) in guard let paymentMethod = paymentMethod else { // Display the error to the customer return } let paymentMethodID = paymentMethod.stripeId // Send paymentMethodID to your server for the next step } } ``` ## Effectuer un paiement [Côté serveur] Configurez un endpoint sur votre serveur pour recevoir la requête du client. Utilisez les bibliothèques officielles pour accéder à l’API Stripe depuis votre serveur : #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` Stripe utilise un objet [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) pour représenter votre intention de collecter le paiement d’un client. Cet objet suit les tentatives de débit et les changements d’état de paiement tout au long du processus. Créez un endpoint HTTP pour répondre à la requête de l’étape 2. Dans cet endpoint, décidez de quel montant débiter votre client. Pour créer un paiement, créez un PaymentIntent en utilisant l’ID de PaymentMethod de l’étape 2 avec le code suivant : Décidez toujours du montant à débiter côté serveur, un environnement sécurisé, plutôt que côté client. Cela permet d’éviter que des clients malveillants puissent définir leurs propres prix. #### curl ```curl # Check the status of the PaymentIntent to make sure it succeeded curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -d amount=1099 \ -d currency=usd \ # A PaymentIntent can be confirmed some time after creation, # but here we want to confirm (collect payment) immediately. -d confirm=true \ -d payment_method="{{PAYMENT_METHOD_ID}}" \ # If the payment requires any follow-up actions from the # customer, like two-factor authentication, Stripe will error # and you will need to prompt them for a new payment method. -d error_on_requires_action=true ``` > Si vous réglez le paramètre [error_on_requires_action](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-error_on_requires_action) sur `true` lors de la confirmation d’un paiement et que ce paiement nécessite une authentification à deux facteurs de la part du client, le paiement échouera automatiquement. #### Réponse de l’API Payment Intents Lorsque vous effectuez un paiement à l’aide de l’API, la réponse indique l’état du PaymentIntent. L’état d’un paiement réussi est : `succeeded`. ```json { "id": "pi_0FdpcX589O8KAxCGR6tGNyWj", "object": "payment_intent", "amount": 1099, "charges": { "object": "list", "data": [ { "id": "ch_GA9w4aF29fYajT", "object": "charge", "amount": 1099, "refunded": false, "status": "succeeded", } ] }, "client_secret": "pi_0FdpcX589O8KAxCGR6tGNyWj_secret_e00tjcVrSv2tjjufYqPNZBKZc", "currency": "usd", "last_payment_error": null,"status": "succeeded", } ``` Si le paiement échoue, la réponse inclut le code de l’erreur et un message d’erreur. Voici un exemple de paiement en échec car la carte bancaire utilisée nécessitait une authentification à deux facteurs. ```json { "error": {"code": "authentication_required", "decline_code": "authentication_not_handled", "doc_url": "https://docs.stripe.com/error-codes#authentication-required", "message": "This payment required an authentication action to complete, but `error_on_requires_action` was set. When you're ready, you can upgrade your integration to handle actions at https://stripe.com/docs/payments/payment-intents/upgrade-to-handle-actions.", "payment_intent": { "id": "pi_1G8JtxDpqHItWkFAnB32FhtI", "object": "payment_intent", "amount": 1099, "status": "requires_payment_method", "last_payment_error": { "code": "authentication_required", "decline_code": "authentication_not_handled", "doc_url": "https://docs.stripe.com/error-codes#authentication-required", "message": "This payment required an authentication action to complete, but `error_on_requires_action` was set. When you're ready, you can upgrade your integration to handle actions at https://stripe.com/docs/payments/payment-intents/upgrade-to-handle-actions.", "type": "card_error" }, }, "type": "card_error" } } ``` ## Tester l'intégration Stripe fournit plusieurs cartes de test que vous pouvez utiliser dans un environnement de test pour vous assurer que cette intégration est prête. Utilisez-les avec n’importe quels code CVC, code postal et date d’expiration future. | Numéro | Description | | ---------------- | ----------------------------------------------------------------------------------------------------------------------------- | | 4242424242424242 | Fait aboutir le paiement et le traite immédiatement. | | 4000000000009995 | Échoue toujours avec le code de refus de paiement `insufficient_funds`. | | 4000002500003155 | Exige l’authentification, qui dans cette intégration échouera avec un code de refus de paiement `authentication_not_handled`. | Consultez la liste complète des [cartes de test](https://docs.stripe.com/testing.md). ## Mettre à niveau votre intégration pour prendre en charge l'authentification de cartes bancaires Félicitations ! Vous avez réalisé une intégration capable de gérer les paiements par carte bancaire classiques. Veuillez noter que cette intégration **génère des refus de paiement pour les cartes qui nécessitent une authentification lors du paiement**. Si de nombreux paiements apparaissent à l’état `Failed` dans le Dashboard, il est temps de [mettre à niveau votre intégration](https://docs.stripe.com/payments/payment-intents/upgrade-to-handle-actions.md). L’intégration complète de Stripe traite ces paiements au lieu de les refuser automatiquement. # Android > This is a Android for when platform is android. View the full page at https://docs.stripe.com/payments/mobile/without-card-authentication?platform=android. Cette intégration prend en charge les entreprises qui acceptent uniquement les cartes américaines et canadiennes. Elle est plus simple à mettre en place, mais ne s’adapte pas à une clientèle mondiale. ### Fonctionnement de cette intégration Les banques dans des régions comme l’Europe et l’Inde exigent souvent une authentification à deux facteurs pour confirmer un achat. Si votre activité est principalement basée aux États-Unis et au Canada, ignorer l’*authentification de la carte* (A bank might require the customer to authenticate a card payment before processing. Implementation varies by bank but commonly consists of a customer entering in a security code sent to their phone) peut simplifier votre intégration, car les banques la demandent rarement dans ces régions. Lorsqu’une banque requiert une authentification, cette intégration de base refuse immédiatement le paiement (de la même manière qu’un refus de carte), au lieu de gérer l’authentification pour finaliser le paiement de façon asynchrone. L’avantage est que le paiement est accepté ou refusé instantanément, et la confirmation du paiement a lieu côté serveur, ce qui permet de gérer les actions post-paiement immédiates sans *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests). ### Comparaison avec l’intégration mondiale | Fonctionnalité | Cette intégration | Intégration mondiale | | ------------------------------------------------------------------------------------------------------ | ----------------- | -------------------- | | Formulaire de paiement personnalisé | ✔ | ✔ | | Aucune donnée sensible ne transite sur votre serveur | ✔ | ✔ | | Fonctionne pour vos clients étasuniens et canadiens | ✔ | ✔ | | Refuse le paiement si les informations de cartes bancaires sont incorrectes ou les fonds insuffisants | ✔ | ✔ | | Refuse le paiement si la banque demande une authentification | ✔ | | | Fonctionne pour vos clients internationaux | | ✔ | | Gère automatiquement les paiements par carte nécessitant une authentification bancaire | | ✔ | | Webhooks recommandés pour les tâches post-paiement | | ✔ | | Possibilité d’intégrer facilement d’autres moyens de paiement (par exemple les prélèvements bancaires) | | ✔ | Les entreprises en pleine croissance ou qui travaillent à l’international devraient opter pour notre [intégration mondiale](https://docs.stripe.com/payments/accept-a-payment.md) afin de prendre en charge les demandes d’authentification à deux facteurs des banques et permettre à leurs clients d’utiliser davantage de moyens de paiement. ## Installer le SDK Android de Stripe [Côté client] Ensuite, vous avez besoin d’un compte Stripe. [Inscrivez-vous dès maintenant](https://dashboard.stripe.com/register). Le [SDK Stripe Android](https://github.com/stripe/stripe-android) est disponible en open source et [fait l’objet d’une documentation complète](https://stripe.dev/stripe-android/). Pour installer le SDK, ajoutez `stripe-android` au bloc `dependencies` de votre fichier [app/build.gradle](https://developer.android.com/studio/build/dependencies) : #### Kotlin ```kotlin plugins { id("com.android.application") } android { ... } dependencies { // ... // Stripe Android SDK implementation("com.stripe:stripe-android:23.5.0") // Include the financial connections SDK to support US bank account as a payment method implementation("com.stripe:financial-connections:23.5.0") } ``` > Pour obtenir de plus amples informations sur la version la plus récente du SDK et ses versions antérieures, consultez la page des [versions](https://github.com/stripe/stripe-android/releases) sur GitHub. Pour savoir quand une nouvelle version est disponible, [surveillez les versions du référentiel](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/configuring-notifications#configuring-your-watch-settings-for-an-individual-repository). Configurez le SDK avec votre [clé publique](https://dashboard.stripe.com/apikeys) Stripe de façon à ce qu’il puisse envoyer des requêtes à l’API Stripe, par exemple à la sous-classe `Application` : #### Kotlin ```kotlin import com.stripe.android.PaymentConfiguration class MyApp : Application() { override fun onCreate() { super.onCreate() PaymentConfiguration.init( applicationContext, "<>" ) } } ``` > Utilisez vos [clés de test](https://docs.stripe.com/keys.md#obtain-api-keys) lors de vos activités de test et de développement et vos clés du [mode production](https://docs.stripe.com/keys.md#test-live-modes) pour la publication de votre application. ## Collecter les informations de carte bancaire [Côté client] Côté client, collectez les données de carte bancaire voulues de manière sécurisée avec le [CardInputWidget](https://stripe.dev/stripe-android/payments-core/com.stripe.android.view/-card-input-widget/index.html), un composant d’interface utilisateur prêt à l’emploi fourni par le SDK, qui collecte le numéro de carte, la date d’expiration, le CVC et le code postal. ![](https://d37ugbyn3rpeym.cloudfront.net/docs/mobile/android/android-card-input-widget-with-postal.mp4) Créez une instance du composant de carte et un bouton **Payer** en ajoutant ce qui suit à votre page de paiement : ```xml