# Autres moyens de paiement Acceptez les moyens de paiement pris en charge en affichant un code QR sur des lecteurs Terminal. En plus des cartes bancaires, Terminal prend en charge les [moyens de paiement](https://docs.stripe.com/payments/payment-methods/overview.md) basés sur des QR codes. Vos clients peuvent scanner un QR code pour finaliser leur paiement sur leurs appareils mobiles. **Moyens de paiement pris en charge :** [WeChat Pay](https://docs.stripe.com/payments/wechat-pay.md)1, [Affirm](https://docs.stripe.com/payments/affirm.md) et [PayNow](https://docs.stripe.com/payments/paynow.md) **Lecteurs pris en charge** : [lecteurs intelligents](https://docs.stripe.com/terminal/smart-readers.md) et [lecteurs Tap to Pay](https://docs.stripe.com/terminal/tap-to-pay-readers.md) 1WeChat Pay n’est pas disponible pour Terminal au Japon en raison de limitations régionales. > Les comptes connectés doivent disposer de la [fonctionnalité requise](https://docs.stripe.com/connect/account-capabilities.md#payment-methods) pour effectuer des transactions pour chaque moyen de paiement. En savoir plus sur la compatibilité de Connect avec [Affirm](https://docs.stripe.com/payments/affirm.md#connect), [WeChat Pay](https://docs.stripe.com/payments/wechat-pay.md#connect) et [PayNow](https://docs.stripe.com/payments/paynow.md#connect). > > Pour tester des moyens de paiement autres que des cartes sur Stripe Terminal, utilisez un lecteur physique. Le lecteur de simulation n’est pas pris en charge. > > Toutes les transactions doivent être effectuées avec une connexion réseau fonctionnelle, et non [hors ligne](https://docs.stripe.com/terminal/features/operate-offline/overview.md). ## Lecteurs intelligents et Tap to Pay sur Android - [setReaderDisplay (Android)](https://stripe.dev/stripe-terminal-android/core/com.stripe.stripeterminal/-terminal/set-reader-display.html) Pour les [lecteurs intelligents](https://docs.stripe.com/terminal/smart-readers.md) avec écran intégré et pour [Tap to Pay sur Android](https://docs.stripe.com/terminal/tap-to-pay-readers.md), le QR code s’affiche directement sur l’écran du lecteur. Si vous souhaitez n’accepter que des moyens de paiement autres que la carte, le lecteur peut ignorer l’invite **tap or insert** utilisée pour les paiements par carte. Si vous avez activé un seul moyen de paiement hors carte bancaire, le lecteur affiche directement le QR code. Sinon, le lecteur affiche une liste des options de moyens de paiement hors carte bancaire. > #### Lecteurs établis aux États-Unis > > Aux États-Unis, si vous prévoyez de déployer des lecteurs avec uniquement des moyens de paiement sans carte bancaire, l’[affichage des informations du panier](https://docs.stripe.com/terminal/features/display.md) n’est pas pris en charge pour le moment. L’affichage des informations du panier affiche le logo NFC et prend en charge la pré-insertion des cartes pour tokeniser les informations de carte avant la création d’un PaymentIntent. ![Écran de collecte du moyen de paiement avec bouton indiquant d'autres moyens de paiement](https://b.stripecdn.com/docs-statics-srv/assets/s700-more-ways-to-pay.dfa04185db8a0b70bb7b13e7a695a80d.png) Écran de collecte du moyen de paiement ![Écran de sélection du moyen de paiement avec boutons pour payer par carte bancaire, Affirm ou WeChat Pay](https://b.stripecdn.com/docs-statics-srv/assets/s700-pay-with-screen.9c8f58c5a58e9db064085647d0151737.png) Écran de sélection du moyen de paiement ![L'écran de chargement du paiement](https://b.stripecdn.com/docs-statics-srv/assets/s700-loading-screen.5e0523a12d7a1fc5c4f6f511d0928163.png) Écran de chargement ![Écran affichant un code QR WeChat Pay à scanner](https://b.stripecdn.com/docs-statics-srv/assets/s700-wechat-pay-qr-code.a63cff6f60892ec896f726a93b88c167.png) Écran de scan du code QR ![Écran signalant l'approbation du paiement](https://b.stripecdn.com/docs-statics-srv/assets/s700-approved-screen.ae53ca99ba84aefbf2cb1aacf9ef1a2e.png) Écran d’approbation # Piloté par serveur > This is a Piloté par serveur for when terminal-sdk-platform is server-driven. View the full page at https://docs.stripe.com/terminal/payments/additional-payment-methods?terminal-sdk-platform=server-driven. ## Créer un PaymentIntent Pour accepter des moyens de paiement autres que les cartes via l’interface de QR code, [créez un PaymentIntent](https://docs.stripe.com/api/payment_intents.md) et incluez vos types de moyens de paiement préférés dans le paramètre `payment_method_types`. - Pour présenter à votre client toutes les options de moyens de paiement dans le tunnel de paiement, combinez `card_present` avec des types de moyens de paiement sans carte bancaire. Nous recommandons d’activer cela si vous opérez dans un environnement fortement [hors ligne](https://docs.stripe.com/terminal/features/operate-offline/overview.md) car seules les cartes bancaires sont prises en charge en mode hors ligne. - Si vous ne souhaitez pas accepter de cartes, ne prenez en charge que les types de moyen de paiement sans carte bancaire. - Si vous savez vers quel moyen de paiement vous souhaitez diriger votre client vers le règlement, sélectionnez un seul type de moyen de paiement. ### Type de capture Tous moyens de paiement ne prennent pas en charge la [capture manuelle](https://docs.stripe.com/terminal/payments/collect-card-payment.md#capture-payment). Le tableau suivant indique quels moyens de paiement le peuvent : | Moyen de paiement | Capture manuelle | | ----------------- | --------------------- | | `card_present` | ✓ Prise en charge | | `affirm` | ✓ Prise en charge | | `wechat_pay` | ❌ Non prise en charge | | `paynow` | ❌ Non prise en charge | Pour prendre en charge l’ensemble le plus large possible de moyens de paiement, créez votre PaymentIntent avec `capture_method` défini sur `automatic`. Pour prendre en charge la capture manuelle pour les paiements par carte et Affirm tout en acceptant également les moyens de paiement qui nécessitent une capture automatique, définissez `capture_method` dans l’attribut imbriqué `payment_method_options.card_present` sur `manual`. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1000 \ -d currency=usd \ -d "payment_method_types[]=card_present" \ -d "payment_method_types[]=wechat_pay" \ -d capture_method=automatic \ -d "payment_method_options[card_present][capture_method]=manual" ``` ## Gérer le paiement Contrairement aux paiements par carte, le traitement des paiements par QR code se fait de manière asynchrone. Lorsque vous traitez un PaymentIntent avec un moyen de paiement par QR code, Stripe génère un QR code unique à ce paiement. Après avoir traité le paiement, le lecteur affiche le QR code que le client peut scanner avec son appareil mobile. Peu de temps après que le client a effectué le paiement sur son appareil, le lecteur se met à jour pour refléter le paiement effectué. > Le temps nécessaire au lecteur pour afficher le résultat du paiement peut varier en fonction du moyen de paiement utilisé. Le lecteur se met généralement à jour en quelques secondes. Les paiements par QR code prennent en charge le traitement immédiat des paiements et le flux en deux étapes avec collecte et confirmation distinctes. #### Traitement immédiat - [Traitement d’un PaymentIntent](https://docs.stripe.com/api/terminal/readers/process_payment_intent.md) Pour encaisser un paiement, envoyez une requête à Stripe en indiquant l’ID du PaymentIntent que vous avez créé et le lecteur à utiliser pour cette transaction. Certains moyens de paiement (par ex. Affirm) nécessitent un [return_url](https://docs.stripe.com/api/terminal/readers/process_payment_intent.md#process_payment_intent-process_config-return_url) lors de la confirmation d’un PaymentIntent afin de rediriger votre client après authentification ou annulation du paiement sur l’application ou le site du moyen de paiement. Vous pouvez fournir votre propre [return_url](https://docs.stripe.com/api/terminal/readers/process_payment_intent.md#process_payment_intent-process_config-return_url) lors du traitement du PaymentIntent. Si vous n’en fournissez pas, le client voit une [page de destination générique](https://terminal-statics.stripe.com/terminal-checkout/assets/index.html) hébergée par Stripe. ```curl curl https://api.stripe.com/v1/terminal/readers/tmr_xxx/process_payment_intent \ -u "<>:" \ -d payment_intent=pi_xxx \ --data-urlencode "process_config[return_url]=https://my.store.com/payment-completed" ``` Lorsque vous traitez un paiement, Stripe répond immédiatement à la requête par un code d’état HTTP `200` pour confirmer que le lecteur a bien reçu l’action. Dans la plupart des cas, la requête renvoie un [lecteur](https://docs.stripe.com/api/terminal/readers.md) à l’état `in_progress`. Cependant, comme le traitement a lieu de manière asynchrone, l’état de l’action peut déjà refléter l’état final (`succeeded` ou `failed`) si le paiement est effectué rapidement. Simultanément, l’écran du lecteur passe à une interface utilisateur qui invite le client à insérer sa carte bancaire ou à sélectionner un moyen de paiement par QR code. Pour les paiements par QR code, le client qui effectue le paiement sur son appareil actualise l’état du paiement. Pour [vérifier l’état du lecteur](https://docs.stripe.com/terminal/payments/collect-card-payment.md?terminal-sdk-platform=server-driven#verify-reader), écoutez le webhook `terminal.reader.action_succeeded`ou interrogez le lecteur et l’état du PaymentIntent pour recevoir l’état du paiement. ```curl curl https://api.stripe.com/v1/terminal/readers/tmr_xxx \ -u "<>:" ``` ```json { "id": "tmr_xxx", "object": "terminal.reader", ... "status": "online", "action": { "type": "process_payment_intent", "process_payment_intent": { "payment_intent": "pi_xxx" }, "status": "in_progress", "failure_code": null, "failure_message": null } } ``` #### Collecter, inspecter et confirmer ### Collecter un PaymentMethod - [Collecter un moyen de paiement](https://docs.stripe.com/api/terminal/readers/collect_payment_method.md) Pour encaisser un paiement, envoyez une requête à Stripe en indiquant l’ID du PaymentIntent que vous avez créé et le lecteur à utiliser pour cette transaction. Lorsque vous commencez à collecter un moyen de paiement, Stripe répond immédiatement à la requête par un code d’état HTTP `200` et renvoie un [lecteur](https://docs.stripe.com/api/terminal/readers.md) avec l’état d’action `in_progress`. Simultanément, l’écran du lecteur passe à une interface utilisateur qui invite le client à insérer sa carte bancaire ou à sélectionner un moyen de paiement par QR code. ```curl curl https://api.stripe.com/v1/terminal/readers/tmr_xxx/collect_payment_method \ -u "<>:" \ -d payment_intent=pi_xxx ``` Une fois que le lecteur a collecté les données du moyen de paiement, le PaymentMethod est associé au PaymentIntent côté serveur et il est stocké sur l’objet Reader en tant que `action.collect_payment_method.payment_method`. Pour [vérifier l’état du lecteur](https://docs.stripe.com/terminal/payments/collect-card-payment.md?terminal-sdk-platform=server-driven#verify-reader), écoutez le `terminal.reader.action_updated` ou interrogez l’état des actions du lecteur pour inspecter le PaymentMethod. À ce stade, vous pouvez déterminer le type de moyen de paiement sélectionné et consulter d’autres données du PaymentMethod. ### Traiter le PaymentIntent - [Confirmer un PaymentIntent](https://docs.stripe.com/api/terminal/readers/confirm_payment_intent.md) Après avoir collecté un moyen de paiement, vous pouvez procéder à au traitement du PaymentIntent. La confirmation du PaymentIntent est asynchrone. Vous pouvez écouter le webhook `terminal.reader.action_succeeded` ou interroger l’état des objets Reader et PaymentIntent pour recevoir l’état du paiement. Certains moyens de paiement (par ex. Affirm) nécessitent un [return_url](https://docs.stripe.com/api/terminal/readers/process_payment_intent.md#confirm_payment_intent-confirm_config-return_url) lors de la confirmation d’un PaymentIntent afin de rediriger votre client après authentification ou annulation du paiement sur l’application ou le site du moyen de paiement. Vous pouvez fournir votre propre [return_url](https://docs.stripe.com/api/terminal/readers/process_payment_intent.md#confirm_payment_intent-confirm_config-return_url) lors de la confirmation du PaymentIntent. Si vous n’en fournissez pas, le client voit une [page de destination générique](https://terminal-statics.stripe.com/terminal-checkout/assets/index.html) hébergée par Stripe. ```curl curl https://api.stripe.com/v1/terminal/readers/tmr_xxx/confirm_payment_intent \ -u "<>:" \ -d payment_intent=pi_xxx \ --data-urlencode "confirm_config[return_url]=https://my.store.com/payment-completed" ``` Pour les paiements par QR code, après confirmation du paiement, l’écran du lecteur présente une interface utilisateur affichant un QR code que le client doit scanner. Le client qui effectue le paiement sur son appareil actualise le paiement et envoie l’événement `terminal.reader.action_succeeded`. Si le client choisit d’annuler le paiement avec le QR code et appuie sur le bouton retour, l’intention de paiement échoue avec l’événement `terminal.reader.action_failed` et le lecteur revient à l’écran d’accueil. ### Libérez le lecteur pour accepter un autre paiement Il peut falloir plusieurs minutes à un client pour finaliser le paiement sur son appareil. Au lieu d’attendre que le lecteur reflète le résultat du paiement finalisé, vous pouvez libérer le lecteur pour qu’il accepte un paiement pour un autre client. Après que le client a scanné le QR code et est passé à son appareil pour finaliser le paiement, utilisez l’endpoint [cancel_action](https://docs.stripe.com/api/terminal/readers/object.md#terminal_reader_object-action-cancel_action) pour réinitialiser le lecteur. ```curl curl -X POST https://api.stripe.com/v1/terminal/readers/tmr_xxx/cancel_action \ -u "<>:" ``` Après avoir annulé l’action du lecteur pour confirmertraiter le paiement, l’intention de paiement reste dans l’état `requires_action`, permettant au client de compléter le paiement. Utilisez les webhooks `payment_intent.succeeded` et`payment_intent.payment_failed` pour rapprocher le résultat du paiement complété. Apprenez comment [ surveiller un PaymentIntent avec des webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks). ## Expérience client Une fois que vous avez [traité](https://docs.stripe.com/terminal/payments/additional-payment-methods.md#handle-payment) le PaymentIntent, le client scanne un QR code affiché sur l’écran du lecteur. En fonction du moyen de paiement, le client peut rapidement finaliser le paiement dans son application mobile (la plupart des wallets) ou effectuer un processus plus étendu d’évaluation des offres de financement (moyens de paiement différé). Les sections suivantes présentent le tunnel de paiement pour les moyens de paiement pris en charge avec des lecteurs intelligents : #### Affirm Pour en savoir plus sur la façon d’offrir la meilleure expérience client possible et de faire connaître les options de paiement fractionné en magasin, consultez ces [ressources de formation Affirm](https://businesshub.affirm.com/hc/en-us/articles/30660865631892-Stripe-User-Affirm-Resources). ![](https://d37ugbyn3rpeym.cloudfront.net/videos/terminal/affirm-customer-experience.mp4) #### WeChat Pay ![](https://d37ugbyn3rpeym.cloudfront.net/videos/terminal/wechat-pay-customer-experience.mp4) #### PayNow ![](https://docs.stripecdn.com/50c48b010444a4c4db73126c3ecc68f555ab3a59940349a72558d934f274b666.mp4) ## Tests Dans un *environnement de test* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes), vous pouvez scanner le QR code à l’aide d’une application de lecture de QR codes sur votre téléphone mobile. Le contenu du QR code contient une URL qui mène à une page de paiement de test hébergée par Stripe, où vous pouvez autoriser ou refuser le paiement de test. ### Environnement de test Affirm Si votre compte est intégré à Affirm, l’URL sous forme de QR code vous amène à une page de test hébergée par Affirm où vous pouvez compléter le processus de paiement. Lorsque vous êtes redirigé vers l’environnement de test sur Affirm, il se peut que vous receviez une invitation à entrer les quatre derniers chiffres de votre numéro de sécurité sociale. Affirm recommande d’utiliser `0000` ou `5678` à des fins de test. Si votre compte n’est pas intégré à Affirm, vous serez dirigé vers la page de paiement de test hébergée par Stripe. > L’endpoint [present_payment_method](https://docs.stripe.com/api/terminal/readers/present_payment_method.md) ne permet pas d’indiquer les types de moyens de paiement par QR code. # JavaScript > This is a JavaScript for when terminal-sdk-platform is js. View the full page at https://docs.stripe.com/terminal/payments/additional-payment-methods?terminal-sdk-platform=js. > #### Recommandation pour les lecteurs intelligents > > Pour les lecteurs intelligents, tels que le [lecteur BBPOS WisePOS E](https://docs.stripe.com/terminal/payments/setup-reader/bbpos-wisepos-e.md), le [lecteur Stripe S700/S710](https://docs.stripe.com/terminal/readers/stripe-reader-s700-s710.md) et [les lecteurs Verifone](https://docs.stripe.com/terminal/payments/setup-reader/verifone.md), nous recommandons d’utiliser l’[intégration pilotée par serveur](https://docs.stripe.com/terminal/payments/setup-integration.md?terminal-sdk-platform=server-driven) au lieu du SDK JavaScript. > > Le SDK JavaScript requiert que votre POS et votre lecteur soient connectés au même réseau local avec un DNS local opérationnel. Cependant, l’intégration pilotée par le serveur s’appuie sur l’API Stripe, offrant une approche plus simple dans des environnements réseau complexes. Consultez notre [comparaison de plateformes](https://docs.stripe.com/terminal/payments/setup-reader.md#sdk) pour sélectionner la solution la plus adaptée à vos besoins. ## Créer un PaymentIntent Pour accepter des moyens de paiement autres que les cartes via l’interface de QR code, [créez un PaymentIntent](https://docs.stripe.com/api/payment_intents.md) et incluez vos types de moyens de paiement préférés dans le paramètre `payment_method_types`. - Pour présenter à votre client toutes les options de moyens de paiement dans le tunnel de paiement, combinez `card_present` avec des types de moyens de paiement sans carte bancaire. Nous recommandons d’activer cela si vous opérez dans un environnement fortement [hors ligne](https://docs.stripe.com/terminal/features/operate-offline/overview.md) car seules les cartes bancaires sont prises en charge en mode hors ligne. - Si vous ne souhaitez pas accepter de cartes, ne prenez en charge que les types de moyen de paiement sans carte bancaire. - Si vous savez vers quel moyen de paiement vous souhaitez diriger votre client vers le règlement, sélectionnez un seul type de moyen de paiement. ### Type de capture Tous moyens de paiement ne prennent pas en charge la [capture manuelle](https://docs.stripe.com/terminal/payments/collect-card-payment.md#capture-payment). Le tableau suivant indique quels moyens de paiement le peuvent : | Moyen de paiement | Capture manuelle | | ----------------- | --------------------- | | `card_present` | ✓ Prise en charge | | `affirm` | ✓ Prise en charge | | `wechat_pay` | ❌ Non prise en charge | | `paynow` | ❌ Non prise en charge | Pour prendre en charge l’ensemble le plus large possible de moyens de paiement, créez votre PaymentIntent avec `capture_method` défini sur `automatic`. Pour prendre en charge la capture manuelle pour les paiements par carte et Affirm tout en acceptant également les moyens de paiement qui nécessitent une capture automatique, définissez `capture_method` dans l’attribut imbriqué `payment_method_options.card_present` sur `manual`. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1000 \ -d currency=usd \ -d "payment_method_types[]=card_present" \ -d "payment_method_types[]=wechat_pay" \ -d capture_method=automatic \ -d "payment_method_options[card_present][capture_method]=manual" ``` ## Gérer le paiement Contrairement aux paiements par carte, le traitement des paiements par QR code se fait de manière asynchrone. Lorsque vous traitez un PaymentIntent avec un moyen de paiement par QR code, Stripe génère un QR code unique à ce paiement. Après avoir traité le paiement, le lecteur affiche le QR code que le client peut scanner avec son appareil mobile. Peu de temps après que le client a effectué le paiement sur son appareil, le lecteur se met à jour pour refléter le paiement effectué. > Le temps nécessaire au lecteur pour afficher le résultat du paiement peut varier en fonction du moyen de paiement utilisé. Le lecteur se met généralement à jour en quelques secondes. #### Collecter, inspecter et confirmer ### Collecter un PaymentMethod - [collectPaymentMethod (JavaScript)](https://docs.stripe.com/terminal/references/api/js-sdk.md#collect-payment-method) Pour collecter le paiement, transmettez au SDK l’objet PaymentIntent que vous avez créé. Pour collecter un moyen de paiement, votre application doit être connectée à un lecteur. Lorsque vous commencez à collecter un moyen de paiement, le lecteur invite le client à présenter ou insérer sa carte bancaire, ou à utiliser « plus de moyens de paiement », ce qui inclut les moyens de paiement par QR code. ```javascript async () => { // clientSecret is the client_secret from the PaymentIntent you created in Step 1. const result = await terminal.collectPaymentMethod(clientSecret); if (result.error) { // Placeholder for handling result.error } else { // Placeholder for processing result.paymentIntent } } ``` Cette méthode recueille les données du moyen de paiement à l’aide du lecteur connecté, et les associe au PaymentIntent local. À ce stade, vous pouvez déterminer le type de moyen de paiement sélectionné. ### Traiter le PaymentIntent - [processPayment (JavaScript)](https://docs.stripe.com/terminal/references/api/js-sdk.md#process-payment) Après avoir collecté un moyen de paiement, vous pouvez procéder à au traitement du PaymentIntent. Le traitement du PaymentIntent avec le SDK est synchrone, l’appel de `processPayment` est bloqué jusqu’à ce que le paiement aboutisse. Pour les paiements par QR code, cette méthode fait basculer l’écran du lecteur vers une interface utilisateur affichant le QR code que le client doit scanner. Le client effectuant le paiement sur son appareil met à jour le paiement et autorise le retour de la méthode. Si le client annule le paiement, le SDK renvoie une erreur. Certains moyens de paiement (par ex. Affirm) nécessitent un [return_url](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url) lors de la confirmation d’un PaymentIntent afin de rediriger votre client après authentification ou annulation du paiement sur l’application ou le site du moyen de paiement. Vous pouvez fournir votre propre [return_url](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url) lors de la confirmation du PaymentIntent. Si vous n’en fournissez pas, le client voit une [page de destination générique](https://terminal-statics.stripe.com/terminal-checkout/assets/index.html) hébergée par Stripe. ```javascript async () => { const result = await terminal.processPayment(paymentIntent, { config_override: { return_url: "https://stripe.com" }}); if (result.error) { // Placeholder for handling result.error } else if (result.paymentIntent) { // Placeholder for notifying your backend to capture result.paymentIntent.id } } ``` ### Libérez le lecteur pour accepter un autre paiement Il peut falloir plusieurs minutes à un client pour finaliser le paiement sur son appareil. Au lieu d’attendre que le lecteur reflète le résultat du paiement finalisé, vous pouvez libérer le lecteur pour qu’il accepte un paiement pour un autre client. - [cancelProcessPayment](https://docs.stripe.com/terminal/references/api/js-sdk.md#cancel-process-payment) Après que le client a scanné le QR code et est passé à son appareil pour finaliser le paiement, appelez [cancelProcessPayment](https://docs.stripe.com/terminal/references/api/js-sdk.md#cancel-process-payment) pour réinitialiser le lecteur. Après avoir annulé l’action du lecteur pour confirmertraiter le paiement, l’intention de paiement reste dans l’état `requires_action`, permettant au client de compléter le paiement. Utilisez les webhooks `payment_intent.succeeded` et`payment_intent.payment_failed` pour rapprocher le résultat du paiement complété. Apprenez comment [ surveiller un PaymentIntent avec des webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks). ## Expérience client Une fois que vous avez [traité](https://docs.stripe.com/terminal/payments/additional-payment-methods.md#handle-payment) le PaymentIntent, le client scanne un QR code affiché sur l’écran du lecteur. En fonction du moyen de paiement, le client peut rapidement finaliser le paiement dans son application mobile (la plupart des wallets) ou effectuer un processus plus étendu d’évaluation des offres de financement (moyens de paiement différé). Les sections suivantes présentent le tunnel de paiement pour les moyens de paiement pris en charge avec des lecteurs intelligents : #### Affirm Pour en savoir plus sur la façon d’offrir la meilleure expérience client possible et de faire connaître les options de paiement fractionné en magasin, consultez ces [ressources de formation Affirm](https://businesshub.affirm.com/hc/en-us/articles/30660865631892-Stripe-User-Affirm-Resources). ![](https://d37ugbyn3rpeym.cloudfront.net/videos/terminal/affirm-customer-experience.mp4) #### WeChat Pay ![](https://d37ugbyn3rpeym.cloudfront.net/videos/terminal/wechat-pay-customer-experience.mp4) #### PayNow ![](https://docs.stripecdn.com/50c48b010444a4c4db73126c3ecc68f555ab3a59940349a72558d934f274b666.mp4) ## Tests Dans un *environnement de test* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes), vous pouvez scanner le QR code à l’aide d’une application de lecture de QR codes sur votre téléphone mobile. Le contenu du QR code contient une URL qui mène à une page de paiement de test hébergée par Stripe, où vous pouvez autoriser ou refuser le paiement de test. ### Environnement de test Affirm Si votre compte est intégré à Affirm, l’URL sous forme de QR code vous amène à une page de test hébergée par Affirm où vous pouvez compléter le processus de paiement. Lorsque vous êtes redirigé vers l’environnement de test sur Affirm, il se peut que vous receviez une invitation à entrer les quatre derniers chiffres de votre numéro de sécurité sociale. Affirm recommande d’utiliser `0000` ou `5678` à des fins de test. Si votre compte n’est pas intégré à Affirm, vous serez dirigé vers la page de paiement de test hébergée par Stripe. # iOS > This is a iOS for when terminal-sdk-platform is ios. View the full page at https://docs.stripe.com/terminal/payments/additional-payment-methods?terminal-sdk-platform=ios. ## Créer un PaymentIntent Pour accepter des moyens de paiement autres que les cartes via l’interface de QR code, [créez un PaymentIntent](https://docs.stripe.com/api/payment_intents.md) et incluez vos types de moyens de paiement préférés dans le paramètre `payment_method_types`. - Pour présenter à votre client toutes les options de moyens de paiement dans le tunnel de paiement, combinez `card_present` avec des types de moyens de paiement sans carte bancaire. Nous recommandons d’activer cela si vous opérez dans un environnement fortement [hors ligne](https://docs.stripe.com/terminal/features/operate-offline/overview.md) car seules les cartes bancaires sont prises en charge en mode hors ligne. - Si vous ne souhaitez pas accepter de cartes, ne prenez en charge que les types de moyen de paiement sans carte bancaire. - Si vous savez vers quel moyen de paiement vous souhaitez diriger votre client vers le règlement, sélectionnez un seul type de moyen de paiement. ### Type de capture Tous moyens de paiement ne prennent pas en charge la [capture manuelle](https://docs.stripe.com/terminal/payments/collect-card-payment.md#capture-payment). Le tableau suivant indique quels moyens de paiement le peuvent : | Moyen de paiement | Capture manuelle | | ----------------- | --------------------- | | `card_present` | ✓ Prise en charge | | `affirm` | ✓ Prise en charge | | `wechat_pay` | ❌ Non prise en charge | | `paynow` | ❌ Non prise en charge | Pour prendre en charge l’ensemble le plus large possible de moyens de paiement, créez votre PaymentIntent avec `capture_method` défini sur `automatic`. Pour prendre en charge la capture manuelle pour les paiements par carte et Affirm tout en acceptant également les moyens de paiement qui nécessitent une capture automatique, définissez `capture_method` dans l’attribut imbriqué `payment_method_options.card_present` sur `manual`. #### Swift ```swift import UIKit import StripeTerminal class PaymentViewController: UIViewController { // ... // Action for a "Checkout" button func checkoutAction() throws { let params = try PaymentIntentParametersBuilder(amount: 1000, currency: "usd") .setPaymentMethodTypes( [PaymentMethodType.cardPresent, PaymentMethodType.wechatPay] ) .setCaptureMethod(CaptureMethod.automatic) .setPaymentMethodOptionsParameters( PaymentMethodOptionsParametersBuilder( cardPresentParameters: CardPresentParametersBuilder() .setCaptureMethod(CardPresentCaptureMethod.manual) .build() ) .build() ) .build() Terminal.shared.createPaymentIntent(params) { createResult, createError in if let error = createError { print("createPaymentIntent failed: \(error)") } else if let paymentIntent = createResult { print("createPaymentIntent succeeded") // ... } } } // ... } ``` ## Gérer le paiement Contrairement aux paiements par carte, le traitement des paiements par QR code se fait de manière asynchrone. Lorsque vous confirmez un PaymentIntent avec un moyen de paiement par QR code, Stripe génère un QR code unique à ce paiement. Après avoir confirmé le paiement, le lecteur affiche le QR code que le client peut scanner avec son appareil mobile. Peu de temps après que le client a effectué le paiement sur son appareil, le lecteur se met à jour pour refléter le paiement effectué. > Le temps nécessaire au lecteur pour afficher le résultat du paiement peut varier en fonction du moyen de paiement utilisé. Le lecteur se met généralement à jour en quelques secondes. #### Collecter, inspecter et confirmer ### Collecter un PaymentMethod - [collectPaymentMethod (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPTerminal.html#/c:objc\(cs\)SCPTerminal\(im\)collectPaymentMethod:delegate:completion:) Pour collecter le paiement, transmettez au SDK l’objet PaymentIntent que vous avez créé. Pour collecter un moyen de paiement, votre application doit être connectée à un lecteur. Lorsque vous commencez à collecter un moyen de paiement, le lecteur invite le client à toucher ou insérer sa carte bancaire, ou à utiliser « plus de moyens de paiement », ce qui inclut les moyens de paiement par QR code. Le lecteur gère l’affichage de la sélection du moyen de paiement et du QR code automatiquement. #### Swift ```swift import UIKit import StripeTerminal class PaymentViewController: UIViewController, ReaderDisplayDelegate { // Label for displaying messages from the card reader let readerMessageLabel = UILabel(frame: .zero) var collectCancelable: Cancelable? = nil // ... // Action for a "Checkout" button func checkoutAction() throws { let params = try PaymentIntentParametersBuilder(amount: 1000, currency: "usd").build() Terminal.shared.createPaymentIntent(params) { createResult, createError in if let error = createError { print("createPaymentIntent failed: \(error)") } else if let paymentIntent = createResult { print("createPaymentIntent succeeded") self.collectCancelable = Terminal.shared.collectPaymentMethod(paymentIntent) { collectResult, collectError in if let error = collectError { print("collectPaymentMethod failed: \(error)") } else if let paymentIntent = collectResult { print("collectPaymentMethod succeeded") // ... Confirm the payment } } } } } } // MARK: MobileReaderDelegate - only needed for mobile readers, this is the delegate set during connectReader func reader(_ reader: Reader, didRequestReaderInput inputOptions: ReaderInputOptions = []) { readerMessageLabel.text = Terminal.stringFromReaderInputOptions(inputOptions) } func reader(_ reader: Reader, didRequestReaderDisplayMessage displayMessage: ReaderDisplayMessage) { readerMessageLabel.text = Terminal.stringFromReaderDisplayMessage(displayMessage) } // MARK: ReaderDisplayDelegate func terminal(_ terminal: Terminal, didRequestReaderInput inputOptions: ReaderInputOptions = []) { readerMessageLabel.text = Terminal.stringFromReaderInputOptions(inputOptions) } func terminal(_ terminal: Terminal, didRequestReaderDisplayMessage displayMessage: ReaderDisplayMessage) { readerMessageLabel.text = Terminal.stringFromReaderDisplayMessage(displayMessage) } ``` Cette méthode recueille les données du moyen de paiement à l’aide du lecteur connecté, et les associe au PaymentIntent local. À ce stade, vous pouvez déterminer le type de moyen de paiement sélectionné. ### Confirmer le PaymentIntent - [confirmPaymentIntent (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPTerminal.html#/c:objc\(cs\)SCPTerminal\(im\)confirmPaymentIntent:completion:) Après avoir collecté un moyen de paiement, vous pouvez procéder à la confirmation du PaymentIntent. La confirmation du PaymentIntent avec le SDK est synchrone, l’appel de `confirmPaymentIntent` est bloqué jusqu’à ce que le paiement aboutisse. Pour les paiements par QR code, cette méthode fait basculer l’écran du lecteur vers une interface utilisateur affichant le QR code que le client doit scanner. Le lecteur gère l’affichage du QR code automatiquement. Le client effectuant le paiement sur son appareil met à jour le paiement et autorise le retour de la méthode. Si le client annule le paiement, le SDK renvoie une erreur. Certains moyens de paiement (par ex. Affirm) nécessitent un [return_url](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url) lors de la confirmation d’un PaymentIntent afin de rediriger votre client après authentification ou annulation du paiement sur l’application ou le site du moyen de paiement. Vous pouvez fournir votre propre [return_url](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url) lors de la confirmation du PaymentIntent. Si vous n’en fournissez pas, le client voit une [page de destination générique](https://terminal-statics.stripe.com/terminal-checkout/assets/index.html) hébergée par Stripe. #### Swift ```swift let confirmConfig = try ConfirmPaymentIntentConfigurationBuilder().setReturnUrl("https://stripe.com").build() // ... Confirm the payment self.confirmCancelable = Terminal.shared.confirmPaymentIntent(collectPaymentMethodPaymentIntent, confirmConfig: confirmConfig) { confirmResult, confirmError in if let error = confirmError { print("confirmPaymentIntent failed: \(error)") } else if let confirmedPaymentIntent = confirmResult { print("confirmPaymentIntent succeeded") // Notify your backend to capture the PaymentIntent if let stripeId = confirmedPaymentIntent.stripeId { APIClient.shared.capturePaymentIntent(stripeId) { captureError in if let error = captureError { print("capture failed: \(error)") } else { print("capture succeeded") } } } else { print("Payment collected offline"); } } } ``` ### Libérez le lecteur pour accepter un autre paiement Il peut falloir plusieurs minutes à un client pour finaliser le paiement sur son appareil. Au lieu d’attendre que le lecteur reflète le résultat du paiement finalisé, vous pouvez libérer le lecteur pour qu’il accepte un paiement pour un autre client. - [Cancelable (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPCancelable.html) Après que le client a scanné le QR code et est passé à son appareil pour finaliser le paiement, utilisez l’objet `Cancelable` retourné par le SDK iOS pour annuler l’action et réinitialiser le lecteur. Après avoir annulé l’action du lecteur pour confirmertraiter le paiement, l’intention de paiement reste dans l’état `requires_action`, permettant au client de compléter le paiement. Utilisez les webhooks `payment_intent.succeeded` et`payment_intent.payment_failed` pour rapprocher le résultat du paiement complété. Apprenez comment [ surveiller un PaymentIntent avec des webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks). ## Expérience client Une fois que vous avez [confirmé](https://docs.stripe.com/terminal/payments/additional-payment-methods.md#handle-payment) le PaymentIntent, le client scanne un QR code affiché sur l’écran du lecteur. En fonction du moyen de paiement, le client peut rapidement finaliser le paiement dans son application mobile (la plupart des wallets) ou effectuer un processus plus étendu d’évaluation des offres de financement (moyens de paiement différé). Les sections suivantes présentent le tunnel de paiement pour les moyens de paiement pris en charge avec des lecteurs intelligents : #### Affirm Pour en savoir plus sur la façon d’offrir la meilleure expérience client possible et de faire connaître les options de paiement fractionné en magasin, consultez ces [ressources de formation Affirm](https://businesshub.affirm.com/hc/en-us/articles/30660865631892-Stripe-User-Affirm-Resources). ![](https://d37ugbyn3rpeym.cloudfront.net/videos/terminal/affirm-customer-experience.mp4) #### WeChat Pay ![](https://d37ugbyn3rpeym.cloudfront.net/videos/terminal/wechat-pay-customer-experience.mp4) #### PayNow ![](https://docs.stripecdn.com/50c48b010444a4c4db73126c3ecc68f555ab3a59940349a72558d934f274b666.mp4) ## Tests Dans un *environnement de test* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes), vous pouvez scanner le QR code à l’aide d’une application de lecture de QR codes sur votre téléphone mobile. Le contenu du QR code contient une URL qui mène à une page de paiement de test hébergée par Stripe, où vous pouvez autoriser ou refuser le paiement de test. ### Environnement de test Affirm Si votre compte est intégré à Affirm, l’URL sous forme de QR code vous amène à une page de test hébergée par Affirm où vous pouvez compléter le processus de paiement. Lorsque vous êtes redirigé vers l’environnement de test sur Affirm, il se peut que vous receviez une invitation à entrer les quatre derniers chiffres de votre numéro de sécurité sociale. Affirm recommande d’utiliser `0000` ou `5678` à des fins de test. Si votre compte n’est pas intégré à Affirm, vous serez dirigé vers la page de paiement de test hébergée par Stripe. # Android > This is a Android for when terminal-sdk-platform is android. View the full page at https://docs.stripe.com/terminal/payments/additional-payment-methods?terminal-sdk-platform=android. ## Créer un PaymentIntent Pour accepter des moyens de paiement autres que les cartes via l’interface de QR code, [créez un PaymentIntent](https://docs.stripe.com/api/payment_intents.md) et incluez vos types de moyens de paiement préférés dans le paramètre `payment_method_types`. - Pour présenter à votre client toutes les options de moyens de paiement dans le tunnel de paiement, combinez `card_present` avec des types de moyens de paiement sans carte bancaire. Nous recommandons d’activer cela si vous opérez dans un environnement fortement [hors ligne](https://docs.stripe.com/terminal/features/operate-offline/overview.md) car seules les cartes bancaires sont prises en charge en mode hors ligne. - Si vous ne souhaitez pas accepter de cartes, ne prenez en charge que les types de moyen de paiement sans carte bancaire. - Si vous savez vers quel moyen de paiement vous souhaitez diriger votre client vers le règlement, sélectionnez un seul type de moyen de paiement. ### Type de capture Tous moyens de paiement ne prennent pas en charge la [capture manuelle](https://docs.stripe.com/terminal/payments/collect-card-payment.md#capture-payment). Le tableau suivant indique quels moyens de paiement le peuvent : | Moyen de paiement | Capture manuelle | | ----------------- | --------------------- | | `card_present` | ✓ Prise en charge | | `affirm` | ✓ Prise en charge | | `wechat_pay` | ❌ Non prise en charge | | `paynow` | ❌ Non prise en charge | Pour prendre en charge l’ensemble le plus large possible de moyens de paiement, créez votre PaymentIntent avec `capture_method` défini sur `automatic`. Pour prendre en charge la capture manuelle pour les paiements par carte et Affirm tout en acceptant également les moyens de paiement qui nécessitent une capture automatique, définissez `capture_method` dans l’attribut imbriqué `payment_method_options.card_present` sur `manual`. #### Kotlin ```kotlin val paymentMethodTypes = listOf(PaymentMethodType.CARD_PRESENT,PaymentMethodType.WECHAT_PAY) val params = PaymentIntentParameters.Builder( paymentMethodTypes = paymentMethodTypes ) .setAmount(1000) .setCurrency("usd") .setCaptureMethod(CaptureMethod.Automatic) .setPaymentMethodOptionsParameters( PaymentMethodOptionsParameters.Builder() .setCardPresentParameters( CardPresentParameters.Builder() .setCaptureMethod(CardPresentCaptureMethod.Manual) .build() ) .build() ) .build() Terminal.getInstance().createPaymentIntent( params, object : PaymentIntentCallback { override fun onSuccess(paymentIntent: PaymentIntent) { // Placeholder for handling successful operation } override fun onFailure(e: TerminalException) { // Placeholder for handling exception } } ) ``` ## Gérer le paiement Contrairement aux paiements par carte, le traitement des paiements par QR code se fait de manière asynchrone. Lorsque vous confirmez un PaymentIntent avec un moyen de paiement par QR code, Stripe génère un QR code unique à ce paiement. Après avoir confirmé le paiement, le lecteur affiche le QR code que le client peut scanner avec son appareil mobile. Peu de temps après que le client a effectué le paiement sur son appareil, le lecteur se met à jour pour refléter le paiement effectué. > Le temps nécessaire au lecteur pour afficher le résultat du paiement peut varier en fonction du moyen de paiement utilisé. Le lecteur se met généralement à jour en quelques secondes. #### Collecter, inspecter et confirmer ### Collecter un PaymentMethod - [collectPaymentMethod (Android)](https://stripe.dev/stripe-terminal-android/core/com.stripe.stripeterminal/-terminal/collect-payment-method.html) Pour collecter le paiement, transmettez au SDK l’objet PaymentIntent que vous avez créé. Pour collecter un moyen de paiement, votre application doit être connectée à un lecteur. Lorsque vous commencez à collecter un moyen de paiement, le lecteur invite le client à toucher ou insérer sa carte bancaire, ou à utiliser « plus de moyens de paiement », ce qui inclut les moyens de paiement par QR code. Le lecteur gère l’affichage de la sélection du moyen de paiement et du QR code automatiquement. #### Kotlin ```kotlin val cancelable = Terminal.getInstance().collectPaymentMethod( paymentIntent, object : PaymentIntentCallback { override fun onSuccess(paymentIntent: PaymentIntent) { // Placeholder for handling successful operation } override fun onFailure(e: TerminalException) { // Placeholder for handling exception } } ) ``` Cette méthode recueille les données du moyen de paiement à l’aide du lecteur connecté, et les associe au PaymentIntent local. À ce stade, vous pouvez déterminer le type de moyen de paiement sélectionné. ### Confirmer le PaymentIntent - [confirmPaymentIntent (Android)](https://stripe.dev/stripe-terminal-android/core/com.stripe.stripeterminal/-terminal/confirm-payment-intent.html) Après avoir collecté un moyen de paiement, vous pouvez procéder à la confirmation du PaymentIntent. La confirmation du PaymentIntent avec le SDK est synchrone, l’appel de `confirmPaymentIntent` est bloqué jusqu’à ce que le paiement aboutisse. Pour les paiements par QR code, cette méthode fait basculer l’écran du lecteur vers une interface utilisateur affichant le QR code que le client doit scanner. Le lecteur gère l’affichage du QR code automatiquement. Le client effectuant le paiement sur son appareil met à jour le paiement et autorise le retour de la méthode. Si le client annule le paiement, le SDK renvoie une erreur. Certains moyens de paiement (par ex. Affirm) nécessitent un [return_url](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url) lors de la confirmation d’un PaymentIntent afin de rediriger votre client après authentification ou annulation du paiement sur l’application ou le site du moyen de paiement. Vous pouvez fournir votre propre [return_url](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url) lors de la confirmation du PaymentIntent. Si vous n’en fournissez pas, le client voit une [page de destination générique](https://terminal-statics.stripe.com/terminal-checkout/assets/index.html) hébergée par Stripe. #### Kotlin ```kotlin val confirmConfig = ConfirmPaymentIntentConfiguration.Builder().setReturnUrl("https://stripe.com/").build() val cancelable = Terminal.getInstance().confirmPaymentIntent( paymentIntent, object : PaymentIntentCallback { override fun onSuccess(paymentIntent: PaymentIntent) { // Placeholder handling successful operation } override fun onFailure(e: TerminalException) { // Placeholder for handling exception } }, confirmConfig ) ``` ### Libérez le lecteur pour accepter un autre paiement Il peut falloir plusieurs minutes à un client pour finaliser le paiement sur son appareil. Au lieu d’attendre que le lecteur reflète le résultat du paiement finalisé, vous pouvez libérer le lecteur pour qu’il accepte un paiement pour un autre client. - [Cancelable (Android)](https://stripe.dev/stripe-terminal-android/external/com.stripe.stripeterminal.external.callable/-cancelable/index.html) Après que le client a scanné le QR code et est passé à son appareil pour finaliser le paiement, utilisez l’objet `Cancelable` retourné par le SDK Android pour annuler l’action et réinitialiser le lecteur. Après avoir annulé l’action du lecteur pour confirmertraiter le paiement, l’intention de paiement reste dans l’état `requires_action`, permettant au client de compléter le paiement. Utilisez les webhooks `payment_intent.succeeded` et`payment_intent.payment_failed` pour rapprocher le résultat du paiement complété. Apprenez comment [ surveiller un PaymentIntent avec des webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks). ## Expérience client Une fois que vous avez [confirmé](https://docs.stripe.com/terminal/payments/additional-payment-methods.md#handle-payment) le PaymentIntent, le client scanne un QR code affiché sur l’écran du lecteur. En fonction du moyen de paiement, le client peut rapidement finaliser le paiement dans son application mobile (la plupart des wallets) ou effectuer un processus plus étendu d’évaluation des offres de financement (moyens de paiement différé). Les sections suivantes présentent le tunnel de paiement pour les moyens de paiement pris en charge avec des lecteurs intelligents : #### Affirm Pour en savoir plus sur la façon d’offrir la meilleure expérience client possible et de faire connaître les options de paiement fractionné en magasin, consultez ces [ressources de formation Affirm](https://businesshub.affirm.com/hc/en-us/articles/30660865631892-Stripe-User-Affirm-Resources). ![](https://d37ugbyn3rpeym.cloudfront.net/videos/terminal/affirm-customer-experience.mp4) #### WeChat Pay ![](https://d37ugbyn3rpeym.cloudfront.net/videos/terminal/wechat-pay-customer-experience.mp4) #### PayNow ![](https://docs.stripecdn.com/50c48b010444a4c4db73126c3ecc68f555ab3a59940349a72558d934f274b666.mp4) ## Tests Dans un *environnement de test* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes), vous pouvez scanner le QR code à l’aide d’une application de lecture de QR codes sur votre téléphone mobile. Le contenu du QR code contient une URL qui mène à une page de paiement de test hébergée par Stripe, où vous pouvez autoriser ou refuser le paiement de test. ### Environnement de test Affirm Si votre compte est intégré à Affirm, l’URL sous forme de QR code vous amène à une page de test hébergée par Affirm où vous pouvez compléter le processus de paiement. Lorsque vous êtes redirigé vers l’environnement de test sur Affirm, il se peut que vous receviez une invitation à entrer les quatre derniers chiffres de votre numéro de sécurité sociale. Affirm recommande d’utiliser `0000` ou `5678` à des fins de test. Si votre compte n’est pas intégré à Affirm, vous serez dirigé vers la page de paiement de test hébergée par Stripe. # React Native > This is a React Native for when terminal-sdk-platform is react-native. View the full page at https://docs.stripe.com/terminal/payments/additional-payment-methods?terminal-sdk-platform=react-native. ## Créer un PaymentIntent Pour accepter des moyens de paiement autres que les cartes via l’interface de QR code, [créez un PaymentIntent](https://docs.stripe.com/api/payment_intents.md) et incluez vos types de moyens de paiement préférés dans le paramètre `payment_method_types`. - Pour présenter à votre client toutes les options de moyens de paiement dans le tunnel de paiement, combinez `card_present` avec des types de moyens de paiement sans carte bancaire. Nous recommandons d’activer cela si vous opérez dans un environnement fortement [hors ligne](https://docs.stripe.com/terminal/features/operate-offline/overview.md) car seules les cartes bancaires sont prises en charge en mode hors ligne. - Si vous ne souhaitez pas accepter de cartes, ne prenez en charge que les types de moyen de paiement sans carte bancaire. - Si vous savez vers quel moyen de paiement vous souhaitez diriger votre client vers le règlement, sélectionnez un seul type de moyen de paiement. ### Type de capture Tous moyens de paiement ne prennent pas en charge la [capture manuelle](https://docs.stripe.com/terminal/payments/collect-card-payment.md#capture-payment). Le tableau suivant indique quels moyens de paiement le peuvent : | Moyen de paiement | Capture manuelle | | ----------------- | --------------------- | | `card_present` | ✓ Prise en charge | | `affirm` | ✓ Prise en charge | | `wechat_pay` | ❌ Non prise en charge | | `paynow` | ❌ Non prise en charge | Pour prendre en charge l’ensemble le plus large possible de moyens de paiement, créez votre PaymentIntent avec `capture_method` défini sur `automatic`. Pour prendre en charge la capture manuelle pour les paiements par carte et Affirm tout en acceptant également les moyens de paiement qui nécessitent une capture automatique, définissez `capture_method` dans l’attribut imbriqué `payment_method_options.card_present` sur `manual`. ```js const {error, paymentIntent} = await createPaymentIntent({ amount: 1000, currency: "usd", paymentMethodTypes: ["card_present", "wechat_pay"], captureMethod: "automatic", paymentMethodOptions: { captureMethod: "manual" } }); ``` ## Gérer le paiement Contrairement aux paiements par carte, le traitement des paiements par QR code se fait de manière asynchrone. Lorsque vous confirmez un PaymentIntent avec un moyen de paiement par QR code, Stripe génère un QR code unique à ce paiement. Après avoir confirmé le paiement, le lecteur affiche le QR code que le client peut scanner avec son appareil mobile. Peu de temps après que le client a effectué le paiement sur son appareil, le lecteur se met à jour pour refléter le paiement effectué. > Le temps nécessaire au lecteur pour afficher le résultat du paiement peut varier en fonction du moyen de paiement utilisé. Le lecteur se met généralement à jour en quelques secondes. #### Collecter, inspecter et confirmer ### Collecter un PaymentMethod - [collectPaymentMethod (React Native)](https://stripe.dev/stripe-terminal-react-native/api-reference/interfaces/StripeTerminalSdkType.html#collectpaymentmethod) Pour collecter le paiement, transmettez au SDK l’objet PaymentIntent que vous avez créé. Pour collecter un moyen de paiement, votre application doit être connectée à un lecteur. Lorsque vous commencez à collecter un moyen de paiement, le lecteur invite le client à toucher ou insérer sa carte bancaire, ou à utiliser « plus de moyens de paiement », ce qui inclut les moyens de paiement par QR code. Le lecteur gère l’affichage de la sélection du moyen de paiement et du QR code automatiquement. ```js const { paymentIntent, error } = await collectPaymentMethod({ paymentIntent: paymentIntent }); if (error) { // Placeholder for handling exception } // Placeholder for processing PaymentIntent ``` Cette méthode recueille les données du moyen de paiement à l’aide du lecteur connecté, et les associe au PaymentIntent local. À ce stade, vous pouvez déterminer le type de moyen de paiement sélectionné. ### Confirmer le PaymentIntent - [confirmPaymentIntent (React Native)](https://stripe.dev/stripe-terminal-react-native/api-reference/interfaces/StripeTerminalSdkType.html#confirmpaymentintent) Après avoir collecté un moyen de paiement, vous pouvez procéder à la confirmation du PaymentIntent. La confirmation du PaymentIntent avec le SDK est synchrone, l’appel de `confirmPaymentIntent` est bloqué jusqu’à ce que le paiement aboutisse. Pour les paiements par QR code, cette méthode fait basculer l’écran du lecteur vers une interface utilisateur affichant le QR code que le client doit scanner. Le lecteur gère l’affichage du QR code automatiquement. Le client effectuant le paiement sur son appareil met à jour le paiement et autorise le retour de la méthode. Si le client annule le paiement, le SDK renvoie une erreur. Certains moyens de paiement (par ex. Affirm) nécessitent un [return_url](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url) lors de la confirmation d’un PaymentIntent afin de rediriger votre client après authentification ou annulation du paiement sur l’application ou le site du moyen de paiement. Vous pouvez fournir votre propre [return_url](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url) lors de la confirmation du PaymentIntent. Si vous n’en fournissez pas, le client voit une [page de destination générique](https://terminal-statics.stripe.com/terminal-checkout/assets/index.html) hébergée par Stripe. ```js const { paymentIntent, error } = await confirmPaymentIntent(paymentIntent); if (error) { // Placeholder for handling exception return; } // Placeholder for notifying your backend to capture paymentIntent.id ``` ### Libérez le lecteur pour accepter un autre paiement Il peut falloir plusieurs minutes à un client pour finaliser le paiement sur son appareil. Au lieu d’attendre que le lecteur reflète le résultat du paiement finalisé, vous pouvez libérer le lecteur pour qu’il accepte un paiement pour un autre client. - [cancelConfirmPaymentIntent (React Native)](https://stripe.dev/stripe-terminal-react-native/api-reference/interfaces/StripeTerminalSdkType.html#cancelconfirmpaymentintent) Après que le client a scanné le QR code et est passé à son appareil pour finaliser le paiement, appelez [cancelConfirmPaymentIntent](https://stripe.dev/stripe-terminal-react-native/api-reference/interfaces/StripeTerminalSdkType.html#cancelconfirmpaymentintent) pour réinitialiser le lecteur. Après avoir annulé l’action du lecteur pour confirmertraiter le paiement, l’intention de paiement reste dans l’état `requires_action`, permettant au client de compléter le paiement. Utilisez les webhooks `payment_intent.succeeded` et`payment_intent.payment_failed` pour rapprocher le résultat du paiement complété. Apprenez comment [ surveiller un PaymentIntent avec des webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks). ## Expérience client Une fois que vous avez [confirmé](https://docs.stripe.com/terminal/payments/additional-payment-methods.md#handle-payment) le PaymentIntent, le client scanne un QR code affiché sur l’écran du lecteur. En fonction du moyen de paiement, le client peut rapidement finaliser le paiement dans son application mobile (la plupart des wallets) ou effectuer un processus plus étendu d’évaluation des offres de financement (moyens de paiement différé). Les sections suivantes présentent le tunnel de paiement pour les moyens de paiement pris en charge avec des lecteurs intelligents : #### Affirm Pour en savoir plus sur la façon d’offrir la meilleure expérience client possible et de faire connaître les options de paiement fractionné en magasin, consultez ces [ressources de formation Affirm](https://businesshub.affirm.com/hc/en-us/articles/30660865631892-Stripe-User-Affirm-Resources). ![](https://d37ugbyn3rpeym.cloudfront.net/videos/terminal/affirm-customer-experience.mp4) #### WeChat Pay ![](https://d37ugbyn3rpeym.cloudfront.net/videos/terminal/wechat-pay-customer-experience.mp4) #### PayNow ![](https://docs.stripecdn.com/50c48b010444a4c4db73126c3ecc68f555ab3a59940349a72558d934f274b666.mp4) ## Tests Dans un *environnement de test* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes), vous pouvez scanner le QR code à l’aide d’une application de lecture de QR codes sur votre téléphone mobile. Le contenu du QR code contient une URL qui mène à une page de paiement de test hébergée par Stripe, où vous pouvez autoriser ou refuser le paiement de test. ### Environnement de test Affirm Si votre compte est intégré à Affirm, l’URL sous forme de QR code vous amène à une page de test hébergée par Affirm où vous pouvez compléter le processus de paiement. Lorsque vous êtes redirigé vers l’environnement de test sur Affirm, il se peut que vous receviez une invitation à entrer les quatre derniers chiffres de votre numéro de sécurité sociale. Affirm recommande d’utiliser `0000` ou `5678` à des fins de test. Si votre compte n’est pas intégré à Affirm, vous serez dirigé vers la page de paiement de test hébergée par Stripe.