# Configurer de futurs paiements Klarna Découvrez comment enregistrer des informations Klarna pour débiter vos clients ultérieurement. Vous pouvez enregistrer Klarna comme *moyen de paiement* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) d’un client et facturer les paiements futurs pour prendre en charge : - Paiement automatique pour les *abonnements*, avec ou sans [période d’essai gratuit](https://docs.stripe.com/facturation/abonnements/essais.md). - Paiement automatique des abonnements pour les commandes comprenant également des produits sans abonnement. - Enregistrer Klarna dans un portefeuille électronique pour simplifier les futurs achats *à la demande* (When a customer stores their payment method with a business, they can make on-demand future purchases without re-authenticating, such as ordering a ride in their ride-share app) sans nécessiter une réauthentification du client. Ce guide explique comment enregistrer Klarna en tant que moyen de paiement que vous pouvez débiter immédiatement ou plus tard. Ce guide ne s’adresse pas aux intégrations qui utilisent [Stripe Billing](https://docs.stripe.com/billing.md). Si vous utilisez Stripe Billing, consultez [Klarna pour les abonnements](https://docs.stripe.com/billing/subscriptions/klarna.md). > #### Les options de paiement Klarna disponibles varient en fonction du cas d'utilisation et du pays de l'acheteur. > > Voyez quelles [options de paiement](https://docs.stripe.com/payments/klarna.md#payment-options) sont disponibles pour vos clients avant de commencer votre intégration. Nous vous recommandons d’utiliser [Stripe Checkout](https://docs.stripe.com/payments/checkout.md) pour enregistrer Klarna comme moyen de paiement. # Checkout > This is a Checkout for when payment-ui is checkout. View the full page at https://docs.stripe.com/payments/klarna/set-up-future-payments?payment-ui=checkout. La première partie de ce guide explique comment utiliser [Stripe Checkout](https://docs.stripe.com/payments/checkout.md) pour enregistrer Klarna comme moyen de paiement. La dernière étape explique comment débiter le moyen de paiement enregistré pour un abonnement ou un paiement *à la demande* (When a customer stores their payment method with a business, they can make on-demand future purchases without re-authenticating, such as ordering a ride in their ride-share app). ## Configurer Stripe [Côté serveur] Pour commencer, vous devez créer un compte Stripe. [Inscrivez-vous maintenant](https://dashboard.stripe.com/register). Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre application : #### 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' ``` ## Créer ou récupérer un objet Customer avant la configuration [Côté serveur] Pour réutiliser un moyen de paiement Klarna en vue de paiements futurs, vous devez l’associer à un objet *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments). Créez un objet Customer lorsque votre client crée un compte auprès votre entreprise. En associant l’ID de l’objet Customer à votre propre représentation interne de ce client, vous pourrez par la suite récupérer et utiliser les informations du moyen de paiement enregistré. Si votre client n’a pas créé de compte, vous pouvez tout de même lui créer un objet Customer, puis l’associer à votre représentation interne de ce compte du client par la suite. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Créer une session Checkout [Côté client] [Côté serveur] Pour que vous puissiez accepter des paiements Klarna, votre client doit préalablement vous autoriser à utiliser son compte Klarna en vue de paiement ultérieurs via Stripe Checkout. Ajoutez un bouton **Autoriser** à votre site qui appelle un point de terminaison côté serveur pour créer une [Checkout Session](https://docs.stripe.com/api/checkout/sessions.md). ```html Authorize
``` #### Abonnement Vous devez transmettre les détails de l’abonnement lorsque vous utilisez Checkout pour configurer un abonnement. Transmission des détails de l’abonnement : - Ensures your customers have access to all applicable [Klarna payment options](https://docs.stripe.com/payments/klarna.md#payment-options), including Pay in 3 or 4, which is only available for subscriptions that have specific lengths. - Réduit les taux d’assistance et les abandons de clients dus à des détails d’achat peu clairs dans l’application Klarna, où Klarna restitue les données d’abonnement de vos clients. Use the [payment_method_options](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-klarna) parameter to pass in subscription details. The subscription [reference](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-klarna-subscriptions-reference) is an arbitrary identifier you choose that isn’t visible to customers (for example, `GYM_ANNUAL_MEMBERSHIP` or `ID_123`). > #### Utiliser la même référence pour facturer le mode de paiement enregistré > > Lorsque vous utilisez le mode de paiement sauvegardé, utilisez la même référence d’abonnement. La valeur de référence doit correspondre à la valeur du champ `amount_details[line_items][payment_method_options][klarna][subscription_reference]`, si votre intégration l’utilise ultérieurement. Si la valeur ne correspond pas, vous recevez un message d’erreur. L’exemple ci-dessous illustre comment transmettre les détails d’un abonnement annuel. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d mode=setup \ -d customer={{CUSTOMER_ID}} \ -d currency=usd \ --data-urlencode "success_url=https://example.com/success?session_id={CHECKOUT_SESSION_ID}" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][name]=Customer-facing name for subscription" \ -d "payment_method_options[klarna][subscriptions][0][interval]=year" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][amount]=10000" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][date]=2026-01-01" ``` #### Paiements à la demande ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d mode=setup \ -d customer={{CUSTOMER_ID}} \ -d currency=usd \ --data-urlencode "success_url=https://example.com/success?session_id={CHECKOUT_SESSION_ID}" ``` Après avoir créé la session de paiement, redirigez votre client vers l’[URL](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-url) renvoyée dans la réponse. ## Gérer la redirection au retour de Checkout [Côté client] [Côté serveur] Lorsque votre client fournit les détails de son moyen de paiement, il est redirigé vers la `success_url`, une page de votre site Web qui l’informe qu’il a correctement enregistré son moyen de paiement. Mettez l’ID de session à disposition sur votre page de confirmation en incluant le modèle de variable `{CHECKOUT_SESSION_ID}` dans la `success_url`, comme illustré ci-dessus. > Ne vous fiez pas uniquement à la redirection vers `success_url` pour détecter l’initiation d’un paiement, car : > > - Des utilisateurs malveillants pourraient accéder directement au `success_url` sans payer et obtenir l’accès à vos biens ou à vos services. - Après un paiement réussi, les clients peuvent fermer l’onglet de leur navigateur avant d’être redirigés vers `success_url`. ## Récupérer le moyen de paiement [Côté serveur] Une fois que le client a soumis ses informations de paiement, récupérez l’objet [PaymentMethod](https://docs.stripe.com/payments/payment-methods.md). Un *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) stocke les informations Klarna account du client pour ses paiements ultérieurs. Vous pouvez récupérer cet objet de manière synchrone en utilisant la `success_url` ou de manière asynchrone au moyen de *webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests). La décision de récupérer l’objet PaymentMethod de manière synchrone ou asynchrone dépend de votre tolérance aux abandons de paiement. En effet, il peut arriver que le client n’aboutisse pas au `success_url` à l’issue de son paiement (il peut par exemple lui arriver de fermer l’onglet de son navigateur avant que la redirection n’intervienne). L’utilisation de webhooks vous permet d’éviter que votre intégration ne subisse ce type d’abandon. #### Webhooks Gérez des webhooks `checkout.session.completed`, qui contiennent un objet Session. Pour en savoir plus, consultez la page sur la [configuration de webhooks](https://docs.stripe.com/webhooks.md). Voici un exemple de réponse `checkout.session.completed` : ```json { "id": "evt_1Ep24XHssDVaQm2PpwS19Yt0", "object": "event", "api_version": "2019-03-14", "created": 1561420781, "data": { "object": { "id": "cs_test_MlZAaTXUMHjWZ7DcXjusJnDU4MxPalbtL5eYrmS2GKxqscDtpJq8QM0k", "object": "checkout.session", "billing_address_collection": null, "client_reference_id": null, "customer": null, "customer_email": null, "display_items": [], "mode": "setup","setup_intent": "seti_1EzVO3HssDVaQm2PJjXHmLlM", "submit_type": null, "subscription": null, "success_url": "https://example.com/success" } }, "livemode": false, "pending_webhooks": 1, "request": { "id": null, "idempotency_key": null }, "type": "checkout.session.completed" } ``` Notez la valeur de la clé `setup_intent`, qui est l’identifiant du SetupIntent créé avec la Checkout Session. Un [SetupIntent](https://docs.stripe.com/payments/setup-intents.md) est un objet utilisé pour configurer les informations du client Klarna account pour les futurs paiements. [Récupérez](https://docs.stripe.com/api/setup_intents/retrieve.md) l’objet SetupIntent avec l’ID. L’objet renvoyé contient l’identifiant `payment_method`. ```curl curl https://api.stripe.com/v1/setup_intents/seti_1EzVO3HssDVaQm2PJjXHmLlM \ -u "<>:" ``` #### URL après paiement réussi Récupération du `session_id` depuis l’URL lorsque l’utilisateur est redirigé vers votre site et [récupération](https://docs.stripe.com/api/checkout/sessions/retrieve.md) de l’objet Session. ```curl curl -G https://api.stripe.com/v1/checkout/sessions/{{SESSION_ID}} \ -u "<>:" \ -d "expand[]=setup_intent" ``` > Pour faire en sorte que le `session_id` soit disponible depuis l’URL, incluez la variable de modèle `session_id={CHECKOUT_SESSION_ID}` dans le `success_url` lors de la création de la session Checkout. Notez le SetupIntent créé pendant la Checkout Session. Un [SetupIntent](https://docs.stripe.com/payments/setup-intents.md) est un objet utilisé pour configurer les informations du client Klarna account pour les futurs paiements. L’objet renvoyé contient l’identifiant `payment_method`. ## Gérer les événements post-configuration [Côté serveur] Utilisez une méthode telle que les [webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks) pour confirmer que le client a autorisé le contrat de facturation. Ne comptez pas sur votre client pour revenir à la page d’état du paiement. Lorsqu’un client autorise le contrat de facturation, Stripe émet un événement *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) ou [setup_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.succeeded) et l’état de l’Intent passe à `succeeded`. Enregistrez l’ID [payment_method](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-payment_method) qui en résulte pour effectuer ultérieurement des paiements à l’aide du PaymentMethod enregistré. Si un client n’autorise pas correctement le contrat de facturation, Stripe émet un événement de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) [payment_intent.payment_failed](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.payment_failed) ou de [setup_intent.setup_failed](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.setup_failed) et l’état de l’Intent repasse à `requires_payment_method`. ## Utiliser le moyen de paiement pour les paiements ultérieurs [Côté serveur] #### Renouvellement de l’abonnement Au moment de débiter votre client hors session, utilisez les ID des objets *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) et *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) pour créer un [PaymentIntent](https://docs.stripe.com/api/payment_intents.md). Définissez quelques autres paramètres pour effectuer le *paiement hors session* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) : - Définissez [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) sur `true` pour indiquer que le client ne se trouve pas dans votre tunnel de paiement pendant cette tentative de paiement, ce qui entraîne le renvoi d’une erreur par le PaymentIntent si une authentification est requise. - Définissez la propriété [confirm](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-confirm) du PaymentIntent sur la valeur `true`, ce qui aura pour effet de générer immédiatement une confirmation lors de la création du PaymentIntent. - Renseignez l’ID du PaymentMethod dans [payment_method](https://docs.stripe.com/api.md#create_payment_intent-payment_method) et l’ID du client dans [customer](https://docs.stripe.com/api.md#create_payment_intent-customer). - Spécifiez une [return_url](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url) pour indiquer où Stripe doit rediriger le client à partir du site de Klarna. Envoyez les informations d’abonnement et les postes de facture à chaque renouvellement. Utilisez la même `reference` pour votre abonnement que lorsque vous avez configuré le moyen de paiement. Si les informations d’abonnement ont changé depuis que vous avez enregistré le moyen de paiement, envoyez les nouvelles informations avec la même `reference`. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=5000 \ -d currency=usd \ -d confirm=true \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d off_session=true \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "amount_details[line_items][0][product_name]=Annual subscription renewal" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=5000" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=year" ``` #### Paiement sur demande Au moment de débiter votre client, utilisez les ID des objets *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) et *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) pour créer un objet [PaymentIntent](https://docs.stripe.com/api/payment_intents.md). Définissez quelques autres paramètres pour effectuer le *paiement hors session* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) : - Définissez [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) sur `false` pour indiquer que le client se trouve dans un tunnel de paiement lors de cette tentative de paiement. En cas d’erreur, par exemple si une authentification est requise, le client est redirigé vers la page Klarna pour s’authentifier ou résoudre le problème. - Définissez la propriété [confirm](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-confirm) du PaymentIntent sur la valeur `true`, ce qui aura pour effet de générer immédiatement une confirmation lors de la création du PaymentIntent. - Renseignez l’ID du PaymentMethod dans [payment_method](https://docs.stripe.com/api.md#create_payment_intent-payment_method) et l’ID du client dans [customer](https://docs.stripe.com/api.md#create_payment_intent-customer). L’exemple ci-dessous inclut des détails optionnels en utilisant [payment_method_options](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options) pour aider à améliorer les taux de souscription et d’autorisation de Klarna. Cela inclut des détails sur la manière dont cette méthode de paiement Klarna sauvegardée devrait être utilisée à l’avenir, tels que les montants prévus pour les commandes futures et la fréquence des paiements. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d confirm=true \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d off_session=false \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "amount_details[line_items][0][product_name]=Annual subscription" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=1099" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]={{SUBSCRIPTION_ID}}" \ -d "payment_method_options[klarna][on_demand][average_amount]=1000" \ -d "payment_method_options[klarna][on_demand][minimum_amount]=100" \ -d "payment_method_options[klarna][on_demand][maximum_amount]=10000" \ -d "payment_method_options[klarna][on_demand][interval]=year" \ -d "payment_method_options[klarna][on_demand][interval_count]=1" ``` ## Gérer la révocation des moyens de paiement réutilisables [Côté serveur] Vous pouvez révoquer un moyen de paiement réutilisable de deux manières : - Un client peut désactiver un moyen de paiement réutilisable dans l’application mobile Klarna. Dans ce cas, Stripe vous envoie un événement [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated). Pour gérer cela, abonnez-vous aux événements [webhook](https://docs.stripe.com/webhooks.md), et appelez [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md) pour le désactiver. - Un client peut également désactiver une méthode de paiement réutilisable sur votre interface utilisateur, si elle est prise en charge. Dans ce scénario, votre serveur peut appeler [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md) pour gérer la désactivation. Dans les deux cas, après avoir appelé [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md), Stripe vous envoie un événement [payment_method.detached](https://docs.stripe.com/api/events/types.md#event_types-payment_method.detached). ## Tester votre intégration Lorsque vous testez votre intégration Checkout, sélectionnez le moyen de paiement Klarna et cliquez sur le bouton **Enregistrer**. Dans un environnement de test, vous pouvez ensuite simuler différents résultats dans la redirection de Klarna. > Klarna utilise des cookies pour le suivi des sessions. Pour tester différents emplacements clients, déconnectez-vous de l’environnement de test Klarna de la session précédente et utilisez les déclencheurs pertinents. Nous avons réuni ci-dessous des données de test pour les pays pris en charge. Dans un environnement de test, Klarna s’appuie sur l’adresse e-mail fournie pour approuver ou refuser une transaction. #### Australie | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 10/07/1970 | 03-05-1994 | | Prénom | Test | John | | Nom | Person-au | snow | | Rue | Wharf St | Silverwater Rd | | Numéro de rue | 4 | 1-5 | | Code postal | 4877 | 2128 | | Ville | Port Douglas | Silverwater | | Région | QLD | NSW | | Téléphone | +61473752244 | +61473763254 | | Adresse e-mail | customer@email.au | customer+denied@email.au | #### Autriche | | Approuvé | Refusé | | ----------------- | ------------------ | ------------------------ | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-at | Person-at | | E-mail | customer@email.at | customer+denied@email.at | | Rue | Mariahilfer Straße | Mariahilfer Straße | | Numéro de rue | 47 | 47 | | Ville | Vienne | Vienne | | Code postal | 1060 | 1060 | | Téléphone | +4306762600456 | +4306762600745 | #### Belgique | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-be | Person-be | | E-mail | customer@email.be | customer+denied@email.be | | Rue | Grote Markt | Grote Markt | | Numéro de rue | 1 | 1 | | Ville | Bruxelles | Bruxelles | | Code postal | 1 000 | 1 000 | | Téléphone | +32485121291 | +32485212123 | #### Canada | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-ca | Person-ca | | Rue | 2693 Byron Rd | 2693 Byron Rd | | Code postal | V7H 1L9 | V7H 1L9 | | Ville | North Vancouver | North Vancouver | | Région | BC | BC | | Téléphone | +15197438620 | +15197308624 | | Adresse e-mail | customer@email.ca | customer+denied@email.ca | #### République tchèque | | Approuvé | Refusé | | ----------------- | ----------------------- | ------------------------ | | Date de naissance | 01-01-1970 | 27-06-1992 | | Prénom | Test | Test | | Nom | Person-cz | Person-cz | | E-mail | customer@email.cz | customer+denied@email.cz | | Rue | Zazvorkova 1480/11 | Zázvorkova 1480/11 | | Code postal | 155 00 | 155 00 | | Ville | Prague | PRAHA 13 | | Téléphone | +420771613715 | +420771623691 | #### Danemark | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 01-01-1980 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-dk | Person-dk | | E-mail | customer@email.dk | customer+denied@email.dk | | Rue | Dantes Plads | Nygårdsvej | | Numéro de rue | 7 | 65 | | Ville | København Ø | København Ø | | Code postal | 1556 | 2100 | | Téléphone | +4542555628 | +4552555348 | #### Finlande | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 01-01-1999 | 01-01-1999 | | Prénom | Test | Person FI | | Nom | Person-fi | Test | | E-mail | customer@email.fi | customer+denied@email.fi | | Rue | Mannerheimintie | Mannerheimintie | | Numéro de rue | 34 | 34 | | Ville | Helsinki | Helsinki | | Code postal | 00100 | 00100 | | Téléphone | +358401234567 | +358401234568 | #### France | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 10-07-1990 | 10-07-1990 | | Lieu de naissance | Paris | Paris | | Prénom | Test | Test | | Nom | Person-fr | Person-fr | | E-mail | customer@email.fr | customer+denied@email.fr | | Rue | rue La Fayette | rue La Fayette | | Numéro de rue | 33 | 33 | | Ville | Paris | Paris | | Code postal | 75009 | 75009 | | Téléphone | +33689854321 | +33687984322 | #### Allemagne | | Approuvé | Refusé | | ----------------- | --------------------- | ------------------------ | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Mock | Test | | Nom | Mock | Person-de | | E-mail | customer@email.de | customer+denied@email.de | | Rue | Neue Schönhauser Str. | Neue Schönhauser Str. | | Numéro de rue | 2 | 2 | | Ville | Berlin | Berlin | | Code postal | 10178 | 10178 | | Téléphone | +49017614284340 | +49017610927312 | #### Grèce | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Numéro fiscal | 090000045 | 090000045 | | Date de naissance | 01-01-1960 | 11-11-1970 | | Prénom | Test | Test | | Nom | Person-gr | Test-gr | | E-mail | customer@email.gr | customer+denied@email.gr | | Rue | Kephisias | Baralo | | Numéro de rue | 37 | 56 | | Code postal | 151 23 | 123 67 | | Ville | Athina | Athina | | Téléphone | +306945553624 | +306945553625 | #### Irlande | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-ie | Person-ie | | E-mail | customer@email.ie | customer+denied@email.ie | | Rue | King Street South | King Street South | | Numéro de rue | 30 | 30 | | Ville | Dublin | Dublin | | Code EIR | D02 C838 | D02 C838 | | Téléphone | +353855351400 | +353855351401 | #### Italie | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 01-01-1980 | 01-01-1980 | | Prénom | Test | Test | | Nom | Person-it | Person-it | | E-mail | customer@email.it | customer+denied@email.it | | Code fiscal | RSSBNC80A41H501B | RSSBNC80A41H501B | | Rue | Via Enrico Fermi | Via Enrico Fermi | | Numéro de rue | 150 | 150 | | Ville | Rome | Rome | | Code postal | 00146 | 00146 | | Téléphone | +393339741231 | +393312232389 | #### Pays-Bas | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-nl | Person-nl | | E-mail | customer@email.nl | customer+denied@email.nl | | Rue | Osdorpplein | Osdorpplein | | Numéro de rue | 137 | 137 | | Ville | Amsterdam | Amsterdam | | Code postal | 1068 SR | 1068 SR | | Téléphone | +31689124321 | +31632167678 | #### Nouvelle-Zélande | | Approuvé | Refusé | | ----------------- | ------------------------ | ------------------------ | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-nz | Person-nz | | Rue | Mount Wellington Highway | Mount Wellington Highway | | Numéro de rue | 286 | 286 | | Code postal | 6011 | 6011 | | Ville | Auckland | Wellington | | Téléphone | +6427555290 | +642993007712 | | Adresse e-mail | customer@email.nz | customer+denied@email.nz | #### Norvège | | Approuvé | Refusé | | ----------------- | ----------------------------- | ------------------------ | | Date de naissance | 01-08-1970 | 01-08-1970 | | Prénom | Jane | Test | | Nom | Test | Person-no | | E-mail | customer@email.no | customer+denied@email.no | | Numéro personnel | NO1087000571 | NO1087000148 | | Rue | Edvard Munchs Plass | Sæffleberggate | | Numéro de rue | 1 | 56 | | Ville | Oslo | Oslo | | Code postal | 0194 | 0563 | | Téléphone | +4740123456 | +4740123457 | #### Pologne | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 05-05-1967 | 05-05-1967 | | Prénom | Test | Test | | Nom | Person-pl | Person-pl | | Rue | Ul. Górczewska | Ul. Górczewska | | Numéro de rue | 124 | 124 | | Code postal | 01-460 | 01-460 | | Ville | Varsovie | Varsovie | | Téléphone | +48795222223 | +48795223325 | | E-mail | customer@email.pl | customer+denied@email.pl | #### Portugal | | Approuvé | Refusé | | ----------------- | ---------------------------------- | ---------------------------------- | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-pt | Person-pt | | Rue | Avenida Dom João II | Avenida Dom João II | | Numéro de rue | 40 | 40 | | Code postal | 1990-094 | 1990-094 | | Ville | Lisbonne | Lisbonne | | Téléphone | +351935556731 | +351915593837 | | E-mail | customer@email.pt | customer+denied@email.pt | #### Roumanie | | Approuvé | Refusé | | --------------------------------------- | ----------------- | ------------------------ | | Date de naissance | 25-12-1970 | 25-12-1970 | | Prénom | Test | Test | | Nom | Person-ro | Person-ro | | E-mail | customer@email.ro | customer+denied@email.ro | | Rue | Drumul Taberei | Drumul Taberei | | Numéro de rue | 35 | 35 | | Ville | Bucarest | Bucarest | | Secteur | Sectorul 6 | Sectorul 6 | | Code postal | 061357 | 061357 | | Téléphone | +40741209876 | +40707127444 | | Numéro d’identification personnel (CNP) | 1701225193558 | | #### Espagne | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | DNI/NIE | 99999999R | 99999999R | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-es | Person-es | | E-mail | customer@email.es | customer+denied@email.es | | Rue | C. de Atocha | C. de Atocha | | Numéro de rue | 27 | 27 | | Ville | Madrid | Madrid | | Code postal | 28012 | 28012 | | Téléphone | +34672563009 | +34682425101 | #### Suède | | Approuvé | Refusé | | ----------------- | ---------------------------- | ------------------------ | | Date de naissance | 21-03-1941 | 28-10-1941 | | Prénom | Alice | Test | | Nom | Test | Person-se | | E-mail | customer@email.se | customer+denied@email.se | | Rue | Södra Blasieholmshamnen | Karlaplan | | Numéro de rue | 2 | 3 | | Ville | Stockholm | Stockholm | | Code postal | 11 148 | 11 460 | | Téléphone | +46701740615 | +46701740620 | #### Suisse | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 01-01-1990 | 01-01-2000 | | Prénom | Accepté | Client | | Nom | Person-ch | Person-ch | | Rue | Augustinergasse | Bahnhofstrasse | | Numéro de rue | 2 | 77 | | Code postal | 4051 | 8001 | | Ville | Bâle | Zürich | | Téléphone | +41758680000 | +41758680001 | | E-mail | customer@email.ch | customer+denied@email.ch | #### Royaume-Uni | | Approuvé | Refusé | | ----------------- | --------------------- | ------------------------ | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-uk | Person-uk | | E-mail | customer@email.uk | customer+denied@email.uk | | Rue | New Burlington Street | New Burlington Street | | Numéro de rue | 10 | 10 | | Appartement | Apt 214 | Apt 214 | | Code postal | W1S 3BE | W1S 3BE | | Ville | Londres | Londres | | Téléphone | +447755564318 | +447355505530 | #### États-Unis | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 07-10-1970 | 07-10-1970 | | Prénom | Test | Test | | Nom | Person-us | Person-us | | E-mail | customer@email.us | customer+denied@email.us | | Rue | Amsterdam Ave | Amsterdam Ave | | Numéro de rue | 509 | 509 | | Ville | New York | New York | | État | New York | New York | | Code postal | 10024-3941 | 10024-3941 | | Téléphone | +13106683312 | +13106354386 | ### Authentification à deux facteurs Tout numéro à six chiffres forme un code d’authentification à deux facteurs valide. Utilisez `999999`pour que l’authentification échoue. ### Mode de remboursement Dans le flux Klarna, vous pouvez utiliser les valeurs de test suivantes pour essayer divers types de remboursements : | Type | Valeur | | ----------------------- | ------------------------------------------------------------------------------------------------------------ | | Prélèvement automatique | DE11520513735120710131 | | Virement bancaire | Banque de démonstration | | Carte bancaire | - Numéro : 4111 1111 1111 1111 - CVV : 123 - Date d’expiration : toute date future valide | | Carte de débit | - Numéro : 4012 8888 8888 1881 - CVV : 123 - Date d’expiration : toute date future valide | ## Optional: Mettre à niveau un moyen de paiement enregistré [Côté serveur] En cas de mise à niveau de l’abonnement, le client doit repasser par le tunnel de paiement de Klarna. Cela permet à Klarna de disposer des informations les plus précises sur les abonnements et d’optimiser les taux d’autorisation. #### Mise à niveau et renouvellement des débits Créez une [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) avec la même structure que lorsque vous débitez un moyen de paiement enregistré et incluez `setup_future_usage` pour indiquer que vous souhaitez mettre à niveau le moyen de paiement existant. Transmettez les nouvelles informations relatives à l’abonnement et utilisez la même `reference` que lorsque vous avez enregistré le moyen de paiement pour la première fois. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=10000 \ -d currency=usd \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d setup_future_usage=off_session \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "amount_details[line_items][0][product_name]=Annual subscription renewal" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=10000" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=year" ``` Le PaymentIntent qui en résulte nécessite une redirection vers Klarna pour être complété. En savoir plus sur [comment gérer la redirection](https://docs.stripe.com/payments/klarna/set-up-future-payments.md?web-or-mobile=web&payment-ui=elements#web-redirect-customer). #### Mettez à niveau et débitez plus tard Créez une [SetupIntent](https://docs.stripe.com/api/payment_intents.md) et transmettez le moyen de paiement existant enregistré. Transmettez les nouvelles informations relatives à l’abonnement et utilisez la même `reference` que lorsque vous avez enregistré le moyen de paiement pour la première fois. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "payment_method_options[klarna][currency]=usd" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=annual" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][amount]=20000" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][date]=2026-01-01" ``` Le SetupIntent qui en résulte nécessite une redirection vers Klarna pour être complété. En savoir plus sur comment [gérer la redirection](https://docs.stripe.com/payments/klarna/set-up-future-payments.md?web-or-mobile=web&payment-ui=elements#web-redirect-customer). ## Optional: Supprimer un compte Klarna enregistré [Côté serveur] Vous pouvez utiliser l’API [detach](https://docs.stripe.com/api/payment_methods/detach.md) pour supprimer le compte Klarna enregistré d’un client de ses moyens de paiement. Supprimez un compte Klarna lorsque vous savez qu’il ne sera plus utilisé, par exemple lorsque le client annule son abonnement. ```curl curl -X POST https://api.stripe.com/v1/payment_methods/{{PAYMENT_METHOD_ID}}/detach \ -u "<>:" ``` # API directe > This is a API directe for when payment-ui is direct-api. View the full page at https://docs.stripe.com/payments/klarna/set-up-future-payments?payment-ui=direct-api. Si vous souhaitez créer une interface utilisateur de paiement personnalisée, utilisez l’[API Payment Intents](https://docs.stripe.com/api/payment_intents.md) avec [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) ou l’[API Setup Intents](https://docs.stripe.com/api/setup_intents.md) pour sauvegarder les détails du moyen de paiement Klarna et facturer un client plus tard. ## Configurer Stripe [Côté serveur] [Côté client] Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre application : #### 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' ``` ## Créer ou récupérer un objet Customer avant la configuration [Côté serveur] Pour réutiliser un moyen de paiement Klarna en vue de paiements futurs, vous devez l’associer à un objet *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments). Créez un objet Customer lorsque votre client crée un compte auprès votre entreprise. En associant l’ID de l’objet Customer à votre propre représentation interne de ce client, vous pourrez par la suite récupérer et utiliser les informations du moyen de paiement enregistré. Si votre client n’a pas créé de compte, vous pouvez tout de même lui créer un objet Customer, puis l’associer à votre représentation interne de ce compte du client par la suite. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Créer un PaymentIntent ou un SetupIntent [Côté serveur] Sélectionnez ci-dessous le scénario qui correspond le mieux à votre cas d’usage. #### Abonnement avec paiement initial If you’re setting up a subscription and charging the initial payment, use the Payment Intents API with [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage). You should pass subscription details when you set up the subscription. Transmission des détails de l’abonnement : - Ensures your customers have access to all applicable [Klarna payment options](https://docs.stripe.com/payments/klarna.md#payment-options), including Pay in 3 or 4, which is only available for subscriptions that have specific lengths. - Réduit les taux d’assistance et les abandons de clients dus à des détails d’achat peu clairs dans l’application Klarna, où Klarna restitue les données d’abonnement de vos clients. Use the [payment_method_options](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-klarna) parameter to pass in subscription details. The subscription [reference](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-klarna-subscriptions-reference) is an arbitrary identifier you choose that isn’t visible to customers (for example, `GYM_ANNUAL_MEMBERSHIP` or `ID_123`). > #### Utiliser la même référence pour facturer le mode de paiement enregistré > > Lorsque vous utilisez le mode de paiement sauvegardé, utilisez la même référence d’abonnement. La valeur de référence doit correspondre à la valeur du champ `amount_details[line_items][payment_method_options][klarna][subscription_reference]`, si votre intégration l’utilise ultérieurement. Si la valeur ne correspond pas, vous recevez un message d’erreur. L’exemple ci-dessous illustre comment transmettre les détails d’un abonnement annuel. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=5000 \ -d currency=usd \ -d customer={{CUSTOMER_ID}} \ -d setup_future_usage=off_session \ -d "amount_details[line_items][0][product_name]=Annual subscription" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=5000" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=year" ``` Le PaymentIntent obtenu contient un [client_secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret). Transmettez la clé secrète côté client pour rediriger votre acheteur vers Klarna et autoriser le moyen de paiement enregistré. #### Produits avec ou sans abonnement Si vous facturez un produit unique et mettez en place un abonnement en même temps, utilisez l’API Payment Intents avec [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage). Vous devez transmettre les détails de l’abonnement lorsque vous le configurez. Transmission des détails de l’abonnement : - Ensures your customers have access to all applicable [Klarna payment options](https://docs.stripe.com/payments/klarna.md#payment-options), including Pay in 3 or 4, which is only available for subscriptions that have specific lengths. - Réduit les taux d’assistance et les abandons de clients dus à des détails d’achat peu clairs dans l’application Klarna, où Klarna restitue les données d’abonnement de vos clients. Use the [payment_method_options](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-klarna) parameter to pass in subscription details. The subscription [reference](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-klarna-subscriptions-reference) is an arbitrary identifier you choose that isn’t visible to customers (for example, `GYM_ANNUAL_MEMBERSHIP` or `ID_123`). > #### Utiliser la même référence pour facturer le mode de paiement enregistré > > Lorsque vous utilisez le mode de paiement sauvegardé, utilisez la même référence d’abonnement. La valeur de référence doit correspondre à la valeur du champ `amount_details[line_items][payment_method_options][klarna][subscription_reference]`, si votre intégration l’utilise ultérieurement. Si la valeur ne correspond pas, vous recevez un message d’erreur. L’exemple ci-dessous illustre comment transmettre les détails d’un abonnement annuel. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=100000 \ -d currency=usd \ -d customer={{CUSTOMER_ID}} \ -d setup_future_usage=off_session \ -d "amount_details[line_items][0][product_name]=One-off product" \ -d "amount_details[line_items][0][unit_cost]=5000" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][1][product_name]=Annual subscription" \ -d "amount_details[line_items][1][unit_cost]=5000" \ -d "amount_details[line_items][1][quantity]=1" \ -d "amount_details[line_items][1][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=annual" ``` Le PaymentIntent obtenu contient un [client_secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret). Transmettez la clé secrète côté client pour rediriger votre acheteur vers Klarna et autoriser le moyen de paiement enregistré. #### Abonnement avec période d’essai Si vous configurez un abonnement avec une période d’essai, utilisez l’API Setup Intents. Vous devez transmettre les détails de l’abonnement lorsque vous le configurez. Transmission des détails de l’abonnement : - Ensures your customers have access to all applicable [Klarna payment options](https://docs.stripe.com/payments/klarna.md#payment-options), including Pay in 3 or 4, which is only available for subscriptions that have specific lengths. - Réduit les taux d’assistance et les abandons de clients dus à des détails d’achat peu clairs dans l’application Klarna, où Klarna restitue les données d’abonnement de vos clients. Use the [payment_method_options](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-klarna) parameter to pass in subscription details. The subscription [reference](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-klarna-subscriptions-reference) is an arbitrary identifier you choose that isn’t visible to customers (for example, `GYM_ANNUAL_MEMBERSHIP` or `ID_123`). > #### Utiliser la même référence pour facturer le mode de paiement enregistré > > Lorsque vous utilisez le mode de paiement sauvegardé, utilisez la même référence d’abonnement. La valeur de référence doit correspondre à la valeur du champ `amount_details[line_items][payment_method_options][klarna][subscription_reference]`, si votre intégration l’utilise ultérieurement. Si la valeur ne correspond pas, vous recevez un message d’erreur. L’exemple ci-dessous montre comment transmettre les détails d’un abonnement annuel. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "payment_method_options[klarna][currency]=usd" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=annual" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][amount]=10000" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][date]=2026-01-01" ``` Le SetupIntent obtenu contient un [client_secret](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret). Transmettez la clé secrète côté client pour rediriger votre acheteur vers Klarna et autoriser le moyen de paiement enregistré. #### Paiements à la demande Pour un cas d’usage *à la demande* (When a customer stores their payment method with a business, they can make on-demand future purchases without re-authenticating, such as ordering a ride in their ride-share app), vous pouvez utiliser l’API Payment Intents ou l’API Setup Intents. Si vous souhaitez traiter un paiement et enregistrer le moyen de paiement en même temps, utilisez l’API Payment Intents. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=5000 \ -d currency=usd \ -d "customer={{CUSTOMER_ID}}" \ -d setup_future_usage=off_session \ -d "amount_details[line_items][0][product_name]=Your product name" \ -d "amount_details[line_items][0][unit_cost]=5000" \ -d "amount_details[line_items][0][quantity]=1" ``` Si vous avez uniquement besoin d’enregistrer le moyen de paiement pour une utilisation ultérieure et que vous ne traitez pas de paiement, utilisez l’API Setup Intents. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d usage=on_session ``` ## Rediriger votre client [Côté client] Lorsqu’un client tente de configurer son compte Klarna pour de futurs paiements, utilisez [Stripe.js](https://docs.stripe.com/js.md) pour confirmer le PaymentIntent ou le SetupIntent. Stripe.js est notre bibliothèque JavaScript de base pour la création de flux de paiement. Le SDK gère automatiquement des fonctions comme la redirection décrite ci-dessous, et vous permet d’étendre votre intégration à d’autres moyens de paiement à l’avenir. ### Configurer Stripe.js Intégrez le script Stripe.js à votre page de paiement en l’ajoutant entre les balises head de votre fichier HTML. ```html Checkout ``` Créez une instance de Stripe.js avec le code JavaScript suivant sur votre page de paiement. ```javascript import {loadStripe} from '@stripe/stripe-js'; const stripe = await loadStripe('<>'); ``` Pour confirmer la configuration côté client, transmettez la clé secrète client de l’objet PaymentIntent ou SetupIntent que vous avez créé à l’étape 3. La clé secrète du client est différente de vos clés API qui servent à authentifier les requêtes de l’API Stripe. Elle doit être utilisée avec prudence, car elle peut servir à mener à bien le paiement. Ne l’enregistrez pas, ne l’intégrez pas dans des URL et ne la dévoilez à personne d’autre que votre client. ### Confirmer et rediriger Stripe.js redirige automatiquement votre client vers Klarna lorsque vous confirmez le PaymentIntent ou le SetupIntent. Une fois que le client a traité le processus, Klarna le redirige vers la `return_url` indiquée. #### PaymentIntent Transmettez le `client_secret` que vous avez reçu lors de la création de votre PaymentIntent à l’étape 3. La clé secrète du client est différente des clés d’API qui authentifient les requêtes d’API Stripe. Manipulez-la avec précaution car elle peut finaliser le paiement. Ne l’enregistrez pas, ne l’intégrez pas dans des URL et ne l’exposez à personne d’autre qu’au client. ```javascript // Redirects away from the client const {error} = await stripe.confirmKlarnaPayment( '{{PAYMENT_INTENT_CLIENT_SECRET}}', { payment_method: { billing_details: { email: 'jenny@example.com', address: { country: 'DE' } } }, return_url: 'https://example.com/setup/complete' } ); if (error) { // Inform the customer that there was an error. } ``` #### SetupIntent Transmettez le `client_secret` que vous avez reçu lors de la création de votre SetupIntent à l’étape 3. La clé secrète du client est différente des clés d’API qui authentifient les requêtes d’API Stripe. Manipulez-la avec précaution car elle peut finaliser le paiement. Ne l’enregistrez pas, ne l’intégrez pas dans des URL et ne l’exposez à personne d’autre qu’au client. ```javascript // Redirects away from the client const {error} = await stripe.confirmKlarnaSetup( '{{SETUP_INTENT_CLIENT_SECRET}}', { payment_method: { billing_details: { email: 'jenny@example.com', address: { country: 'DE', }, }, }, return_url: 'https://example.com/setup/complete', mandate_data: { customer_acceptance: { type: 'online', online: { infer_from_client: true } } }, } ); if (error) { // Inform the customer that there was an error. } ``` ## Surveiller les webhooks [Côté serveur] Utilisez une méthode telle que les [webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks) pour confirmer que le client a autorisé le contrat de facturation. Ne comptez pas sur votre client pour revenir à la page d’état du paiement. Lorsqu’un client autorise le contrat de facturation, Stripe émet un événement *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) ou [setup_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.succeeded) et l’état de l’Intent passe à `succeeded`. Enregistrez l’ID [payment_method](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-payment_method) qui en résulte pour effectuer ultérieurement des paiements à l’aide du PaymentMethod enregistré. Si un client n’autorise pas correctement le contrat de facturation, Stripe émet un événement de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) [payment_intent.payment_failed](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.payment_failed) ou de [setup_intent.setup_failed](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.setup_failed) et l’état de l’Intent repasse à `requires_payment_method`. ## Débiter un moyen de paiement Klarna enregistré [Côté serveur] #### Renouvellement de l’abonnement Au moment de débiter votre client hors session, utilisez les ID des objets *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) et *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) pour créer un [PaymentIntent](https://docs.stripe.com/api/payment_intents.md). Définissez quelques autres paramètres pour effectuer le *paiement hors session* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) : - Définissez [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) sur `true` pour indiquer que le client ne se trouve pas dans votre tunnel de paiement pendant cette tentative de paiement, ce qui entraîne le renvoi d’une erreur par le PaymentIntent si une authentification est requise. - Définissez la propriété [confirm](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-confirm) du PaymentIntent sur la valeur `true`, ce qui aura pour effet de générer immédiatement une confirmation lors de la création du PaymentIntent. - Renseignez l’ID du PaymentMethod dans [payment_method](https://docs.stripe.com/api.md#create_payment_intent-payment_method) et l’ID du client dans [customer](https://docs.stripe.com/api.md#create_payment_intent-customer). - Spécifiez une [return_url](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url) pour indiquer où Stripe doit rediriger le client à partir du site de Klarna. Envoyez les informations d’abonnement et les postes de facture à chaque renouvellement. Utilisez la même `reference` pour votre abonnement que lorsque vous avez configuré le moyen de paiement. Si les informations d’abonnement ont changé depuis que vous avez enregistré le moyen de paiement, envoyez les nouvelles informations avec la même `reference`. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=5000 \ -d currency=usd \ -d confirm=true \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d off_session=true \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "amount_details[line_items][0][product_name]=Annual subscription renewal" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=5000" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=year" ``` #### Paiement sur demande Au moment de débiter votre client, utilisez les ID des objets *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) et *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) pour créer un objet [PaymentIntent](https://docs.stripe.com/api/payment_intents.md). Définissez quelques autres paramètres pour effectuer le *paiement hors session* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) : - Définissez [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) sur `false` pour indiquer que le client se trouve dans un tunnel de paiement lors de cette tentative de paiement. En cas d’erreur, par exemple si une authentification est requise, le client est redirigé vers la page Klarna pour s’authentifier ou résoudre le problème. - Définissez la propriété [confirm](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-confirm) du PaymentIntent sur la valeur `true`, ce qui aura pour effet de générer immédiatement une confirmation lors de la création du PaymentIntent. - Renseignez l’ID du PaymentMethod dans [payment_method](https://docs.stripe.com/api.md#create_payment_intent-payment_method) et l’ID du client dans [customer](https://docs.stripe.com/api.md#create_payment_intent-customer). L’exemple ci-dessous inclut des détails optionnels en utilisant [payment_method_options](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options) pour aider à améliorer les taux de souscription et d’autorisation de Klarna. Cela inclut des détails sur la manière dont cette méthode de paiement Klarna sauvegardée devrait être utilisée à l’avenir, tels que les montants prévus pour les commandes futures et la fréquence des paiements. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d confirm=true \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d off_session=false \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "amount_details[line_items][0][product_name]=Annual subscription" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=1099" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]={{SUBSCRIPTION_ID}}" \ -d "payment_method_options[klarna][on_demand][average_amount]=1000" \ -d "payment_method_options[klarna][on_demand][minimum_amount]=100" \ -d "payment_method_options[klarna][on_demand][maximum_amount]=10000" \ -d "payment_method_options[klarna][on_demand][interval]=year" \ -d "payment_method_options[klarna][on_demand][interval_count]=1" ``` ## Gérer la révocation des moyens de paiement réutilisables [Côté serveur] Vous pouvez révoquer un moyen de paiement réutilisable de deux manières : - Un client peut désactiver un moyen de paiement réutilisable dans l’application mobile Klarna. Dans ce cas, Stripe vous envoie un événement [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated). Pour gérer cela, abonnez-vous aux événements [webhook](https://docs.stripe.com/webhooks.md), et appelez [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md) pour le désactiver. - Un client peut également désactiver une méthode de paiement réutilisable sur votre interface utilisateur, si elle est prise en charge. Dans ce scénario, votre serveur peut appeler [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md) pour gérer la désactivation. Dans les deux cas, après avoir appelé [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md), Stripe vous envoie un événement [payment_method.detached](https://docs.stripe.com/api/events/types.md#event_types-payment_method.detached). ## Tester votre intégration Lorsque vous testez votre intégration dans un environnement de test, vous pouvez simuler différents résultats dans la redirection de Klarna. > Klarna utilise des cookies pour le suivi des sessions. Pour tester différents emplacements clients, déconnectez-vous de l’environnement de test Klarna de la session précédente et utilisez les déclencheurs pertinents. Nous avons réuni ci-dessous des données de test pour les pays pris en charge. Dans un environnement de test, Klarna s’appuie sur l’adresse e-mail fournie pour approuver ou refuser une transaction. #### Australie | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 10/07/1970 | 03-05-1994 | | Prénom | Test | John | | Nom | Person-au | snow | | Rue | Wharf St | Silverwater Rd | | Numéro de rue | 4 | 1-5 | | Code postal | 4877 | 2128 | | Ville | Port Douglas | Silverwater | | Région | QLD | NSW | | Téléphone | +61473752244 | +61473763254 | | Adresse e-mail | customer@email.au | customer+denied@email.au | #### Autriche | | Approuvé | Refusé | | ----------------- | ------------------ | ------------------------ | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-at | Person-at | | E-mail | customer@email.at | customer+denied@email.at | | Rue | Mariahilfer Straße | Mariahilfer Straße | | Numéro de rue | 47 | 47 | | Ville | Vienne | Vienne | | Code postal | 1060 | 1060 | | Téléphone | +4306762600456 | +4306762600745 | #### Belgique | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-be | Person-be | | E-mail | customer@email.be | customer+denied@email.be | | Rue | Grote Markt | Grote Markt | | Numéro de rue | 1 | 1 | | Ville | Bruxelles | Bruxelles | | Code postal | 1 000 | 1 000 | | Téléphone | +32485121291 | +32485212123 | #### Canada | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-ca | Person-ca | | Rue | 2693 Byron Rd | 2693 Byron Rd | | Code postal | V7H 1L9 | V7H 1L9 | | Ville | North Vancouver | North Vancouver | | Région | BC | BC | | Téléphone | +15197438620 | +15197308624 | | Adresse e-mail | customer@email.ca | customer+denied@email.ca | #### République tchèque | | Approuvé | Refusé | | ----------------- | ----------------------- | ------------------------ | | Date de naissance | 01-01-1970 | 27-06-1992 | | Prénom | Test | Test | | Nom | Person-cz | Person-cz | | E-mail | customer@email.cz | customer+denied@email.cz | | Rue | Zazvorkova 1480/11 | Zázvorkova 1480/11 | | Code postal | 155 00 | 155 00 | | Ville | Prague | PRAHA 13 | | Téléphone | +420771613715 | +420771623691 | #### Danemark | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 01-01-1980 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-dk | Person-dk | | E-mail | customer@email.dk | customer+denied@email.dk | | Rue | Dantes Plads | Nygårdsvej | | Numéro de rue | 7 | 65 | | Ville | København Ø | København Ø | | Code postal | 1556 | 2100 | | Téléphone | +4542555628 | +4552555348 | #### Finlande | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 01-01-1999 | 01-01-1999 | | Prénom | Test | Person FI | | Nom | Person-fi | Test | | E-mail | customer@email.fi | customer+denied@email.fi | | Rue | Mannerheimintie | Mannerheimintie | | Numéro de rue | 34 | 34 | | Ville | Helsinki | Helsinki | | Code postal | 00100 | 00100 | | Téléphone | +358401234567 | +358401234568 | #### France | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 10-07-1990 | 10-07-1990 | | Lieu de naissance | Paris | Paris | | Prénom | Test | Test | | Nom | Person-fr | Person-fr | | E-mail | customer@email.fr | customer+denied@email.fr | | Rue | rue La Fayette | rue La Fayette | | Numéro de rue | 33 | 33 | | Ville | Paris | Paris | | Code postal | 75009 | 75009 | | Téléphone | +33689854321 | +33687984322 | #### Allemagne | | Approuvé | Refusé | | ----------------- | --------------------- | ------------------------ | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Mock | Test | | Nom | Mock | Person-de | | E-mail | customer@email.de | customer+denied@email.de | | Rue | Neue Schönhauser Str. | Neue Schönhauser Str. | | Numéro de rue | 2 | 2 | | Ville | Berlin | Berlin | | Code postal | 10178 | 10178 | | Téléphone | +49017614284340 | +49017610927312 | #### Grèce | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Numéro fiscal | 090000045 | 090000045 | | Date de naissance | 01-01-1960 | 11-11-1970 | | Prénom | Test | Test | | Nom | Person-gr | Test-gr | | E-mail | customer@email.gr | customer+denied@email.gr | | Rue | Kephisias | Baralo | | Numéro de rue | 37 | 56 | | Code postal | 151 23 | 123 67 | | Ville | Athina | Athina | | Téléphone | +306945553624 | +306945553625 | #### Irlande | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-ie | Person-ie | | E-mail | customer@email.ie | customer+denied@email.ie | | Rue | King Street South | King Street South | | Numéro de rue | 30 | 30 | | Ville | Dublin | Dublin | | Code EIR | D02 C838 | D02 C838 | | Téléphone | +353855351400 | +353855351401 | #### Italie | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 01-01-1980 | 01-01-1980 | | Prénom | Test | Test | | Nom | Person-it | Person-it | | E-mail | customer@email.it | customer+denied@email.it | | Code fiscal | RSSBNC80A41H501B | RSSBNC80A41H501B | | Rue | Via Enrico Fermi | Via Enrico Fermi | | Numéro de rue | 150 | 150 | | Ville | Rome | Rome | | Code postal | 00146 | 00146 | | Téléphone | +393339741231 | +393312232389 | #### Pays-Bas | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-nl | Person-nl | | E-mail | customer@email.nl | customer+denied@email.nl | | Rue | Osdorpplein | Osdorpplein | | Numéro de rue | 137 | 137 | | Ville | Amsterdam | Amsterdam | | Code postal | 1068 SR | 1068 SR | | Téléphone | +31689124321 | +31632167678 | #### Nouvelle-Zélande | | Approuvé | Refusé | | ----------------- | ------------------------ | ------------------------ | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-nz | Person-nz | | Rue | Mount Wellington Highway | Mount Wellington Highway | | Numéro de rue | 286 | 286 | | Code postal | 6011 | 6011 | | Ville | Auckland | Wellington | | Téléphone | +6427555290 | +642993007712 | | Adresse e-mail | customer@email.nz | customer+denied@email.nz | #### Norvège | | Approuvé | Refusé | | ----------------- | ----------------------------- | ------------------------ | | Date de naissance | 01-08-1970 | 01-08-1970 | | Prénom | Jane | Test | | Nom | Test | Person-no | | E-mail | customer@email.no | customer+denied@email.no | | Numéro personnel | NO1087000571 | NO1087000148 | | Rue | Edvard Munchs Plass | Sæffleberggate | | Numéro de rue | 1 | 56 | | Ville | Oslo | Oslo | | Code postal | 0194 | 0563 | | Téléphone | +4740123456 | +4740123457 | #### Pologne | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 05-05-1967 | 05-05-1967 | | Prénom | Test | Test | | Nom | Person-pl | Person-pl | | Rue | Ul. Górczewska | Ul. Górczewska | | Numéro de rue | 124 | 124 | | Code postal | 01-460 | 01-460 | | Ville | Varsovie | Varsovie | | Téléphone | +48795222223 | +48795223325 | | E-mail | customer@email.pl | customer+denied@email.pl | #### Portugal | | Approuvé | Refusé | | ----------------- | ---------------------------------- | ---------------------------------- | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-pt | Person-pt | | Rue | Avenida Dom João II | Avenida Dom João II | | Numéro de rue | 40 | 40 | | Code postal | 1990-094 | 1990-094 | | Ville | Lisbonne | Lisbonne | | Téléphone | +351935556731 | +351915593837 | | E-mail | customer@email.pt | customer+denied@email.pt | #### Roumanie | | Approuvé | Refusé | | --------------------------------------- | ----------------- | ------------------------ | | Date de naissance | 25-12-1970 | 25-12-1970 | | Prénom | Test | Test | | Nom | Person-ro | Person-ro | | E-mail | customer@email.ro | customer+denied@email.ro | | Rue | Drumul Taberei | Drumul Taberei | | Numéro de rue | 35 | 35 | | Ville | Bucarest | Bucarest | | Secteur | Sectorul 6 | Sectorul 6 | | Code postal | 061357 | 061357 | | Téléphone | +40741209876 | +40707127444 | | Numéro d’identification personnel (CNP) | 1701225193558 | | #### Espagne | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | DNI/NIE | 99999999R | 99999999R | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-es | Person-es | | E-mail | customer@email.es | customer+denied@email.es | | Rue | C. de Atocha | C. de Atocha | | Numéro de rue | 27 | 27 | | Ville | Madrid | Madrid | | Code postal | 28012 | 28012 | | Téléphone | +34672563009 | +34682425101 | #### Suède | | Approuvé | Refusé | | ----------------- | ---------------------------- | ------------------------ | | Date de naissance | 21-03-1941 | 28-10-1941 | | Prénom | Alice | Test | | Nom | Test | Person-se | | E-mail | customer@email.se | customer+denied@email.se | | Rue | Södra Blasieholmshamnen | Karlaplan | | Numéro de rue | 2 | 3 | | Ville | Stockholm | Stockholm | | Code postal | 11 148 | 11 460 | | Téléphone | +46701740615 | +46701740620 | #### Suisse | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 01-01-1990 | 01-01-2000 | | Prénom | Accepté | Client | | Nom | Person-ch | Person-ch | | Rue | Augustinergasse | Bahnhofstrasse | | Numéro de rue | 2 | 77 | | Code postal | 4051 | 8001 | | Ville | Bâle | Zürich | | Téléphone | +41758680000 | +41758680001 | | E-mail | customer@email.ch | customer+denied@email.ch | #### Royaume-Uni | | Approuvé | Refusé | | ----------------- | --------------------- | ------------------------ | | Date de naissance | 10/07/1970 | 10/07/1970 | | Prénom | Test | Test | | Nom | Person-uk | Person-uk | | E-mail | customer@email.uk | customer+denied@email.uk | | Rue | New Burlington Street | New Burlington Street | | Numéro de rue | 10 | 10 | | Appartement | Apt 214 | Apt 214 | | Code postal | W1S 3BE | W1S 3BE | | Ville | Londres | Londres | | Téléphone | +447755564318 | +447355505530 | #### États-Unis | | Approuvé | Refusé | | ----------------- | ----------------- | ------------------------ | | Date de naissance | 07-10-1970 | 07-10-1970 | | Prénom | Test | Test | | Nom | Person-us | Person-us | | E-mail | customer@email.us | customer+denied@email.us | | Rue | Amsterdam Ave | Amsterdam Ave | | Numéro de rue | 509 | 509 | | Ville | New York | New York | | État | New York | New York | | Code postal | 10024-3941 | 10024-3941 | | Téléphone | +13106683312 | +13106354386 | ### Authentification à deux facteurs Tout numéro à six chiffres forme un code d’authentification à deux facteurs valide. Utilisez `999999`pour que l’authentification échoue. ### Mode de remboursement Dans le flux Klarna, vous pouvez utiliser les valeurs de test suivantes pour essayer divers types de remboursements : | Type | Valeur | | ----------------------- | ------------------------------------------------------------------------------------------------------------ | | Prélèvement automatique | DE11520513735120710131 | | Virement bancaire | Banque de démonstration | | Carte bancaire | - Numéro : 4111 1111 1111 1111 - CVV : 123 - Date d’expiration : toute date future valide | | Carte de débit | - Numéro : 4012 8888 8888 1881 - CVV : 123 - Date d’expiration : toute date future valide | ## Optional: Gérer la redirection Klarna manuellement [Côté serveur] Nous vous recommandons de vous appuyer sur Stripe.js pour gérer les redirections Klarna et les autorisations de facturation sur le client. Utiliser le SDK natif vous permet d’étendre votre intégration à d’autres moyens de paiement. Cependant, vous pouvez rediriger manuellement vos clients sur votre serveur. Pour ce faire, procédez comme suit. *Confirmez* (Confirming an intent indicates that the customer intends to use the current or provided payment method. Upon confirmation, the intent attempts to initiate the portions of the flow that have real-world side effects) le PaymentIntent ou le SetupIntent au moment de la création en incluant `confirm: true`. Indiquez une `return_url` pour indiquer où Stripe doit rediriger l’utilisateur une fois qu’il a terminé la configuration sur le site Web ou l’application mobile de Klarna. L’état de l’intention est `requires_action` et le type `next_action` est `redirect_to_url`. ```json { "id": "seti_1IQ9hjJJahOk1vSNevPWnhEN", "object": "setup_intent","status": "requires_action", "next_action": { "type": "redirect_to_url", "redirect_to_url": { "url": "https://hooks.stripe.com/...", "return_url": "https://example.com/setup/complete" } }, "application": null, "cancellation_reason": null, "client_secret": "seti_1IQ9hjJJahOk1vSNevPWnhEN_secret_J2EAlI0GQbQKV9tg7ITRcUWRBiAwvUV", "created": 1614597263, "customer": null, "description": null, "last_setup_error": null, "latest_attempt": "setatt_1IQ9hkJJahOk1vSN0rsCpnLI", "livemode": false, "mandate": null, "metadata": {}, "next_action": null, "on_behalf_of": null, "payment_method": "pm_1IQ9hjJJahOk1vSNDc5lQWia", "payment_method_options": {}, "payment_method_types": ["klarna"], "single_use_mandate": null, "usage": "off_session" } ``` Redirigez le client vers l’URL fournie dans la propriété `next_action.redirect_to_url.url`. ## Optional: Mettre à niveau un moyen de paiement enregistré [Côté serveur] En cas de mise à niveau de l’abonnement, le client doit repasser par le tunnel de paiement de Klarna. Cela permet à Klarna de disposer des informations les plus précises sur les abonnements et d’optimiser les taux d’autorisation. #### Mise à niveau et renouvellement des débits Créez une [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) avec la même structure que lorsque vous débitez un moyen de paiement enregistré et incluez `setup_future_usage` pour indiquer que vous souhaitez mettre à niveau le moyen de paiement existant. Transmettez les nouvelles informations relatives à l’abonnement et utilisez la même `reference` que lorsque vous avez enregistré le moyen de paiement pour la première fois. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=10000 \ -d currency=usd \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d setup_future_usage=off_session \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "amount_details[line_items][0][product_name]=Annual subscription renewal" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=10000" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=year" ``` Le PaymentIntent qui en résulte nécessite une redirection vers Klarna pour être complété. En savoir plus sur [comment gérer la redirection](https://docs.stripe.com/payments/klarna/set-up-future-payments.md?web-or-mobile=web&payment-ui=elements#web-redirect-customer). #### Mettez à niveau et débitez plus tard Créez une [SetupIntent](https://docs.stripe.com/api/payment_intents.md) et transmettez le moyen de paiement existant enregistré. Transmettez les nouvelles informations relatives à l’abonnement et utilisez la même `reference` que lorsque vous avez enregistré le moyen de paiement pour la première fois. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "payment_method_options[klarna][currency]=usd" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=annual" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][amount]=20000" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][date]=2026-01-01" ``` Le SetupIntent qui en résulte nécessite une redirection vers Klarna pour être complété. En savoir plus sur comment [gérer la redirection](https://docs.stripe.com/payments/klarna/set-up-future-payments.md?web-or-mobile=web&payment-ui=elements#web-redirect-customer). ## Optional: Supprimer un compte Klarna enregistré [Côté serveur] Vous pouvez utiliser l’API [detach](https://docs.stripe.com/api/payment_methods/detach.md) pour supprimer le compte Klarna enregistré d’un client de ses moyens de paiement. Supprimez un compte Klarna lorsque vous savez qu’il ne sera plus utilisé, par exemple lorsque le client annule son abonnement. ```curl curl -X POST https://api.stripe.com/v1/payment_methods/{{PAYMENT_METHOD_ID}}/detach \ -u "<>:" ``` # iOS > This is a iOS for when payment-ui is mobile and platform is ios. View the full page at https://docs.stripe.com/payments/klarna/set-up-future-payments?payment-ui=mobile&platform=ios. Utilisez l’[API Payment Intents](https://docs.stripe.com/api/payment_intents.md) avec [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) ou l’[API Setup Intents](https://docs.stripe.com/api/setup_intents.md) pour enregistrer les détails du moyen de paiement Klarma. ## Configurer Stripe [Côté serveur] [Côté client] Tout d’abord, il vous faut un compte Stripe. [Inscrivez-vous](https://dashboard.stripe.com/register). ### Côté serveur Pour cette intégration, votre serveur doit être doté d’endpoints qui communiquent avec l’API Stripe. 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' ``` ### Côté client 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. ## Créer ou récupérer un objet Customer [Côté serveur] Pour réutiliser un moyen de paiement Klarna en vue de paiements futurs, vous devez l’associer à un objet *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments). Créez un objet Customer lorsque votre client crée un compte auprès votre entreprise. En associant l’ID de l’objet Customer à votre propre représentation interne de ce client, vous pourrez par la suite récupérer et utiliser les informations du moyen de paiement enregistré. Si votre client n’a pas créé de compte, vous pouvez tout de même lui créer un objet Customer, puis l’associer à votre représentation interne de ce compte du client par la suite. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Créer un PaymentIntent ou un SetupIntent [Côté serveur] Sélectionnez ci-dessous le scénario qui correspond le mieux à votre cas d’usage. #### Abonnement avec paiement initial If you’re setting up a subscription and charging the initial payment, use the Payment Intents API with [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage). You should pass subscription details when you set up the subscription. Transmission des détails de l’abonnement : - Ensures your customers have access to all applicable [Klarna payment options](https://docs.stripe.com/payments/klarna.md#payment-options), including Pay in 3 or 4, which is only available for subscriptions that have specific lengths. - Réduit les taux d’assistance et les abandons de clients dus à des détails d’achat peu clairs dans l’application Klarna, où Klarna restitue les données d’abonnement de vos clients. Use the [payment_method_options](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-klarna) parameter to pass in subscription details. The subscription [reference](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-klarna-subscriptions-reference) is an arbitrary identifier you choose that isn’t visible to customers (for example, `GYM_ANNUAL_MEMBERSHIP` or `ID_123`). > #### Utiliser la même référence pour facturer le mode de paiement enregistré > > Lorsque vous utilisez le mode de paiement sauvegardé, utilisez la même référence d’abonnement. La valeur de référence doit correspondre à la valeur du champ `amount_details[line_items][payment_method_options][klarna][subscription_reference]`, si votre intégration l’utilise ultérieurement. Si la valeur ne correspond pas, vous recevez un message d’erreur. L’exemple ci-dessous illustre comment transmettre les détails d’un abonnement annuel. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=5000 \ -d currency=usd \ -d customer={{CUSTOMER_ID}} \ -d setup_future_usage=off_session \ -d "amount_details[line_items][0][product_name]=Annual subscription" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=5000" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=year" ``` Le PaymentIntent obtenu contient un [client_secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret). Transmettez la clé secrète côté client pour rediriger votre acheteur vers Klarna et autoriser le moyen de paiement enregistré. #### Produits avec ou sans abonnement Si vous facturez un produit unique et mettez en place un abonnement en même temps, utilisez l’API Payment Intents avec [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage). Vous devez transmettre les détails de l’abonnement lorsque vous le configurez. Transmission des détails de l’abonnement : - Ensures your customers have access to all applicable [Klarna payment options](https://docs.stripe.com/payments/klarna.md#payment-options), including Pay in 3 or 4, which is only available for subscriptions that have specific lengths. - Réduit les taux d’assistance et les abandons de clients dus à des détails d’achat peu clairs dans l’application Klarna, où Klarna restitue les données d’abonnement de vos clients. Use the [payment_method_options](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-klarna) parameter to pass in subscription details. The subscription [reference](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-klarna-subscriptions-reference) is an arbitrary identifier you choose that isn’t visible to customers (for example, `GYM_ANNUAL_MEMBERSHIP` or `ID_123`). > #### Utiliser la même référence pour facturer le mode de paiement enregistré > > Lorsque vous utilisez le mode de paiement sauvegardé, utilisez la même référence d’abonnement. La valeur de référence doit correspondre à la valeur du champ `amount_details[line_items][payment_method_options][klarna][subscription_reference]`, si votre intégration l’utilise ultérieurement. Si la valeur ne correspond pas, vous recevez un message d’erreur. L’exemple ci-dessous illustre comment transmettre les détails d’un abonnement annuel. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=100000 \ -d currency=usd \ -d customer={{CUSTOMER_ID}} \ -d setup_future_usage=off_session \ -d "amount_details[line_items][0][product_name]=One-off product" \ -d "amount_details[line_items][0][unit_cost]=5000" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][1][product_name]=Annual subscription" \ -d "amount_details[line_items][1][unit_cost]=5000" \ -d "amount_details[line_items][1][quantity]=1" \ -d "amount_details[line_items][1][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=annual" ``` Le PaymentIntent obtenu contient un [client_secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret). Transmettez la clé secrète côté client pour rediriger votre acheteur vers Klarna et autoriser le moyen de paiement enregistré. #### Abonnement avec période d’essai Si vous configurez un abonnement avec une période d’essai, utilisez l’API Setup Intents. Vous devez transmettre les détails de l’abonnement lorsque vous le configurez. Transmission des détails de l’abonnement : - Ensures your customers have access to all applicable [Klarna payment options](https://docs.stripe.com/payments/klarna.md#payment-options), including Pay in 3 or 4, which is only available for subscriptions that have specific lengths. - Réduit les taux d’assistance et les abandons de clients dus à des détails d’achat peu clairs dans l’application Klarna, où Klarna restitue les données d’abonnement de vos clients. Use the [payment_method_options](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-klarna) parameter to pass in subscription details. The subscription [reference](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-klarna-subscriptions-reference) is an arbitrary identifier you choose that isn’t visible to customers (for example, `GYM_ANNUAL_MEMBERSHIP` or `ID_123`). > #### Utiliser la même référence pour facturer le mode de paiement enregistré > > Lorsque vous utilisez le mode de paiement sauvegardé, utilisez la même référence d’abonnement. La valeur de référence doit correspondre à la valeur du champ `amount_details[line_items][payment_method_options][klarna][subscription_reference]`, si votre intégration l’utilise ultérieurement. Si la valeur ne correspond pas, vous recevez un message d’erreur. L’exemple ci-dessous montre comment transmettre les détails d’un abonnement annuel. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "payment_method_options[klarna][currency]=usd" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=annual" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][amount]=10000" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][date]=2026-01-01" ``` Le SetupIntent obtenu contient un [client_secret](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret). Transmettez la clé secrète côté client pour rediriger votre acheteur vers Klarna et autoriser le moyen de paiement enregistré. #### Paiements à la demande Pour un cas d’usage *à la demande* (When a customer stores their payment method with a business, they can make on-demand future purchases without re-authenticating, such as ordering a ride in their ride-share app), vous pouvez utiliser l’API Payment Intents ou l’API Setup Intents. Si vous souhaitez traiter un paiement et enregistrer le moyen de paiement en même temps, utilisez l’API Payment Intents. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=5000 \ -d currency=usd \ -d "customer={{CUSTOMER_ID}}" \ -d setup_future_usage=off_session \ -d "amount_details[line_items][0][product_name]=Your product name" \ -d "amount_details[line_items][0][unit_cost]=5000" \ -d "amount_details[line_items][0][quantity]=1" ``` Si vous avez uniquement besoin d’enregistrer le moyen de paiement pour une utilisation ultérieure et que vous ne traitez pas de paiement, utilisez l’API Setup Intents. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d usage=on_session ``` ## Collecter les informations du moyen de paiement [Côté client] #### Swift ```swift // Klarna doesn't require additional parameters so we only need to pass the initialized // STPPaymentMethodKlarnaParams instance to STPPaymentMethodParams let klarnaParams = STPPaymentMethodKlarnaParams() let paymentMethodParams = STPPaymentMethodParams(klarna: klarnaParams, billingDetails: nil, metadata: nil) ``` ## Envoyer le paiement à Stripe [Côté client] Récupérez la clé secrète client à partir de l’intention que vous avez créée, puis appelez [confirmPaymentIntent](https://stripe.dev/stripe-ios/stripepayments/documentation/stripepayments/stppaymenthandler/confirmpayment\(_:with:completion:\)) ou [confirmSetupIntent](https://stripe.dev/stripe-ios/stripepayments/documentation/stripepayments/stppaymenthandler/confirmsetupintent\(_:with:completion:\)). Une vue Web s’affiche, et le client peut y effectuer le paiement avec Klarna. Ensuite, le bloc d’achèvement est appelé avec le résultat du paiement. #### PaymentIntent #### Swift ```swift let paymentIntentParams = STPPaymentIntentParams(clientSecret: paymentIntentClientSecret) paymentIntentParams.paymentMethodParams = paymentMethodParams paymentIntentParams.returnURL = "payments-example://stripe-redirect" STPPaymentHandler.shared().confirmPayment(withParams: paymentIntentParams, authenticationContext: self) { (handlerStatus, paymentIntent, error) in switch handlerStatus { case .succeeded: // Payment succeeded case .canceled: // Payment was canceled case .failed: // Payment failed @unknown default: fatalError() } } ``` #### SetupIntent #### Swift ```swift let setupIntentParams = STPSetupIntentConfirmParams(clientSecret: setupIntentClientSecret) setupIntentParams.paymentMethodParams = paymentMethodParams setupIntentParams.returnURL = "payments-example://stripe-redirect" STPPaymentHandler.shared().confirmSetupIntent(withParams: setupIntentParams, authenticationContext: self) { (handlerStatus, setupIntent, error) in switch handlerStatus { case .succeeded: // Setup succeeded case .canceled: // Setup was canceled case .failed: // Setup failed @unknown default: fatalError() } } ``` ## Surveiller les webhooks [Côté serveur] Utilisez une méthode telle que les [webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks) pour confirmer que le client a autorisé le contrat de facturation. Ne comptez pas sur votre client pour revenir à la page d’état du paiement. Lorsqu’un client autorise le contrat de facturation, Stripe émet un événement *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) ou [setup_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.succeeded) et l’état de l’Intent passe à `succeeded`. Enregistrez l’ID [payment_method](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-payment_method) qui en résulte pour effectuer ultérieurement des paiements à l’aide du PaymentMethod enregistré. Si un client n’autorise pas correctement le contrat de facturation, Stripe émet un événement de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) [payment_intent.payment_failed](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.payment_failed) ou de [setup_intent.setup_failed](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.setup_failed) et l’état de l’Intent repasse à `requires_payment_method`. ## Débiter un moyen de paiement Klarna enregistré [Côté serveur] #### Renouvellement de l’abonnement Au moment de débiter votre client hors session, utilisez les ID des objets *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) et *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) pour créer un [PaymentIntent](https://docs.stripe.com/api/payment_intents.md). Définissez quelques autres paramètres pour effectuer le *paiement hors session* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) : - Définissez [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) sur `true` pour indiquer que le client ne se trouve pas dans votre tunnel de paiement pendant cette tentative de paiement, ce qui entraîne le renvoi d’une erreur par le PaymentIntent si une authentification est requise. - Définissez la propriété [confirm](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-confirm) du PaymentIntent sur la valeur `true`, ce qui aura pour effet de générer immédiatement une confirmation lors de la création du PaymentIntent. - Renseignez l’ID du PaymentMethod dans [payment_method](https://docs.stripe.com/api.md#create_payment_intent-payment_method) et l’ID du client dans [customer](https://docs.stripe.com/api.md#create_payment_intent-customer). - Spécifiez une [return_url](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url) pour indiquer où Stripe doit rediriger le client à partir du site de Klarna. Envoyez les informations d’abonnement et les postes de facture à chaque renouvellement. Utilisez la même `reference` pour votre abonnement que lorsque vous avez configuré le moyen de paiement. Si les informations d’abonnement ont changé depuis que vous avez enregistré le moyen de paiement, envoyez les nouvelles informations avec la même `reference`. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=5000 \ -d currency=usd \ -d confirm=true \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d off_session=true \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "amount_details[line_items][0][product_name]=Annual subscription renewal" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=5000" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=year" ``` #### Paiement sur demande Au moment de débiter votre client, utilisez les ID des objets *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) et *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) pour créer un objet [PaymentIntent](https://docs.stripe.com/api/payment_intents.md). Définissez quelques autres paramètres pour effectuer le *paiement hors session* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) : - Définissez [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) sur `false` pour indiquer que le client se trouve dans un tunnel de paiement lors de cette tentative de paiement. En cas d’erreur, par exemple si une authentification est requise, le client est redirigé vers la page Klarna pour s’authentifier ou résoudre le problème. - Définissez la propriété [confirm](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-confirm) du PaymentIntent sur la valeur `true`, ce qui aura pour effet de générer immédiatement une confirmation lors de la création du PaymentIntent. - Renseignez l’ID du PaymentMethod dans [payment_method](https://docs.stripe.com/api.md#create_payment_intent-payment_method) et l’ID du client dans [customer](https://docs.stripe.com/api.md#create_payment_intent-customer). L’exemple ci-dessous inclut des détails optionnels en utilisant [payment_method_options](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options) pour aider à améliorer les taux de souscription et d’autorisation de Klarna. Cela inclut des détails sur la manière dont cette méthode de paiement Klarna sauvegardée devrait être utilisée à l’avenir, tels que les montants prévus pour les commandes futures et la fréquence des paiements. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d confirm=true \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d off_session=false \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "amount_details[line_items][0][product_name]=Annual subscription" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=1099" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]={{SUBSCRIPTION_ID}}" \ -d "payment_method_options[klarna][on_demand][average_amount]=1000" \ -d "payment_method_options[klarna][on_demand][minimum_amount]=100" \ -d "payment_method_options[klarna][on_demand][maximum_amount]=10000" \ -d "payment_method_options[klarna][on_demand][interval]=year" \ -d "payment_method_options[klarna][on_demand][interval_count]=1" ``` ## Gérer la révocation des moyens de paiement réutilisables [Côté serveur] Vous pouvez révoquer un moyen de paiement réutilisable de deux manières : - Un client peut désactiver un moyen de paiement réutilisable dans l’application mobile Klarna. Dans ce cas, Stripe vous envoie un événement [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated). Pour gérer cela, abonnez-vous aux événements [webhook](https://docs.stripe.com/webhooks.md), et appelez [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md) pour le désactiver. - Un client peut également désactiver une méthode de paiement réutilisable sur votre interface utilisateur, si elle est prise en charge. Dans ce scénario, votre serveur peut appeler [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md) pour gérer la désactivation. Dans les deux cas, après avoir appelé [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md), Stripe vous envoie un événement [payment_method.detached](https://docs.stripe.com/api/events/types.md#event_types-payment_method.detached). ## Optional: Gérer la redirection Klarna manuellement [Côté serveur] Nous vous recommandons de vous appuyer sur le SDK iOS pour gérer les redirections Klarna et les autorisations de facturation sur le client. Utiliser le SDK natif vous permet d’étendre votre intégration à d’autres moyens de paiement. Cependant, vous pouvez rediriger manuellement vos clients sur votre serveur. Pour ce faire, procédez comme suit. *Confirmez* (Confirming an intent indicates that the customer intends to use the current or provided payment method. Upon confirmation, the intent attempts to initiate the portions of the flow that have real-world side effects) le PaymentIntent ou le SetupIntent au moment de la création en incluant `confirm: true`. Indiquez une `return_url` pour indiquer où Stripe doit rediriger l’utilisateur une fois qu’il a terminé la configuration sur le site Web ou l’application mobile de Klarna. Après la création, l’état de l’intention est `requires_action` et le type `next_action` est `redirect_to_url`. ```json { "id": "seti_1IQ9hjJJahOk1vSNevPWnhEN", "object": "setup_intent","status": "requires_action", "next_action": { "type": "redirect_to_url", "redirect_to_url": { "url": "https://hooks.stripe.com/...", "return_url": "https://example.com/setup/complete" } }, "application": null, "cancellation_reason": null, "client_secret": "seti_1IQ9hjJJahOk1vSNevPWnhEN_secret_J2EAlI0GQbQKV9tg7ITRcUWRBiAwvUV", "created": 1614597263, "customer": null, "description": null, "last_setup_error": null, "latest_attempt": "setatt_1IQ9hkJJahOk1vSN0rsCpnLI", "livemode": false, "mandate": null, "metadata": {}, "next_action": null, "on_behalf_of": null, "payment_method": "pm_1IQ9hjJJahOk1vSNDc5lQWia", "payment_method_options": {}, "payment_method_types": ["klarna"], "single_use_mandate": null, "usage": "off_session" } ``` Redirigez le client vers l’URL fournie dans la propriété `next_action.redirect_to_url.url`. ## Optional: Mettre à niveau un moyen de paiement enregistré [Côté serveur] Faites repasser le client par le tunnel de paiement de Klarna s’il met à niveau son abonnement. Cela permet à Klarna de disposer des informations les plus précises sur l’abonnement et d’optimiser les taux d’autorisation. #### Mise à niveau et renouvellement des débits Créez une [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) avec la même structure que lorsque vous débitez un moyen de paiement enregistré et incluez `setup_future_usage` pour indiquer que vous souhaitez mettre à niveau le moyen de paiement existant. Transmettez les nouvelles informations relatives à l’abonnement et utilisez la même `reference` que lorsque vous avez enregistré le moyen de paiement pour la première fois. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=10000 \ -d currency=usd \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d setup_future_usage=off_session \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "amount_details[line_items][0][product_name]=Annual subscription renewal" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=10000" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=year" ``` Le PaymentIntent qui en résulte nécessite une redirection vers Klarna pour être complété. En savoir plus sur comment [gérer la redirection](https://docs.stripe.com/payments/klarna/set-up-future-payments.md#ios-submit-payment). #### Mettez à niveau et débitez plus tard Créez une [SetupIntent](https://docs.stripe.com/api/payment_intents.md) et transmettez le moyen de paiement existant enregistré. Transmettez les nouvelles informations relatives à l’abonnement et utilisez la même `reference` que lorsque vous avez enregistré le moyen de paiement pour la première fois. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "payment_method_options[klarna][currency]=usd" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=annual" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][amount]=20000" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][date]=2026-01-01" ``` Le SetupIntent qui en résulte nécessite une redirection vers Klarna pour être complété. En savoir plus sur comment [gérer la redirection](https://docs.stripe.com/payments/klarna/set-up-future-payments.md#ios-submit-payment). ## Optional: Supprimer un compte Klarna enregistré [Côté serveur] Vous pouvez utiliser l’API [detach](https://docs.stripe.com/api/payment_methods/detach.md) pour supprimer le compte Klarna enregistré d’un client de ses moyens de paiement. Supprimez un compte Klarna lorsque vous savez qu’il ne sera plus utilisé, par exemple lorsque le client annule son abonnement. ```curl curl -X POST https://api.stripe.com/v1/payment_methods/{{PAYMENT_METHOD_ID}}/detach \ -u "<>:" ``` # Android > This is a Android for when payment-ui is mobile and platform is android. View the full page at https://docs.stripe.com/payments/klarna/set-up-future-payments?payment-ui=mobile&platform=android. Utilisez l’[API Payment Intents](https://docs.stripe.com/api/payment_intents.md) avec [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) ou l’[API Setup Intents](https://docs.stripe.com/api/setup_intents.md) pour enregistrer les détails du moyen de paiement Klarma. ## Configurer Stripe [Côté serveur] [Côté client] Tout d’abord, il vous faut un compte Stripe. [Inscrivez-vous](https://dashboard.stripe.com/register). ### Côté serveur Pour cette intégration, votre serveur doit être doté d’endpoints qui communiquent avec l’API Stripe. 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' ``` ### Côté client 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.8.0") // Include the financial connections SDK to support US bank account as a payment method implementation("com.stripe:financial-connections:23.8.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. Les échantillons de code de Stripe utilisent également [OkHttp](https://github.com/square/okhttp) et [GSON](https://github.com/google/gson) pour envoyer des requêtes HTTP à un serveur. ## Créer ou récupérer un objet Customer [Côté serveur] Pour réutiliser un moyen de paiement Klarna en vue de paiements futurs, vous devez l’associer à un objet *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments). Créez un objet Customer lorsque votre client crée un compte auprès votre entreprise. En associant l’ID de l’objet Customer à votre propre représentation interne de ce client, vous pourrez par la suite récupérer et utiliser les informations du moyen de paiement enregistré. Si votre client n’a pas créé de compte, vous pouvez tout de même lui créer un objet Customer, puis l’associer à votre représentation interne de ce compte du client par la suite. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Créer un PaymentIntent ou un SetupIntent [Côté serveur] Sélectionnez ci-dessous le scénario qui correspond le mieux à votre cas d’usage. #### Abonnement avec paiement initial If you’re setting up a subscription and charging the initial payment, use the Payment Intents API with [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage). You should pass subscription details when you set up the subscription. Transmission des détails de l’abonnement : - Ensures your customers have access to all applicable [Klarna payment options](https://docs.stripe.com/payments/klarna.md#payment-options), including Pay in 3 or 4, which is only available for subscriptions that have specific lengths. - Réduit les taux d’assistance et les abandons de clients dus à des détails d’achat peu clairs dans l’application Klarna, où Klarna restitue les données d’abonnement de vos clients. Use the [payment_method_options](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-klarna) parameter to pass in subscription details. The subscription [reference](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-klarna-subscriptions-reference) is an arbitrary identifier you choose that isn’t visible to customers (for example, `GYM_ANNUAL_MEMBERSHIP` or `ID_123`). > #### Utiliser la même référence pour facturer le mode de paiement enregistré > > Lorsque vous utilisez le mode de paiement sauvegardé, utilisez la même référence d’abonnement. La valeur de référence doit correspondre à la valeur du champ `amount_details[line_items][payment_method_options][klarna][subscription_reference]`, si votre intégration l’utilise ultérieurement. Si la valeur ne correspond pas, vous recevez un message d’erreur. L’exemple ci-dessous illustre comment transmettre les détails d’un abonnement annuel. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=5000 \ -d currency=usd \ -d customer={{CUSTOMER_ID}} \ -d setup_future_usage=off_session \ -d "amount_details[line_items][0][product_name]=Annual subscription" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=5000" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=year" ``` Le PaymentIntent obtenu contient un [client_secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret). Transmettez la clé secrète côté client pour rediriger votre acheteur vers Klarna et autoriser le moyen de paiement enregistré. #### Produits avec ou sans abonnement Si vous facturez un produit unique et mettez en place un abonnement en même temps, utilisez l’API Payment Intents avec [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage). Vous devez transmettre les détails de l’abonnement lorsque vous le configurez. Transmission des détails de l’abonnement : - Ensures your customers have access to all applicable [Klarna payment options](https://docs.stripe.com/payments/klarna.md#payment-options), including Pay in 3 or 4, which is only available for subscriptions that have specific lengths. - Réduit les taux d’assistance et les abandons de clients dus à des détails d’achat peu clairs dans l’application Klarna, où Klarna restitue les données d’abonnement de vos clients. Use the [payment_method_options](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-klarna) parameter to pass in subscription details. The subscription [reference](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-klarna-subscriptions-reference) is an arbitrary identifier you choose that isn’t visible to customers (for example, `GYM_ANNUAL_MEMBERSHIP` or `ID_123`). > #### Utiliser la même référence pour facturer le mode de paiement enregistré > > Lorsque vous utilisez le mode de paiement sauvegardé, utilisez la même référence d’abonnement. La valeur de référence doit correspondre à la valeur du champ `amount_details[line_items][payment_method_options][klarna][subscription_reference]`, si votre intégration l’utilise ultérieurement. Si la valeur ne correspond pas, vous recevez un message d’erreur. L’exemple ci-dessous illustre comment transmettre les détails d’un abonnement annuel. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=100000 \ -d currency=usd \ -d customer={{CUSTOMER_ID}} \ -d setup_future_usage=off_session \ -d "amount_details[line_items][0][product_name]=One-off product" \ -d "amount_details[line_items][0][unit_cost]=5000" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][1][product_name]=Annual subscription" \ -d "amount_details[line_items][1][unit_cost]=5000" \ -d "amount_details[line_items][1][quantity]=1" \ -d "amount_details[line_items][1][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=annual" ``` Le PaymentIntent obtenu contient un [client_secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret). Transmettez la clé secrète côté client pour rediriger votre acheteur vers Klarna et autoriser le moyen de paiement enregistré. #### Abonnement avec période d’essai Si vous configurez un abonnement avec une période d’essai, utilisez l’API Setup Intents. Vous devez transmettre les détails de l’abonnement lorsque vous le configurez. Transmission des détails de l’abonnement : - Ensures your customers have access to all applicable [Klarna payment options](https://docs.stripe.com/payments/klarna.md#payment-options), including Pay in 3 or 4, which is only available for subscriptions that have specific lengths. - Réduit les taux d’assistance et les abandons de clients dus à des détails d’achat peu clairs dans l’application Klarna, où Klarna restitue les données d’abonnement de vos clients. Use the [payment_method_options](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-klarna) parameter to pass in subscription details. The subscription [reference](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-klarna-subscriptions-reference) is an arbitrary identifier you choose that isn’t visible to customers (for example, `GYM_ANNUAL_MEMBERSHIP` or `ID_123`). > #### Utiliser la même référence pour facturer le mode de paiement enregistré > > Lorsque vous utilisez le mode de paiement sauvegardé, utilisez la même référence d’abonnement. La valeur de référence doit correspondre à la valeur du champ `amount_details[line_items][payment_method_options][klarna][subscription_reference]`, si votre intégration l’utilise ultérieurement. Si la valeur ne correspond pas, vous recevez un message d’erreur. L’exemple ci-dessous montre comment transmettre les détails d’un abonnement annuel. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "payment_method_options[klarna][currency]=usd" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=annual" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][amount]=10000" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][date]=2026-01-01" ``` Le SetupIntent obtenu contient un [client_secret](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret). Transmettez la clé secrète côté client pour rediriger votre acheteur vers Klarna et autoriser le moyen de paiement enregistré. #### Paiements à la demande Pour un cas d’usage *à la demande* (When a customer stores their payment method with a business, they can make on-demand future purchases without re-authenticating, such as ordering a ride in their ride-share app), vous pouvez utiliser l’API Payment Intents ou l’API Setup Intents. Si vous souhaitez traiter un paiement et enregistrer le moyen de paiement en même temps, utilisez l’API Payment Intents. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=5000 \ -d currency=usd \ -d "customer={{CUSTOMER_ID}}" \ -d setup_future_usage=off_session \ -d "amount_details[line_items][0][product_name]=Your product name" \ -d "amount_details[line_items][0][unit_cost]=5000" \ -d "amount_details[line_items][0][quantity]=1" ``` Si vous avez uniquement besoin d’enregistrer le moyen de paiement pour une utilisation ultérieure et que vous ne traitez pas de paiement, utilisez l’API Setup Intents. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d usage=on_session ``` ## Collecter les informations du moyen de paiement [Côté client] #### Kotlin ```swift // Klarna doesn't require additional parameters so we only need to pass the initialized // STPPaymentMethodKlarnaParams instance to STPPaymentMethodParams val klarnaParams = STPPaymentMethodKlarnaParams() val paymentMethodParams = STPPaymentMethodParams.paramsWithKlarna(klarnaParams, null, null) ``` ## Envoyer les informations du moyen de paiement à Stripe [Côté client] Récupérez la clé secrète client à partir du PaymentIntent ou du SetupIntent que vous avez créé, puis appelez [PaymentLauncher confirm](https://stripe.dev/stripe-android/payments-core/com.stripe.android.payments.paymentlauncher/-payment-launcher/confirm.html). Une vue Web s’affiche, et le client peut y effectuer le paiement avec Klarna. Une fois l’opération terminée, le `PaymentResultCallback` fourni est appelé avec le résultat du paiement. #### PaymentIntent #### Kotlin ```kotlin class KlarnaPaymentActivity : AppCompatActivity() { // ... private val paymentLauncher: PaymentLauncher by lazy { val paymentConfiguration = PaymentConfiguration.getInstance(this) PaymentLauncher.create( activity = this, publishableKey = paymentConfiguration.publishableKey, stripeAccountId = paymentConfiguration.stripeAccountId, callback = ::onPaymentResult, ) } override fun onCreate(savedInstanceState: Bundle?) { // … startCheckout() } private fun startCheckout() { // Create a PaymentIntent on your backend and return the client_secret here val paymentIntentClientSecret = // … val klarnaParams = PaymentMethodCreateParams.createKlarna() val confirmParams = ConfirmPaymentIntentParams.create( paymentMethodCreateParams = klarnaParams, clientSecret = paymentIntentClientSecret, ) paymentLauncher.confirm(confirmParams) } private fun onPaymentResult(paymentResult: PaymentResult) { // Handle the setup result… } } ``` #### SetupIntent #### Kotlin ```kotlin class KlarnaSetupActivity : AppCompatActivity() { // ... private val paymentLauncher: PaymentLauncher by lazy { val paymentConfiguration = PaymentConfiguration.getInstance(this) PaymentLauncher.create( activity = this, publishableKey = paymentConfiguration.publishableKey, stripeAccountId = paymentConfiguration.stripeAccountId, callback = ::onPaymentResult, ) } override fun onCreate(savedInstanceState: Bundle?) { // … startCheckout() } private fun startCheckout() { // Create a SetupIntent on your backend and return the client_secret here val setupIntentClientSecret = // … val klarnaParams = PaymentMethodCreateParams.createKlarna() val confirmParams = ConfirmSetupIntentParams.create( paymentMethodCreateParams = klarnaParams, clientSecret = setupIntentClientSecret, // Add a mandate ID or MandateDataParams… ) paymentLauncher.confirm(confirmParams) } private fun onPaymentResult(paymentResult: PaymentResult) { // Handle the setup result… } } ``` ## Surveiller les webhooks [Côté serveur] Utilisez une méthode telle que les [webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks) pour confirmer que le client a autorisé le contrat de facturation. Ne comptez pas sur votre client pour revenir à la page d’état du paiement. Lorsqu’un client autorise le contrat de facturation, Stripe émet un événement *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) ou [setup_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.succeeded) et l’état de l’Intent passe à `succeeded`. Enregistrez l’ID [payment_method](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-payment_method) qui en résulte pour effectuer ultérieurement des paiements à l’aide du PaymentMethod enregistré. Si un client n’autorise pas correctement le contrat de facturation, Stripe émet un événement de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) [payment_intent.payment_failed](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.payment_failed) ou de [setup_intent.setup_failed](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.setup_failed) et l’état de l’Intent repasse à `requires_payment_method`. ## Débiter un moyen de paiement Klarna enregistré [Côté serveur] #### Renouvellement de l’abonnement Au moment de débiter votre client hors session, utilisez les ID des objets *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) et *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) pour créer un [PaymentIntent](https://docs.stripe.com/api/payment_intents.md). Définissez quelques autres paramètres pour effectuer le *paiement hors session* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) : - Définissez [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) sur `true` pour indiquer que le client ne se trouve pas dans votre tunnel de paiement pendant cette tentative de paiement, ce qui entraîne le renvoi d’une erreur par le PaymentIntent si une authentification est requise. - Définissez la propriété [confirm](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-confirm) du PaymentIntent sur la valeur `true`, ce qui aura pour effet de générer immédiatement une confirmation lors de la création du PaymentIntent. - Renseignez l’ID du PaymentMethod dans [payment_method](https://docs.stripe.com/api.md#create_payment_intent-payment_method) et l’ID du client dans [customer](https://docs.stripe.com/api.md#create_payment_intent-customer). - Spécifiez une [return_url](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url) pour indiquer où Stripe doit rediriger le client à partir du site de Klarna. Envoyez les informations d’abonnement et les postes de facture à chaque renouvellement. Utilisez la même `reference` pour votre abonnement que lorsque vous avez configuré le moyen de paiement. Si les informations d’abonnement ont changé depuis que vous avez enregistré le moyen de paiement, envoyez les nouvelles informations avec la même `reference`. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=5000 \ -d currency=usd \ -d confirm=true \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d off_session=true \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "amount_details[line_items][0][product_name]=Annual subscription renewal" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=5000" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=year" ``` #### Paiement sur demande Au moment de débiter votre client, utilisez les ID des objets *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) et *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) pour créer un objet [PaymentIntent](https://docs.stripe.com/api/payment_intents.md). Définissez quelques autres paramètres pour effectuer le *paiement hors session* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) : - Définissez [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) sur `false` pour indiquer que le client se trouve dans un tunnel de paiement lors de cette tentative de paiement. En cas d’erreur, par exemple si une authentification est requise, le client est redirigé vers la page Klarna pour s’authentifier ou résoudre le problème. - Définissez la propriété [confirm](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-confirm) du PaymentIntent sur la valeur `true`, ce qui aura pour effet de générer immédiatement une confirmation lors de la création du PaymentIntent. - Renseignez l’ID du PaymentMethod dans [payment_method](https://docs.stripe.com/api.md#create_payment_intent-payment_method) et l’ID du client dans [customer](https://docs.stripe.com/api.md#create_payment_intent-customer). L’exemple ci-dessous inclut des détails optionnels en utilisant [payment_method_options](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options) pour aider à améliorer les taux de souscription et d’autorisation de Klarna. Cela inclut des détails sur la manière dont cette méthode de paiement Klarna sauvegardée devrait être utilisée à l’avenir, tels que les montants prévus pour les commandes futures et la fréquence des paiements. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d confirm=true \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d off_session=false \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "amount_details[line_items][0][product_name]=Annual subscription" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=1099" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]={{SUBSCRIPTION_ID}}" \ -d "payment_method_options[klarna][on_demand][average_amount]=1000" \ -d "payment_method_options[klarna][on_demand][minimum_amount]=100" \ -d "payment_method_options[klarna][on_demand][maximum_amount]=10000" \ -d "payment_method_options[klarna][on_demand][interval]=year" \ -d "payment_method_options[klarna][on_demand][interval_count]=1" ``` ## Gérer la révocation des moyens de paiement réutilisables [Côté serveur] Vous pouvez révoquer un moyen de paiement réutilisable de deux manières : - Un client peut désactiver un moyen de paiement réutilisable dans l’application mobile Klarna. Dans ce cas, Stripe vous envoie un événement [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated). Pour gérer cela, abonnez-vous aux événements [webhook](https://docs.stripe.com/webhooks.md), et appelez [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md) pour le désactiver. - Un client peut également désactiver une méthode de paiement réutilisable sur votre interface utilisateur, si elle est prise en charge. Dans ce scénario, votre serveur peut appeler [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md) pour gérer la désactivation. Dans les deux cas, après avoir appelé [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md), Stripe vous envoie un événement [payment_method.detached](https://docs.stripe.com/api/events/types.md#event_types-payment_method.detached). ## Optional: Gérer la redirection Klarna manuellement [Côté serveur] Nous vous recommandons de vous appuyer sur le SDK natif pour gérer les redirections Klarna et les autorisations de facturation sur le client. Utiliser le SDK natif vous permet d’étendre votre intégration à d’autres moyens de paiement. Cependant, vous pouvez rediriger manuellement vos clients sur votre serveur. Pour ce faire, procédez comme suit. *Confirmez* (Confirming an intent indicates that the customer intends to use the current or provided payment method. Upon confirmation, the intent attempts to initiate the portions of the flow that have real-world side effects) le PaymentIntent ou le SetupIntent au moment de la création en incluant `confirm: true`. Indiquez une `return_url` pour indiquer où Stripe doit rediriger l’utilisateur une fois qu’il a terminé la configuration sur le site Web ou l’application mobile de Klarna. Vérifiez que l’état de l’intention est `requires_action` et que le type `next_action` est `redirect_to_url`. ```json { "id": "seti_1IQ9hjJJahOk1vSNevPWnhEN", "object": "setup_intent","status": "requires_action", "next_action": { "type": "redirect_to_url", "redirect_to_url": { "url": "https://hooks.stripe.com/...", "return_url": "https://example.com/setup/complete" } }, "application": null, "cancellation_reason": null, "client_secret": "seti_1IQ9hjJJahOk1vSNevPWnhEN_secret_J2EAlI0GQbQKV9tg7ITRcUWRBiAwvUV", "created": 1614597263, "customer": null, "description": null, "last_setup_error": null, "latest_attempt": "setatt_1IQ9hkJJahOk1vSN0rsCpnLI", "livemode": false, "mandate": null, "metadata": {}, "next_action": null, "on_behalf_of": null, "payment_method": "pm_1IQ9hjJJahOk1vSNDc5lQWia", "payment_method_options": {}, "payment_method_types": ["klarna"], "single_use_mandate": null, "usage": "off_session" } ``` Redirigez le client vers l’URL fournie dans la propriété `next_action.redirect_to_url.url`. ## Optional: Mettre à niveau un moyen de paiement enregistré [Côté serveur] Faites repasser le client par le tunnel de paiement de Klarna s’il met à niveau son abonnement. Cela permet à Klarna de disposer des informations les plus précises sur l’abonnement et d’optimiser les taux d’autorisation. #### Mise à niveau et renouvellement des débits Créez une [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) avec la même structure que lorsque vous débitez un moyen de paiement enregistré et incluez `setup_future_usage` pour indiquer que vous souhaitez mettre à niveau le moyen de paiement existant. Transmettez les nouvelles informations relatives à l’abonnement et utilisez la même `reference` que lorsque vous avez enregistré le moyen de paiement pour la première fois. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=10000 \ -d currency=usd \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d setup_future_usage=off_session \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "amount_details[line_items][0][product_name]=Annual subscription renewal" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=10000" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=year" ``` Le PaymentIntent qui en résulte nécessite une redirection vers Klarna pour être complété. En savoir plus sur comment [gérer la redirection](https://docs.stripe.com/payments/klarna/set-up-future-payments.md#submit-payment). #### Mettez à niveau et débitez plus tard Créez une [SetupIntent](https://docs.stripe.com/api/payment_intents.md) et transmettez le moyen de paiement existant enregistré. Transmettez les nouvelles informations relatives à l’abonnement et utilisez la même `reference` que lorsque vous avez enregistré le moyen de paiement pour la première fois. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "payment_method_options[klarna][currency]=usd" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=annual" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][amount]=20000" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][date]=2026-01-01" ``` Le SetupIntent qui en résulte nécessite une redirection vers Klarna pour être complété. En savoir plus sur comment [gérer la redirection](https://docs.stripe.com/payments/klarna/set-up-future-payments.md#submit-payment). ## Optional: Supprimer un compte Klarna enregistré [Côté serveur] Vous pouvez utiliser l’API [detach](https://docs.stripe.com/api/payment_methods/detach.md) pour supprimer le compte Klarna enregistré d’un client de ses moyens de paiement. Supprimez un compte Klarna lorsque vous savez qu’il ne sera plus utilisé, par exemple lorsque le client annule son abonnement. ```curl curl -X POST https://api.stripe.com/v1/payment_methods/{{PAYMENT_METHOD_ID}}/detach \ -u "<>:" ``` # React Native > This is a React Native for when payment-ui is mobile and platform is react-native. View the full page at https://docs.stripe.com/payments/klarna/set-up-future-payments?payment-ui=mobile&platform=react-native. Utilisez l’[API Payment Intents](https://docs.stripe.com/api/payment_intents.md) avec [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) ou l’[API Setup Intents](https://docs.stripe.com/api/setup_intents.md) pour enregistrer les détails du moyen de paiement Klarma. ## Configurer Stripe [Côté serveur] [Côté client] Pour commencer, vous devez créer un compte Stripe. [Inscrivez-vous maintenant](https://dashboard.stripe.com/register). ### Côté serveur Pour cette intégration, votre serveur doit disposer de endpoints qui communiquent avec l’API Stripe. Utilisez nos 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' ``` ### Côté client Le [SDK React Native](https://github.com/stripe/stripe-react-native) est disponible en open source et fait l’objet d’une documentation complète. En interne, il utilise des SDK [Android](https://github.com/stripe/stripe-android) et [iOS natifs](https://github.com/stripe/stripe-ios). Pour installer le SDK React Native de Stripe, exécutez l’une des commandes suivantes dans le répertoire de votre projet (selon le gestionnaire de paquets que vous utilisez) : #### yarn ```bash yarn add @stripe/stripe-react-native ``` #### npm ```bash npm install @stripe/stripe-react-native ``` Ensuite, installez les autres dépendances nécessaires : - Pour iOS, accédez au directeur **ios** et exécutez `pod install` pour vous assurer que vous installez également les dépendances natives requises. - Pour Android, il n’y a plus de dépendances à installer. > Nous vous recommandons de suivre le [guide officiel de TypeScript](https://reactnative.dev/docs/typescript#adding-typescript-to-an-existing-project) pour ajouter la prise en charge de TypeScript. ### Initialisation de Stripe Pour initialiser Stripe dans votre application React Native, wrappez votre écran de paiement avec le composant `StripeProvider` ou utilisez la méthode d’initialisation `initStripe`. Seule la [clé publiable](https://docs.stripe.com/keys.md#obtain-api-keys) de l’API dans `publishableKey` est nécessaire. L’exemple suivant montre comment initialiser Stripe à l’aide du composant `StripeProvider`. ```jsx import { useState, useEffect } from 'react'; import { StripeProvider } from '@stripe/stripe-react-native'; function App() { const [publishableKey, setPublishableKey] = useState(''); const fetchPublishableKey = async () => { const key = await fetchKey(); // fetch key from your server here setPublishableKey(key); }; useEffect(() => { fetchPublishableKey(); }, []); return ( {/* Your app code here */} ); } ``` > Utilisez vos [clés de test](https://docs.stripe.com/keys.md#obtain-api-keys) d’API 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. ## Configurer une URL de redirection (iOS uniquement) [Côté client] Lorsqu’un client quitte votre application (par exemple, pour s’authentifier dans Safari ou dans son application bancaire), donnez-lui un moyen de revenir automatiquement dans votre application. De nombreux types de moyens de paiement *nécessitent* une URL de redirection. Si vous n’en fournissez pas, nous ne pourrons pas présenter à vos utilisateurs les moyens de paiement nécessitant une URL de redirection, même si vous les avez activés. Pour fournir une URL de redirection : 1. [Enregistrez](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app#Register-your-URL-scheme) une URL personnalisée. Les liens universels ne sont pas pris en charge. 1. [Configurez](https://reactnative.dev/docs/linking) votre URL personnalisée. 1. Configurez votre composant racine pour qu’il transfère l’URL au SDK de Stripe, comme illustré ci-dessous. > Si vous utilisez Expo, [définissez votre schéma](https://docs.expo.io/guides/linking/#in-a-standalone-app) dans le fichier `app.json`. ```jsx import { useEffect, useCallback } from 'react'; import { Linking } from 'react-native'; import { useStripe } from '@stripe/stripe-react-native'; export default function MyApp() { const { handleURLCallback } = useStripe(); const handleDeepLink = useCallback( async (url: string | null) => { if (url) { const stripeHandled = await handleURLCallback(url); if (stripeHandled) { // This was a Stripe URL - you can return or add extra handling here as you see fit } else { // This was NOT a Stripe URL – handle as you normally would } } }, [handleURLCallback] ); useEffect(() => { const getUrlAsync = async () => { const initialUrl = await Linking.getInitialURL(); handleDeepLink(initialUrl); }; getUrlAsync(); const deepLinkListener = Linking.addEventListener( 'url', (event: { url: string }) => { handleDeepLink(event.url); } ); return () => deepLinkListener.remove(); }, [handleDeepLink]); return ( ); } ``` Pour plus d’informations sur les schémas d’URL natifs, consultez la documentation [Android](https://developer.android.com/training/app-links/deep-linking) et [iOS](https://developer.apple.com/documentation/xcode/allowing_apps_and_websites_to_link_to_your_content/defining_a_custom_url_scheme_for_your_app). ## Créer ou récupérer un objet Customer avant la configuration [Côté serveur] Pour réutiliser un moyen de paiement Klarna en vue de paiements futurs, vous devez l’associer à un objet *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments). Créez un objet Customer lorsque votre client crée un compte auprès de votre entreprise. En associant l’ID de l’objet Customer à votre propre représentation interne de ce client, vous pourrez par la suite récupérer et utiliser les informations du moyen de paiement enregistré. Si votre client n’a pas encore créé de compte, vous pouvez lui créer un objet Customer, puis l’associer à votre représentation interne de ce compte du client par la suite. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Créer un PaymentIntent ou un SetupIntent [Côté serveur] Sélectionnez ci-dessous le scénario qui correspond le mieux à votre cas d’usage. #### Abonnement avec paiement initial If you’re setting up a subscription and charging the initial payment, use the Payment Intents API with [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage). You should pass subscription details when you set up the subscription. Transmission des détails de l’abonnement : - Ensures your customers have access to all applicable [Klarna payment options](https://docs.stripe.com/payments/klarna.md#payment-options), including Pay in 3 or 4, which is only available for subscriptions that have specific lengths. - Réduit les taux d’assistance et les abandons de clients dus à des détails d’achat peu clairs dans l’application Klarna, où Klarna restitue les données d’abonnement de vos clients. Use the [payment_method_options](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-klarna) parameter to pass in subscription details. The subscription [reference](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-klarna-subscriptions-reference) is an arbitrary identifier you choose that isn’t visible to customers (for example, `GYM_ANNUAL_MEMBERSHIP` or `ID_123`). > #### Utiliser la même référence pour facturer le mode de paiement enregistré > > Lorsque vous utilisez le mode de paiement sauvegardé, utilisez la même référence d’abonnement. La valeur de référence doit correspondre à la valeur du champ `amount_details[line_items][payment_method_options][klarna][subscription_reference]`, si votre intégration l’utilise ultérieurement. Si la valeur ne correspond pas, vous recevez un message d’erreur. L’exemple ci-dessous illustre comment transmettre les détails d’un abonnement annuel. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=5000 \ -d currency=usd \ -d customer={{CUSTOMER_ID}} \ -d setup_future_usage=off_session \ -d "amount_details[line_items][0][product_name]=Annual subscription" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=5000" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=year" ``` Le PaymentIntent obtenu contient un [client_secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret). Transmettez la clé secrète côté client pour rediriger votre acheteur vers Klarna et autoriser le moyen de paiement enregistré. #### Produits avec ou sans abonnement Si vous facturez un produit unique et mettez en place un abonnement en même temps, utilisez l’API Payment Intents avec [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage). Vous devez transmettre les détails de l’abonnement lorsque vous le configurez. Transmission des détails de l’abonnement : - Ensures your customers have access to all applicable [Klarna payment options](https://docs.stripe.com/payments/klarna.md#payment-options), including Pay in 3 or 4, which is only available for subscriptions that have specific lengths. - Réduit les taux d’assistance et les abandons de clients dus à des détails d’achat peu clairs dans l’application Klarna, où Klarna restitue les données d’abonnement de vos clients. Use the [payment_method_options](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-klarna) parameter to pass in subscription details. The subscription [reference](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-klarna-subscriptions-reference) is an arbitrary identifier you choose that isn’t visible to customers (for example, `GYM_ANNUAL_MEMBERSHIP` or `ID_123`). > #### Utiliser la même référence pour facturer le mode de paiement enregistré > > Lorsque vous utilisez le mode de paiement sauvegardé, utilisez la même référence d’abonnement. La valeur de référence doit correspondre à la valeur du champ `amount_details[line_items][payment_method_options][klarna][subscription_reference]`, si votre intégration l’utilise ultérieurement. Si la valeur ne correspond pas, vous recevez un message d’erreur. L’exemple ci-dessous illustre comment transmettre les détails d’un abonnement annuel. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=100000 \ -d currency=usd \ -d customer={{CUSTOMER_ID}} \ -d setup_future_usage=off_session \ -d "amount_details[line_items][0][product_name]=One-off product" \ -d "amount_details[line_items][0][unit_cost]=5000" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][1][product_name]=Annual subscription" \ -d "amount_details[line_items][1][unit_cost]=5000" \ -d "amount_details[line_items][1][quantity]=1" \ -d "amount_details[line_items][1][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=annual" ``` Le PaymentIntent obtenu contient un [client_secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret). Transmettez la clé secrète côté client pour rediriger votre acheteur vers Klarna et autoriser le moyen de paiement enregistré. #### Abonnement avec période d’essai Si vous configurez un abonnement avec une période d’essai, utilisez l’API Setup Intents. Vous devez transmettre les détails de l’abonnement lorsque vous le configurez. Transmission des détails de l’abonnement : - Ensures your customers have access to all applicable [Klarna payment options](https://docs.stripe.com/payments/klarna.md#payment-options), including Pay in 3 or 4, which is only available for subscriptions that have specific lengths. - Réduit les taux d’assistance et les abandons de clients dus à des détails d’achat peu clairs dans l’application Klarna, où Klarna restitue les données d’abonnement de vos clients. Use the [payment_method_options](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-klarna) parameter to pass in subscription details. The subscription [reference](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-klarna-subscriptions-reference) is an arbitrary identifier you choose that isn’t visible to customers (for example, `GYM_ANNUAL_MEMBERSHIP` or `ID_123`). > #### Utiliser la même référence pour facturer le mode de paiement enregistré > > Lorsque vous utilisez le mode de paiement sauvegardé, utilisez la même référence d’abonnement. La valeur de référence doit correspondre à la valeur du champ `amount_details[line_items][payment_method_options][klarna][subscription_reference]`, si votre intégration l’utilise ultérieurement. Si la valeur ne correspond pas, vous recevez un message d’erreur. L’exemple ci-dessous montre comment transmettre les détails d’un abonnement annuel. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "payment_method_options[klarna][currency]=usd" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=annual" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][amount]=10000" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][date]=2026-01-01" ``` Le SetupIntent obtenu contient un [client_secret](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret). Transmettez la clé secrète côté client pour rediriger votre acheteur vers Klarna et autoriser le moyen de paiement enregistré. #### Paiements à la demande Pour un cas d’usage *à la demande* (When a customer stores their payment method with a business, they can make on-demand future purchases without re-authenticating, such as ordering a ride in their ride-share app), vous pouvez utiliser l’API Payment Intents ou l’API Setup Intents. Si vous souhaitez traiter un paiement et enregistrer le moyen de paiement en même temps, utilisez l’API Payment Intents. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=5000 \ -d currency=usd \ -d "customer={{CUSTOMER_ID}}" \ -d setup_future_usage=off_session \ -d "amount_details[line_items][0][product_name]=Your product name" \ -d "amount_details[line_items][0][unit_cost]=5000" \ -d "amount_details[line_items][0][quantity]=1" ``` Si vous avez uniquement besoin d’enregistrer le moyen de paiement pour une utilisation ultérieure et que vous ne traitez pas de paiement, utilisez l’API Setup Intents. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d usage=on_session ``` ## Rediriger votre client [Côté client] Utilisez le SDK React Native de Stripe pour confirmer le PaymentIntent ou le SetupIntent. Le SDK gère automatiquement des fonctions comme la redirection décrite ci-dessous, et vous permet d’étendre votre intégration à d’autres moyens de paiement à l’avenir. Votre client est redirigé vers une page de contrat de facturation Klarna, où il doit vous autoriser à utiliser son compte Klarna pour les paiements futurs avant d’être redirigé vers votre application. #### PaymentIntent ```js import { confirmPayment } from '@stripe/stripe-react-native'; // In your component... const { error, paymentIntent } = await confirmPayment( '{{PAYMENT_INTENT_CLIENT_SECRET}}', { paymentMethodType: 'Klarna', paymentMethodData: { billingDetails: { email: 'jenny@example.com', address: { country: 'DE' } }, mandateData: { // Add mandate data... } } }); if (error) { // Something went wrong } ``` #### SetupIntent ```js import { confirmSetupIntent } from '@stripe/stripe-react-native'; // In your component... const { error, setupIntent } = await confirmSetupIntent( '{{SETUP_INTENT_CLIENT_SECRET}}', { paymentMethodType: 'Klarna', paymentMethodData: { billingDetails: { email: 'jenny@example.com', address: { country: 'DE' } }, mandateData: { // Add mandate data... } } }); if (error) { // Something went wrong } ``` ## Surveiller les webhooks [Côté serveur] Utilisez une méthode telle que les [webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks) pour confirmer que le client a autorisé le contrat de facturation. Ne comptez pas sur votre client pour revenir à la page d’état du paiement. Lorsqu’un client autorise le contrat de facturation, Stripe émet un événement *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) ou [setup_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.succeeded) et l’état de l’Intent passe à `succeeded`. Enregistrez l’ID [payment_method](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-payment_method) qui en résulte pour effectuer ultérieurement des paiements à l’aide du PaymentMethod enregistré. Si un client n’autorise pas correctement le contrat de facturation, Stripe émet un événement de *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) [payment_intent.payment_failed](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.payment_failed) ou de [setup_intent.setup_failed](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.setup_failed) et l’état de l’Intent repasse à `requires_payment_method`. ## Débiter un moyen de paiement Klarna enregistré [Côté serveur] #### Renouvellement de l’abonnement Au moment de débiter votre client hors session, utilisez les ID des objets *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) et *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) pour créer un [PaymentIntent](https://docs.stripe.com/api/payment_intents.md). Définissez quelques autres paramètres pour effectuer le *paiement hors session* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) : - Définissez [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) sur `true` pour indiquer que le client ne se trouve pas dans votre tunnel de paiement pendant cette tentative de paiement, ce qui entraîne le renvoi d’une erreur par le PaymentIntent si une authentification est requise. - Définissez la propriété [confirm](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-confirm) du PaymentIntent sur la valeur `true`, ce qui aura pour effet de générer immédiatement une confirmation lors de la création du PaymentIntent. - Renseignez l’ID du PaymentMethod dans [payment_method](https://docs.stripe.com/api.md#create_payment_intent-payment_method) et l’ID du client dans [customer](https://docs.stripe.com/api.md#create_payment_intent-customer). - Spécifiez une [return_url](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url) pour indiquer où Stripe doit rediriger le client à partir du site de Klarna. Envoyez les informations d’abonnement et les postes de facture à chaque renouvellement. Utilisez la même `reference` pour votre abonnement que lorsque vous avez configuré le moyen de paiement. Si les informations d’abonnement ont changé depuis que vous avez enregistré le moyen de paiement, envoyez les nouvelles informations avec la même `reference`. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=5000 \ -d currency=usd \ -d confirm=true \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d off_session=true \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "amount_details[line_items][0][product_name]=Annual subscription renewal" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=5000" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=year" ``` #### Paiement sur demande Au moment de débiter votre client, utilisez les ID des objets *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) et *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) pour créer un objet [PaymentIntent](https://docs.stripe.com/api/payment_intents.md). Définissez quelques autres paramètres pour effectuer le *paiement hors session* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) : - Définissez [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) sur `false` pour indiquer que le client se trouve dans un tunnel de paiement lors de cette tentative de paiement. En cas d’erreur, par exemple si une authentification est requise, le client est redirigé vers la page Klarna pour s’authentifier ou résoudre le problème. - Définissez la propriété [confirm](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-confirm) du PaymentIntent sur la valeur `true`, ce qui aura pour effet de générer immédiatement une confirmation lors de la création du PaymentIntent. - Renseignez l’ID du PaymentMethod dans [payment_method](https://docs.stripe.com/api.md#create_payment_intent-payment_method) et l’ID du client dans [customer](https://docs.stripe.com/api.md#create_payment_intent-customer). L’exemple ci-dessous inclut des détails optionnels en utilisant [payment_method_options](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options) pour aider à améliorer les taux de souscription et d’autorisation de Klarna. Cela inclut des détails sur la manière dont cette méthode de paiement Klarna sauvegardée devrait être utilisée à l’avenir, tels que les montants prévus pour les commandes futures et la fréquence des paiements. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d confirm=true \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d off_session=false \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "amount_details[line_items][0][product_name]=Annual subscription" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=1099" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]={{SUBSCRIPTION_ID}}" \ -d "payment_method_options[klarna][on_demand][average_amount]=1000" \ -d "payment_method_options[klarna][on_demand][minimum_amount]=100" \ -d "payment_method_options[klarna][on_demand][maximum_amount]=10000" \ -d "payment_method_options[klarna][on_demand][interval]=year" \ -d "payment_method_options[klarna][on_demand][interval_count]=1" ``` ## Gérer la révocation des moyens de paiement réutilisables [Côté serveur] Vous pouvez révoquer un moyen de paiement réutilisable de deux manières : - Un client peut désactiver un moyen de paiement réutilisable dans l’application mobile Klarna. Dans ce cas, Stripe vous envoie un événement [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated). Pour gérer cela, abonnez-vous aux événements [webhook](https://docs.stripe.com/webhooks.md), et appelez [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md) pour le désactiver. - Un client peut également désactiver une méthode de paiement réutilisable sur votre interface utilisateur, si elle est prise en charge. Dans ce scénario, votre serveur peut appeler [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md) pour gérer la désactivation. Dans les deux cas, après avoir appelé [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md), Stripe vous envoie un événement [payment_method.detached](https://docs.stripe.com/api/events/types.md#event_types-payment_method.detached). ## Optional: Gérer la redirection Klarna manuellement [Côté serveur] Nous vous recommandons d’utiliser le SDK Stripe React natif pour gérer les redirections et autorisations de facturation Klarna côté client avec `confirmSetupIntent`. Le recours au SDK natif vous permettra d’ajouter d’autres moyens de paiement à votre intégration par la suite. Toutefois, vous pouvez rediriger manuellement vos clients sur votre serveur en procédant comme suit : *Confirmez* (Confirming an intent indicates that the customer intends to use the current or provided payment method. Upon confirmation, the intent attempts to initiate the portions of the flow that have real-world side effects) le SetupIntent au moment de la création en définissant `confirm: true`. Vous devez fournir une `return_url` lorsque vous confirmez un SetupIntent afin d’indiquer où Stripe doit rediriger l’utilisateur une fois la configuration terminée sur le site web ou l’application mobile de Klarna. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_options[klarna][currency]=usd" \ -d "payment_method_types[]=klarna" \ -d "payment_method_data[type]=klarna" \ --data-urlencode "payment_method_data[billing_details][email]=jenny@example.com" \ -d "payment_method_data[billing_details][address][country]=DE" \ -d usage=off_session \ -d confirm=true \ --data-urlencode "return_url=https://example.com/setup/complete" ``` Vérifiez que l’état SetupIntent est `requires_action` et que le type `next_action` est `redirect_to_url`. ```json { "id": "seti_1IQ9hjJJahOk1vSNevPWnhEN", "object": "setup_intent","status": "requires_action", "next_action": { "type": "redirect_to_url", "redirect_to_url": { "url": "https://hooks.stripe.com/...", "return_url": "https://example.com/setup/complete" } }, "application": null, "cancellation_reason": null, "client_secret": "seti_1IQ9hjJJahOk1vSNevPWnhEN_secret_J2EAlI0GQbQKV9tg7ITRcUWRBiAwvUV", "created": 1614597263, "customer": null, "description": null, "last_setup_error": null, "latest_attempt": "setatt_1IQ9hkJJahOk1vSN0rsCpnLI", "livemode": false, "mandate": null, "metadata": {}, "next_action": null, "on_behalf_of": null, "payment_method": "pm_1IQ9hjJJahOk1vSNDc5lQWia", "payment_method_options": {}, "payment_method_types": ["klarna"], "single_use_mandate": null, "usage": "off_session" } ``` Redirigez le client vers l’URL fournie dans la propriété `next_action.redirect_to_url.url`. ## Optional: Mettre à niveau un moyen de paiement enregistré [Côté serveur] Faites repasser le client par le tunnel de paiement de Klarna s’il met à niveau son abonnement. Cela permet à Klarna de disposer des informations les plus précises sur l’abonnement et d’optimiser les taux d’autorisation. #### Mise à niveau et renouvellement des débits Créez une [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) avec la même structure que lorsque vous débitez un moyen de paiement enregistré et incluez `setup_future_usage` pour indiquer que vous souhaitez mettre à niveau le moyen de paiement existant. Transmettez les nouvelles informations relatives à l’abonnement et utilisez la même `reference` que lorsque vous avez enregistré le moyen de paiement pour la première fois. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=10000 \ -d currency=usd \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d setup_future_usage=off_session \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "amount_details[line_items][0][product_name]=Annual subscription renewal" \ -d "amount_details[line_items][0][quantity]=1" \ -d "amount_details[line_items][0][unit_cost]=10000" \ -d "amount_details[line_items][0][payment_method_options][klarna][subscription_reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=year" ``` Le PaymentIntent qui en résulte nécessite une redirection vers Klarna pour être complété. En savoir plus sur comment [gérer la redirection](https://docs.stripe.com/payments/klarna/set-up-future-payments.md#react-native-redirect-customer). #### Mettez à niveau et débitez plus tard Créez une [SetupIntent](https://docs.stripe.com/api/payment_intents.md) et transmettez le moyen de paiement existant enregistré. Transmettez les nouvelles informations relatives à l’abonnement et utilisez la même `reference` que lorsque vous avez enregistré le moyen de paiement pour la première fois. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ -d payment_method={{PAYMENT_METHOD_ID}} \ --data-urlencode "return_url=https://example.com/setup/complete" \ -d "payment_method_options[klarna][currency]=usd" \ -d "payment_method_options[klarna][subscriptions][0][reference]=EXAMPLE_REFERENCE" \ -d "payment_method_options[klarna][subscriptions][0][interval]=annual" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][amount]=20000" \ -d "payment_method_options[klarna][subscriptions][0][next_billing][date]=2026-01-01" ``` Le SetupIntent qui en résulte nécessite une redirection vers Klarna pour être complété. En savoir plus sur comment [gérer la redirection](https://docs.stripe.com/payments/klarna/set-up-future-payments.md#react-native-redirect-customer). ## Optional: Supprimer un compte Klarna enregistré [Côté serveur] Vous pouvez utiliser l’API [detach](https://docs.stripe.com/api/payment_methods/detach.md) pour supprimer le compte Klarna enregistré d’un client de ses moyens de paiement. Supprimez un compte Klarna lorsque vous savez qu’il ne sera plus utilisé, par exemple lorsque le client annule son abonnement. ```curl curl -X POST https://api.stripe.com/v1/payment_methods/{{PAYMENT_METHOD_ID}}/detach \ -u "<>:" ```