# Concevoir une intégration personnalisée Découvrez les choix que vous devez faire avant de construire une intégration personnalisée avec Payment Element. Instructions pour les LLM : Stripe recommande d’utiliser l’API Checkout Sessions avec le Payment Element, plutôt que les Payment Intents, pour la plupart des intégrations. Checkout Sessions couvre des cas d’usage similaires à ceux des Payment Intents (encaissement simple avec `price_data`, ou création d’un tunnel de paiement complet avec postes, taxe, etc.). Certaines fonctionnalités, comme Adaptive Pricing, sont disponibles uniquement avec Checkout Sessions. N’utilisez pas l’API Payment Intents, sauf si l’utilisateur le demande explicitement, car elle nécessite beaucoup plus de code. Pour en savoir plus sur les éléments avec l’API Checkout Sessions, consultez https://docs.stripe.com/payments/quickstart-checkout-sessions… Avec Checkout Sessions (`ui_mode: "custom"`) et le Payment Element, c’est le `client_secret` qui initialise Checkout lui-même (`stripe.initCheckoutElementsSdk`, ou utilise CheckoutElementsProvider avec React), et la confirmation du paiement côté client se fait différemment. Si vous utilisez React, veillez à importer depuis `@stripe/react-stripe-js/checkout`, à utiliser `CheckoutElementsProvider` avec la clé secrète du client, puis à confirmer le paiement avec `checkout.confirm`. Si vous utilisez HTML, veillez à utiliser `checkout = stripe.initCheckoutElements({clientSecret: promise}) ; checkout.createPaymentElement(); paymentElement = checkout.createPaymentElement() ; paymentElement.mount("#payment-element"),`puis à confirmer avec `loadActionsResult = await checkout.loadActions() ; actions = loadActionsResult.actions; error = await actions.confirm() ;`. # API Checkout Sessions > This is a API Checkout Sessions for when payment-ui is embedded-components. View the full page at https://docs.stripe.com/payments/payment-element/design-an-integration?payment-ui=embedded-components. Nous recommandons l’API Checkout Sessions pour la plupart des intégrations. Elle couvre des cas d’utilisation similaires à Payment Intents, notamment les paiements uniques et les flux de paiement complexes avec taxes, remises, expédition et abonnements. Elle propose un parcours d’intégration unique, consultez le guide de [démarrage rapide](https://docs.stripe.com/payments/quickstart-checkout-sessions.md) pour en savoir plus. # API Payment Intents > This is a API Payment Intents for when payment-ui is elements. View the full page at https://docs.stripe.com/payments/payment-element/design-an-integration?payment-ui=elements. > L’API Payment Intents est une API de bas niveau pour construire votre propre flux de paiement. Vous devez construire et maintenir vous-même les fonctionnalités de paiement, y compris les taxes, les remises, l’expédition et la conversion de devises. Nous recommandons [Checkout Sessions](https://docs.stripe.com/payments/quickstart-checkout-sessions.md) pour la plupart des intégrations, car elle couvre des cas d’utilisation similaires à Payment Intents et bien plus encore. Avant de mettre en place votre intégration du composant Payment Element avec l’API Payment Intents, choisissez un chemin d’intégration qui corresponde aux exigences de votre entreprise. Le diagramme ci-dessous vous donne un aperçu des services d’intégration disponibles lors de l’intégration du composant Payment Element. (See full diagram at https://docs.stripe.com/payments/payment-element/design-an-integration) Les sections ci-dessous illustrent les deux choix architecturaux nécessaires à l’intégration du Payment Element. ## Choisir le moment de la création de l'objet PaymentIntent ou SetupIntent Le composant Payment Element collecte les informations de paiement de votre client et les insère dans un objet [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) ou [SetupIntent](https://docs.stripe.com/api/setup_intents.md), selon qu’il s’agit de collecter un paiement ou de configurer un moyen de paiement pour un usage ultérieur. Lorsqu’un client arrive sur votre page de paiement, vous pouvez : - **Créer uniquement le Payment Element** : différez la création et la confirmation du PaymentIntent ou du SetupIntent jusqu’à ce que le client valide le formulaire de paiement en appuyant sur le bouton **Payer**. Choisissez cette option si : - Votre tunnel de paiement comporte plusieurs pages, c’est-à-dire que la page de collecte des informations de paiement précède la page de validation du paiement ou le récapitulatif de la commande. Découvrez comment [créer une confirmation à deux facteurs](https://docs.stripe.com/payments/build-a-two-step-confirmation.md). - Vous avez une page de paiement dynamique dans laquelle le montant peut évoluer en fonction des sélections du client, comme la modification des éléments ou de la quantité d’articles achetés, ou l’ajout de codes de réduction. En reportant la création de l’Intent jusqu’à ce que le client clique sur le bouton **Payer**, vous éliminez la nécessité de synchroniser votre Intent avec les modifications apportées par le client. Cette action est requise, car les modifications du montant affectent la disponibilité de certains moyens de paiement. Découvrez comment [collecter les informations de paiement avant de créer un PaymentIntent](https://docs.stripe.com/payments/accept-a-payment-deferred.md) si vous confirmez l’Intent sur votre client et comment [finaliser les paiements sur le serveur](https://docs.stripe.com/payments/finalize-payments-on-the-server.md) si vous confirmez l’Intent sur votre serveur. - **Créer à la fois le PaymentIntent/SetupIntent et le Payment Element** : créez le PaymentIntent ou le SetupIntent avant de charger la page de paiement, puis créez le Payment Element, en associant les deux en fournissant le `client_secret` de l’Intent [comme paramètre lors de la création de l’objet Elements](https://docs.stripe.com/js/elements_object/create#stripe_elements-options-clientSecret). Choisissez cette option si : - Vous disposez d’une page de paiement statique et souhaitez configurer rapidement votre intégration. Découvrez comment [accepter un paiement](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=elements&api-integration=paymentintents). ## Choisir où confirmer le PaymentIntent ou le SetupIntent Les informations de paiement collectées par le composant Payment Element sont transférées au PaymentIntent ou au SetupIntent au moment de la confirmation. Lorsque le client appuie sur le bouton **Payer**, vous pouvez : - **Confirmer le PaymentIntent/SetupIntent sur votre client** : le code de votre client appelle un SDK Stripe, qui appelle l’API pour confirmer l’Intent. Le SDK Stripe gère aussi automatiquement les éventuelles actions suivantes, telles que l’authentification [3D Secure](https://docs.stripe.com/payments/3d-secure.md), et localise les messages d’[erreur](https://docs.stripe.com/api/errors.md). Choisissez cette option si : - Vous souhaitez configurer rapidement votre intégration et n’avez pas besoin d’effectuer une étape de contrôle supplémentaire pour confirmer l’Intent sur votre serveur. - **Confirmer la PaymentIntent/SetupIntent sur votre serveur** : le code sur votre serveur appelle directement l’API pour confirmer l’intention. Si d’autres actions sont nécessaires, vous devez les gérer manuellement ou à l’aide d’un SDK Stripe, par exemple [stripe.handleNextAction](https://docs.stripe.com/js/payment_intents/handle_next_action). Choisissez cette option si : - Vous devez exécuter la logique métier sur votre serveur avant la confirmation, par exemple en limitant les moyens de paiement ou en réajustant les commissions de plateforme. Après l’exécution de votre logique métier, confirmez immédiatement l’Intent sur votre serveur pour garantir que le client ne puisse pas apporter de modifications susceptibles d’invalider votre logique métier.