# Configurer des paiements futurs avec Kakao Pay Découvrez comment enregistrer des informations Kakao Pay pour débiter vos clients ultérieurement. # Checkout > This is a Checkout for when payment-ui is checkout. View the full page at https://docs.stripe.com/payments/kakao-pay/set-up-future-payments?payment-ui=checkout. > Kakao Pay n’est pas disponible à Singapour. Enregistrez les informations de paiement Kakao Pay à l’aide de [Checkout](https://docs.stripe.com/payments/checkout.md), notre page de paiement intégralement hébergée. Découvrez comment [configurer un abonnement avec Kakao Pay](https://docs.stripe.com/billing/subscriptions/kakao-pay.md) pour créer des paiements récurrents après avoir enregistré un moyen de paiement dans Checkout. ## Configurer Stripe [Côté serveur] Pour commencer, vous devez créer un compte Stripe. [S’inscrire](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' ``` ## Obtenir l'autorisation d'enregistrer Kakao Pay comme moyen de paiement [Côté serveur] Vous devez obtenir l’autorisation d’enregistrer le moyen de paiement de votre client en vue de futurs paiements. En établissant au préalable un contrat (parfois nommé mandat), vous pouvez enregistrer les informations de paiement de votre client et le débiter lorsqu’il n’utilise pas votre site Web ou votre application de façon active. Sur votre application ou votre site Web, indiquez la façon dont vous comptez enregistrer les informations du moyen de paiement de votre client, puis invitez-le à accepter ces dispositions. Si vous prévoyez de débiter votre client quand il est hors ligne, veillez à ce que vos conditions incluent également les éléments suivants : - Le consentement du client vous autorisant à déclencher un paiement ou une série de paiements en son nom pour les transactions spécifiées - La fréquence prévue des paiements (paiement ponctuel ou paiements récurrents) et un calendrier des paiements - La façon dont vous déterminez le montant à payer - Vos conditions d’annulation (si vous configurez le moyen de paiement pour un service d’abonnement) Veillez à conserver une trace de l’accord écrit de votre client concernant ces conditions, et ne soumettez des frais que conformément aux conditions convenues. ## Créer ou récupérer un objet Customer [Côté serveur] Pour réutiliser un moyen de paiement Kakao Pay en vue de paiements ultérieurs, associez-le à 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](https://docs.stripe.com/api/customers.md) lorsque votre client crée un compte auprès de votre entreprise et associez l’ID de cet objet Customer à votre propre représentation interne du client. Vous pouvez également créer un nouvel objet Customer juste avant d’enregistrer un moyen de paiement en vue de paiements ultérieurs. ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ --data-urlencode "description=My First Test Customer (created for API docs)" ``` ## Créer une session Checkout [Côté serveur] Votre client doit vous autoriser à utiliser son compte NICEPAY pour ses futurs paiements via Stripe Checkout. Cela vous permet d’accepter de futurs paiements Kakao Pay. Ajoutez un bouton à votre site Web qui appelle un endpoint côté serveur pour créer une [session Checkout](https://docs.stripe.com/api/checkout/sessions.md). ```html Set up payment
``` Pour collecter les informations requises, créez une session Checkout en mode `setup`. Après avoir créé la session Checkout, 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. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d mode=setup \ -d "payment_method_types[]=card" \ -d "payment_method_types[]=kakao_pay" \ --data-urlencode "success_url=https://example.com/success" ``` ## Tester votre intégration Lors du test de votre intégration Checkout, sélectionnez **Kakao Pay** et cliquez sur **Continuer avec Kakao Pay**. Vous serez redirigé vers une page hébergée par Stripe où vous pourrez choisir d’autoriser ou de refuser la configuration du paiement. Apprenez davantage sur les [tests des moyens de paiement basés sur la redirection](https://docs.stripe.com/testing.md#redirects). # API directe > This is a API directe for when payment-ui is direct-api. View the full page at https://docs.stripe.com/payments/kakao-pay/set-up-future-payments?payment-ui=direct-api. > Kakao Pay n’est pas disponible à Singapour. Vous pouvez utiliser l’[API Setup Intents](https://docs.stripe.com/payments/setup-intents.md) pour collecter en avance les informations sur le moyen de paiement, en vue d’un paiement dont la date et le montant seront déterminés ultérieurement. Ceci est utile pour : - Enregistrer des moyens de paiement dans un portefeuille pour faciliter les futurs achats - Encaisser des frais supplémentaires après avoir fourni un service - [Démarrer une période d’essai gratuit dans le cadre d’un abonnement](https://docs.stripe.com/billing/subscriptions/trials.md) Pour collecter les informations du moyen de paiement et débiter immédiatement le moyen de paiement enregistré, utilisez l’[API Payment Intents](https://docs.stripe.com/payments/payment-intents.md). Découvrez comment [configurer un abonnement avec Kakao Pay](https://docs.stripe.com/billing/subscriptions/kakao-pay.md) pour créer des paiements récurrents après avoir enregistré un moyen de paiement dans Checkout. ## Créer ou récupérer un objet Customer [Côté serveur] Pour enregistrer un moyen de paiement Kakao Pay en vue de paiements ultérieurs, 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 dès que votre client crée un compte auprès de votre entreprise. En associant l’ID de l’objet Customer à votre propre représentation interne du client, vous pourrez par la suite récupérer et utiliser les informations du moyen de paiement pour les conserver. Si votre client n’a pas créé de compte, vous pouvez toujours créer un objet Customer, et l’associer à votre représentation interne de ce compte client plus tard. ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ --data-urlencode "description=My First Test Customer (created for API docs)" ``` #### Enregistrer un moyen de paiement avec l'API Setup Intents Utilisez l’[API Setup Intents](https://docs.stripe.com/payments/setup-intents.md) pour collecter à l’avance les données d’un moyen de paiement, en vue d’un paiement dont la date et le montant seront déterminés ultérieurement. Ceci est utile pour : - Enregistrer les moyens de paiement de vos clients afin que leurs achats ultérieurs ne nécessitent pas d’authentification - Démarrer une période d’essai gratuite dans le cadre d’un *abonnement* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis) ## Obtenir l'autorisation d'enregistrer Kakao Pay comme moyen de paiement [Côté serveur] Vous devez obtenir l’autorisation d’enregistrer le moyen de paiement de votre client en vue de futurs paiements. En établissant au préalable un contrat (parfois nommé mandat), vous pouvez enregistrer les informations de paiement de votre client et le débiter lorsqu’il n’utilise pas votre site Web ou votre application de façon active. Sur votre application ou votre site Web, indiquez la façon dont vous comptez enregistrer les informations du moyen de paiement de votre client, puis invitez-le à accepter ces dispositions. Si vous prévoyez de débiter votre client quand il est hors ligne, veillez à ce que vos conditions incluent également les éléments suivants : - Le consentement du client vous autorisant à déclencher un paiement ou une série de paiements en son nom pour les transactions spécifiées - La fréquence prévue des paiements (paiement ponctuel ou paiements récurrents) et un calendrier des paiements - La façon dont vous déterminez le montant à payer - Vos conditions d’annulation (si vous configurez le moyen de paiement pour un service d’abonnement) Veillez à conserver une trace de l’accord écrit de votre client concernant ces conditions, et ne soumettez des frais que conformément aux conditions convenues. ## Créer un SetupIntent et enregistrer Kakao Pay comme moyen de paiement [Côté serveur] Un [SetupIntent](https://docs.stripe.com/api/setup_intents.md) est un objet qui représente votre intention de configurer le moyen de paiement d’un client pour ses paiements futurs. Le SetupIntent suit les étapes de ce processus de configuration. Créez un SetupIntent sur votre serveur avec [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) défini sur `kakao_pay`, spécifiez l’ID du client et configurez [usage=off_session](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-usage) ou `usage=on_session`. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "payment_method_types[]=kakao_pay" \ -d "payment_method_data[type]=kakao_pay" \ -d usage=off_session \ -d customer={{CUSTOMER_ID}} ``` ### Récupérer la clé secrète du client Le SetupIntent contient une *clé secrète* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) à utiliser côté client pour finaliser le processus de paiement en toute sécurité. Vous pouvez adopter différentes approches pour transmettre cette clé secrète côté client. #### Application monopage Récupérez la clé secrète du client à partir d’un endpoint sur votre serveur, à l’aide de la fonction `fetch` du navigateur. Cette approche est recommandée si votre côté client est une application d’une seule page, en particulier si elle repose sur un framework front-end moderne tel que React. Créez l’endpoint de serveur qui gère la clé secrète du client : #### Ruby ```ruby get '/secret' do intent = # ... Create or retrieve the SetupIntent {client_secret: intent.client_secret}.to_json end ``` Récupérez ensuite la clé secrète du client à l’aide JavaScript côté client : ```javascript (async () => { const response = await fetch('/secret'); const {client_secret: clientSecret} = await response.json(); // Render the form using the clientSecret })(); ``` #### Rendu côté serveur Transmettez la clé secrète à votre client depuis votre serveur. Cette approche fonctionne mieux si votre application génère du contenu statique sur le serveur avant de l’envoyer sur le navigateur. Ajoutez le [client_secret](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret) à votre formulaire de paiement. Dans votre code côté serveur, récupérez la clé secrète du client à partir du SetupIntent : #### Ruby ```erb
``` ```ruby get '/checkout' do @intent = # ... Fetch or create the SetupIntent erb :checkout end ``` Ensuite, enregistrez Kakao Pay côté client avec [Stripe.js](https://docs.stripe.com/payments/elements.md). Intégrez le script Stripe.js à votre page de paiement en l’ajoutant entre les balises `head` de votre fichier HTML. ```html Checkout ``` Lorsqu’un client clique pour payer avec Kakao Pay, utilisez Stripe.js pour soumettre le paiement à Stripe. [Stripe.js](https://docs.stripe.com/payments/elements.md) est la bibliothèque JavaScript de base pour créer les tunnels de paiement : elle gère automatiquement les opérations complexes telles que la redirection décrite ci-dessous, et facilite l’extension de votre intégration à d’autres moyens de paiement. Incluez le script Stripe.js sur votre page de paiement en l’ajoutant à la section `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 // Set your publishable key. Remember to change this to your live publishable key in production! // See your keys here: https://dashboard.stripe.com/apikeys const stripe = Stripe('<>'); ``` Utilisez `stripe.confirmKakaoPaySetup` pour confirmer le SetupIntent côté client, avec une URL [return_url](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-return_url) et un attribut [mandate_data](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-mandate_data). Utilisez l’URL [return_url](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-return_url) pour rediriger les clients vers une page spécifique une fois le SetupIntent réussi. ```javascript // Redirects away from the client const {error} = await stripe.confirmKakaoPaySetup( '{{SETUP_INTENT_CLIENT_SECRET}}', { 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. } ``` ## Optional: Gérer les redirections manuellement Stripe.js vous aide à ajouter d’autres moyens de paiement à votre intégration. Cependant, vous pouvez rediriger vos clients manuellement vers votre serveur. 1. Créez et *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) un PaymentIntent de type `kakao_pay`. En spécifiant `payment_method_data`, vous créez un PaymentMethod qui est utilisé immédiatement avec ce PaymentIntent. Vous devez également fournir dans le champ `return_url` l’URL vers laquelle le client est redirigé une fois qu’il a finalisé son paiement. Vous pouvez fournir vos propres paramètres de requête dans cette URL. Ces paramètres seront inclus dans l’URL finale à l’issue du flux de redirection. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1000 \ -d currency=krw \ -d "payment_method_types[]=kakao_pay" \ -d "payment_method_data[type]=kakao_pay" \ --data-urlencode "return_url=https://example.com/checkout/complete" \ -d confirm=true ``` 1. Vérifiez que le `PaymentIntent` a l’état `requires_action` et que le type de `next_action` est `redirect_to_url`. #### Json ```json {"status": "requires_action", "next_action": { "type": "redirect_to_url", "redirect_to_url": { "url": "https://hooks.stripe.com/...", "return_url": "https://example.com/checkout/complete" } }, "id": "pi_1G1sgdKi6xqXeNtkldRRE6HT", "object": "payment_intent", ... } ``` 1. Redirigez le client vers l’URL fournie dans la propriété `next_action.redirect_to_url.url`. Cet exemple de code fourni ici n’a qu’une valeur illustrative : la méthode de redirection peut différer sur votre framework Web. #### Ruby ```ruby if payment_intent.status == 'requires_action' && payment_intent.next_action.type == 'redirect_to_url' url = payment_intent.next_action.redirect_to_url.url redirect(url) end ``` Le client est redirigé vers l’URL `return_url` une fois qu’il a effectué le paiement. Les paramètres de la requête d’URL `payment_intent` et `payment_intent_client_secret` sont inclus avec tous vos propres paramètres. Stripe recommande de configurer un [endpoint de webhook](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks) pour configurer l’état d’un paiement par voie programmatique. #### Enregistrer un moyen de paiement avec l'API Payment Intents Utilisez l’[API Payment Intents](https://docs.stripe.com/payments/payment-intents.md) pour collecter les données du moyen de paiement au moment du règlement et enregistrer un moyen de paiement pour un client. Ceci est utile pour : - Enregistrer les moyens de paiement de vos clients afin que leurs achats ultérieurs ne nécessitent pas d’authentification - Démarrer une période d’essai gratuite dans le cadre d’un *abonnement* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis) ## Créer un PaymentIntent et enregistrer un moyen de paiement [Côté serveur] Un [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) est un objet qui représente votre intention de débiter un client. Si vous ne fournissez pas de moyen de paiement enregistré avec la requête du PaymentIntent, nous créons un moyen de paiement et l’associons à votre client avant la confirmation du PaymentIntent. Créez un PaymentIntent sur votre serveur avec [payment_method_types](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types) défini sur `kakao_pay` et spécifiez l’ID du client, `confirm=true`, [setup_future_usage=off_session](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) avec une URL [return_url](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-return_url) et un attribut [mandate_data](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-mandate_data) facultatif. Utilisez l’URL [return_url](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-return_url) pour rediriger vos clients vers une page spécifique une fois le PaymentIntent réussi. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "payment_method_types[]=kakao_pay" \ -d "mandate_data[customer_acceptance][type]=online" \ -d "mandate_data[customer_acceptance][online][ip_address]=127.0.0.0" \ -d "mandate_data[customer_acceptance][online][user_agent]=device" \ --data-urlencode "return_url=https://www.stripe.com" \ -d customer={{CUSTOMER_ID}} \ -d setup_future_usage=off_session \ -d amount=1000 \ -d currency=ngn \ -d statement_descriptor=test_statement \ -d capture_method=automatic \ -d confirm=true ``` Le PaymentIntent renvoyé contient une *clé secrète du client* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)), qui est utilisée côté client pour finaliser le paiement de manière sécurisée, sans avoir à transmettre la totalité de l’objet PaymentIntent. Transmettez la clé secrète du client à l’application côté client pour poursuivre le processus de paiement. ## Créer un PaymentIntent à l'aide d'un moyen de paiement enregistré [Côté serveur] Après avoir créé un objet [PaymentMethod](https://docs.stripe.com/api/payment_methods.md), vous pouvez accepter les futurs paiements Kakao Pay en créant et en confirmant un [PaymentIntent](https://docs.stripe.com/api/payment_intents.md). Lors de la confirmation d’un PaymentIntent, utilisez le même ID de moyen de paiement que celui de l’objet SetupIntent ou PaymentIntent précédent. La valeur `off_session` doit également être définie sur « true » si le client ne se trouve pas dans un tunnel de paiement pour ce PaymentIntent. > Les paiements récurrents doivent être effectués avec `capture_method: "automatic"`. La capture manuelle n’est pas prise en charge. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "payment_method_types[]=kakao_pay" \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d amount=1000 \ -d currency=krw \ -d customer={{CUSTOMER_ID}} \ -d statement_descriptor=test_statement \ -d capture_method=automatic \ -d confirm=true \ -d off_session=true ``` ## Détacher un moyen de paiement réutilisable Pour désactiver un moyen de paiement réutilisable, appelez [detach PaymentMethod](https://docs.stripe.com/api/payment_methods/detach.md) depuis votre serveur. Stripe envoie à la fois un événement [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated) et un événement [payment_method.detached](https://docs.stripe.com/api/events/types.md#event_types-payment_method.detached). Vous pouvez vous abonner à des événements [webhook](https://docs.stripe.com/webhooks.md) pour recevoir des notifications. ## Tester votre intégration Lorsque vous testez l’intégration Checkout, sélectionnez **Kakao Pay** et cliquez sur **Payer**. Vous êtes alors redirigé vers une page hébergée par Stripe où vous avez le choix d’autoriser ou non le paiement. Si vous autorisez le paiement, le PaymentIntent passe de `requires_action` à `succeeded`. L’échec du paiement test fait passer le PaymentIntent de `requires_action` à `requires_payment_method` En savoir plus sur la façon de [tester](https://docs.stripe.com/testing.md#redirects) les moyens de paiement basés sur la redirection.