# Tokens de paiement partagés Apprenez à utiliser les tokens de paiement partagés. > Les tokens de paiement partagé (SPT) sont disponibles aux États-Unis pour les agents, les clients et les commerçants. # Commerçants > This is a Commerçants for when agent-seller is seller. View the full page at https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens?agent-seller=seller. En tant que commerçant, vous recevez un [token de paiement partagé (SPT)](https://docs.stripe.com/api/shared-payment/granted-token.md) de l’agent. Le SPT vous donne un accès étendu au moyen de paiement du client. L’agent accorde des SPT à votre [profil Stripe](https://docs.stripe.com/get-started/account/profile.md) avec des limites d’utilisation et d’expiration. Enregistrement et traitement des modes de paiement (See full diagram at https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens) ## Before you begin - En utilisant les SPT, vous acceptez les [Conditions d’utilisation du service](https://stripe.com/legal/ssa-services-terms#stripe-agentic-commerce-seller-services-preview). - [Créez un compte Stripe](https://stripe.com/register) si vous n’en avez pas encore un. - Assurez-vous de votre [profil Stripe](https://docs.stripe.com/get-started/account/profile.md) dans le Dashboard Stripe. ## Tester la réception d’un SPT Utilisez des outils de test pour simuler la réception d’un SPT accordé par l’agent. La requête suivante accorde un SPT à votre compte à l’aide d’un moyen de paiement test et simule les limites que les agents peuvent définir, telles que la devise, le montant maximal et la fenêtre d’expiration. ```curl curl https://api.stripe.com/v1/test_helpers/shared_payment/granted_tokens \ -u "<>:" \ -d payment_method=pm_card_visa \ -d "usage_limits[currency]=usd" \ -d "usage_limits[max_amount]=1000" \ -d "usage_limits[expires_at]=1751587220" ``` ### Définir des limites d’utilisation Utilisez le paramètre `usage_limits` pour spécifier le montant maximum et la période d’expiration, puis définissez le montant maximum de manière à ce qu’il corresponde au montant total de la transaction. ### Spécifier le moyen de paiement Utilisez le paramètre `payment_method` pour spécifier le moyen de paiement sélectionné par le client pour l’achat. ## Testez votre intégration en mode production Pour tester votre intégration en mode production, utilisez le [link-cli](https://link.com/agents) pour émettre des SPT à partir de votre compte personnel Link. Le `link-cli` peut générer des identifiants de token de paiement partagé à usage unique. Suivez les instructions sur [link.com/agents](https://link.com/agents) pour installer les compétences `link-cli` ou l’enregistrer en tant que serveur MCP dans l’agent de votre choix. 1. Connectez-vous à votre compte personnel Link, ou [inscrivez-vous](https://app.link.com) si vous n’avez pas encore de compte. ```bash npx @stripe/link-cli auth login ``` 1. Choisissez le moyen de paiement que vous souhaitez utiliser. Si vous n’en avez pas encore renseigné, [ajoutez un moyen de paiement](https://app.link.com/wallet). ```bash npx @stripe/link-cli payment-methods list ``` 1. Créez une requête de dépense pour générer un SPT à usage unique rattaché à votre profil d’entreprise. ```bash npx @stripe/link-cli spend-request create \ --payment-method-id csmrpd_xxx \ --context "Machine payments with SPTs in live mode" \ --amount 100 \ --credential-type shared_payment_token \ --network-id profile_... \ --request-approval ``` ## Utiliser un token de paiement partagé Après avoir reçu un `SharedPaymentToken` accordé, créez un `PaymentIntent` pour finaliser le paiement. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1000 \ -d currency=usd \ -d "payment_method_data[shared_payment_granted_token]=spt_123" \ -d confirm=true ``` Lorsque vous confirmez un `PaymentIntent` avec le SPT, Stripe définit `payment_method` sur un nouveau `PaymentMethod` dupliqué à partir du moyen de paiement initial du client. Les événements suivants, tels que les remboursements et les rapports, se comportent comme si vous fournissiez directement le `PaymentMethod`. Vous pouvez récupérer des informations sur le `SharedPaymentToken` accordé, y compris des informations limitées sur le moyen de paiement sous-jacent, telles que la marque de la carte bancaire, les quatre derniers chiffres et les limites d’utilisation. ```curl curl https://api.stripe.com/v1/shared_payment/granted_tokens/spt_123 \ -u "<>:" ``` ``` { "id": "spt_123", "object": "shared_payment.granted_token", "created": 1751500820, "deactivated_at": null, "deactivated_reason": null, "usage_limits": { "currency": "usd", "expires_at": 1780671765, "max_amount": 1000 } ... } ``` ### Écouter les événements de webhook Nous vous envoyons des événements, à vous et à l’agent, lorsque : - Vous utilisez un SPT accordé pour accepter un paiement. - L’agent révoque un SPT accordé. Vous ne pouvez pas créer de paiement avec un SPT révoqué. | Événement | Description | Cas d’usage | | ------------------------------------------ | ------------------------------------------- | ---------------------------------------------------------------------------- | | `shared_payment.granted_token.deactivated` | Le SPT a été désactivé (révoqué ou expiré). | Écoutez cet événement pour savoir quand vous ne pouvez plus utiliser le SPT. | # Agents > This is a Agents for when agent-seller is agent. View the full page at https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens?agent-seller=agent. En tant qu’agent, utilisez des [tokens de paiement partagés (SPT)](https://docs.stripe.com/api/shared-payment/issued-token/.md) pour permettre au commerçant d’accéder au moyen de paiement du client pour le traitement des paiements. Enregistrement et traitement des modes de paiement (See full diagram at https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens) ## Before you begin - En utilisant les SPT, vous acceptez les [Conditions d’utilisation du service](https://stripe.com/legal/ssa-services-terms#stripe-agentic-commerce-agent-services-preview). - [Créez un compte Stripe](https://stripe.com/register) si vous n’en avez pas encore un. - Assurez-vous de votre [profil Stripe](https://docs.stripe.com/get-started/account/profile.md) dans le Dashboard Stripe. ## Collecter le profil Stripe du commerçant Pendant l’onboarding du commerçant, collectez son profil Stripe. Les commerçants peuvent créer un nouveau profil ou trouver leur profil actuel dans le [Dashboard Stripe](https://dashboard.stripe.com/profiles). Vous émettez un SPT à ce profil pour chaque transaction. ## Collecter les informations de paiement du client Utilisez le [composant Element Payment](https://docs.stripe.com/payments/payment-element.md) pour collecter les informations de paiement de manière sécurisée et prendre en charge plusieurs moyens de paiement via une seule intégration. Il permet de s’assurer automatiquement que les moyens de paiement que vous montrez aux clients sont pris en charge par les commerçants. L’URL de votre page de paiement doit commencer par `https://` rather plutôt que `http://` for pour que votre intégration fonctionne. Vous pouvez tester votre intégration sans HTTPS, mais vous devez [l’activer](https://docs.stripe.com/security/guide.md#tls) avant d’accepter les paiements en mode production. ### Configurer Stripe.js Le composant Element Payment est automatiquement disponible dans Stripe.js. Intégrez le script Stripe.js à votre page de paiement en l’ajoutant au `head` de votre fichier HTML. Chargez toujours Stripe.js directement à partir de `js.stripe.com` pour rester conforme aux normes PCI. N’incluez pas le script dans un lot et n’en hébergez pas de copie. ```html Checkout ``` Sur votre page de paiement, créez une instance de `Stripe` avec le code JavaScript suivant. ```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('<>'); ``` ### Ajouter le composant Payment Element à votre page de paiement > #### Conflits entre les iframes > > Ne placez pas le composant Element Payment dans un autre `iframe`, car il entre en conflit avec les moyens de paiement qui nécessitent une redirection vers une autre page pour confirmer le paiement. Le composant Payment Element doit avoir un conteneur dédié dans votre page de paiement. Créez un nœud DOM vide doté d’un ID unique dans votre formulaire de paiement. ```html
``` Une fois votre formulaire chargé, créez une instance `Elements` avec `mode`, `montant`, `devise` et `paymentMethodCreation`. Spécifiez `sellerDetails` et transmettez le `networkBusinessProfile` du commerçant pour vous assurer que Stripe affiche les moyens de paiement pris en charge par le commerçant. Cela vous permet de prendre en charge un ensemble différent de moyens de paiement du commerçant tout en affichant les moyens de paiement compatibles avec le client. Ensuite, créez une instance du composant Element Payment et montez-la sur le nœud DOM conteneur. ```javascript const options = { mode: 'payment', amount: 1000, currency: 'usd', paymentMethodCreation: 'manual', sellerDetails: { networkBusinessProfile: "profile_123" }, // Fully customizable with appearance API. appearance: {/*...*/}, }; // Set up Stripe.js and Elements to use in checkout formconst elements = stripe.elements(options); // Create and mount the Payment Element const paymentElementOptions = { layout: 'accordion'}; const paymentElement = elements.create('payment', paymentElementOptions); paymentElement.mount('#payment-element'); ``` ### Collecter les adresses Par défaut, le Payment Element ne collecte que les informations nécessaires à la facturation. Certaines opérations, telles que le [calcul des taxes](https://docs.stripe.com/api/tax/calculations/create.md) ou la saisie des informations de livraison, nécessitent l’adresse complète de votre client. Vous pouvez : - Utilisez l’[Address Element](https://docs.stripe.com/elements/address-element.md) pour tirer parti des fonctionnalités de saisie automatique et de localisation et recueillir l’adresse complète de votre client. Cela permet de garantir un calcul des taxes le plus précis possible. - Recueillez l’adresse à l’aide de votre propre formulaire personnalisé. ### Créer le PaymentMethod Lorsque le client envoie votre formulaire de paiement, créez un `PaymentMethod` et envoyez-le à votre serveur pour créer un SPT. ```javascript const form = document.getElementById('payment-form'); const submitBtn = document.getElementById('submit'); const handleError = (error) => { const messageContainer = document.querySelector('#error-message'); messageContainer.textContent = error.message; submitBtn.disabled = false; } form.addEventListener('submit', async (event) => { // We don't want to let default form submission happen here, // which would refresh the page. event.preventDefault(); // Prevent multiple form submissions if (submitBtn.disabled) { return; } // Disable form submission while loading submitBtn.disabled = true; // Trigger form validation and wallet collection const {error: submitError} = await elements.submit(); if (submitError) { handleError(submitError); return; } // Create the PaymentMethod using the details collected by the Payment Element const {error, paymentMethod} = await stripe.preparePaymentMethod({ elements, params: { billing_details: { name: 'Jenny Rosen', } } }); if (error) { // This point is only reached if there's an immediate error when // creating the PaymentMethod. Show the error to your customer (for example, payment details incomplete) handleError(error); return; } // Create the Shared Payment Token const res = await fetch("/create-spt", { method: "POST", headers: {"Content-Type": "application/json"}, body: JSON.stringify({ paymentMethodId: paymentMethod.id, }), }); const data = await res.json(); // Handle any next actions or errors. See the Handle any next actions step for implementation. handleServerResponse(data); }); ``` ## Émettre un token de paiement partagé à un commerçant En tant qu’agent, créez un `SharedPaymentIssuedToken` pour la transaction en utilisant le moyen de paiement de votre client et le profil Stripe du commerçant. Définissez des limites telles que la devise, le montant maximal et la période d’expiration. Cette requête renvoie un ID `SharedPaymentToken` que vous partagez avec le commerçant pour le traitement du paiement. ```curl curl https://api.stripe.com/v1/shared_payment/issued_tokens \ -u "<>:" \ -d payment_method=pm_1RgaZbFPC5QUO6ZCe2ekOCNX \ -d "seller_details[network_business_profile]=profile_123" \ -d "usage_limits[currency]=usd" \ -d "usage_limits[expires_at]=1751587220" \ -d "usage_limits[max_amount]=1000" \ --data-urlencode "return_url=http://example.com/agent-checkout/return" ``` ### Moyens de paiement pris en charge | Moyen de paiement | Disponibilité | | ---------------------------------------------------------------------- | ---------------- | | [Cartes bancaires](https://docs.stripe.com/payments/cards/overview.md) | ✓ Supported 1 | | [Link](https://docs.stripe.com/payments/wallets/link.md) | ✓ Pris en charge | | [Apple Pay](https://docs.stripe.com/apple-pay.md) | ✓ Pris en charge | | [Google Pay](https://docs.stripe.com/google-pay.md) | ✓ Pris en charge | | [Klarna](https://docs.stripe.com/payments/klarna.md) | ✓ Pris en charge | | [Affirm](https://docs.stripe.com/payments/affirm.md) (limité) | ✓ Supported 2,3 | 1 En collaboration avec les réseaux de cartes, Stripe peut fournir et utiliser des tokens émis par le biais des programmes Agent Pay de Mastercard et Visa Intelligent Commerce de Visa en votre nom. 2 Un agent peut ne pas interagir par voie programmatique avec l’interface utilisateur du formulaire d’inscription aux services financiers d’Affirm dans la vue web ; le client doit être celui qui navigue et confirme. Il peut également ne pas afficher le paiement Affirm dans un navigateur sur l’appareil sur lequel l’agent n’a pas de contrôle de navigation. 3 Si un agent commercialise Affirm auprès des clients, il doit se conformer aux [guides de conformité marketing](https://docs.affirm.com/developers/docs/compliance_and_guidelines) d’Affirm et utiliser le [guide](https://businesshub.affirm.com/hc/en-us/articles/10653174159636-Affirm-Marketing-Compliance-Guides) Affirm qui concerne les options de paiement Affirm que vous affichez à vos clients. ### Gérer les actions suivantes Un `SharedPaymentToken` peut passer à l’état `requires_action` lorsqu’un paiement créé par le commerçant nécessite une action client supplémentaire avant d’être finalisé. Si le paiement nécessite une action client supplémentaire, comme une authentification 3D Secure ou une redirection pour un moyen de paiement local, vous devez gérer cette action. Pour les paiements par carte, Stripe peut déclencher automatiquement 3D Secure dans les cas suivants : - Les directives du secteur l’exigent. - L’émetteur en fait la demande. - Le commerçant en fait la demande lorsqu’il utilise le `SharedPaymentToken` pour traiter un `PaymentIntent`. - Certaines optimisations Stripe s’appliquent. Lorsque Stripe déclenche 3D Secure, elle redirige le client vers l’interface utilisateur de la banque. Lorsque le SPT passe à `requires_action`, Stripe envoie le webhook `shared_payment.issued_token.requires_action`. Récupérez le SPT sur votre serveur. ```curl curl https://api.stripe.com/v1/shared_payment/issued_tokens/spt_123 \ -u "<>:" ``` ``` { "id": "spt_123", "object": "shared_payment.issued_token", "status": "requires_action", "next_action": { "type": "use_stripe_sdk", "use_stripe_sdk": { "value": "ewogICJ0eXBlIjogInN0cmlwZV8zZHN 2X2ZpbmdlcnByaW50IiwKICAic291cmNlIjogInNyY18xQThYeUwyZVp2S1lsbzJDOXhROXpSNXQiLAogICJvbmVfY2xpY2tfYXV0aCI6IHRydWUKfQ==" } } ... } ``` Sur votre client, affichez le flux d’action suivant. Stripe affiche automatiquement l’interface utilisateur d’authentification dans une fenêtre modale contextuelle lorsque vous appelez `handleNextAction`. #### JavaScript ```javascript const handleServerResponse = async (response) => { if (response.error) { // Show error from server on payment form } else if (response.status === "requires_action") { // Use Stripe.js to handle the required next action const result = await stripe.handleNextAction({ hashedValue: response.next_action.use_stripe_sdk.value }); const actionError = result && (result as any).error; if (actionError) { // Show error from Stripe.js in payment form } else { // Actions handled, show success message } } else { // No actions needed, show success message } } ``` Une fois que le client a effectué l’action requise, Stripe envoie le webhook `shared_payment.issued_token.active`, sauf si vous avez désactivé le `SharedPaymentToken` entre-temps. ### Révoquer un SPT En tant qu’agent, vous pouvez révoquer le SPT à tout moment. La révocation empêche le commerçant de l’utiliser pour créer un paiement. ```curl curl -X POST https://api.stripe.com/v1/shared_payment/issued_tokens/spt_123/revoke \ -u "<>:" ``` ### Écouter les événements de webhook Nous vous envoyons des événements, à vous et au commerçant, lorsque : - Les commerçants utilisent un SPT accordé pour accepter un paiement. - Vous révoquez un SPT. Les marchands ne peuvent pas créer un paiement avec un SPT révoqué. | Événement | Description | Cas d’usage | | --------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `shared_payment.issued_token.requires_action` | Le SPT nécessite une action client supplémentaire avant que le commerçant puisse finaliser le paiement. | Vous écoutez cet événement pour récupérer le SPT, inspecter `next_action` et présenter l’authentification requise ou le flux de redirection sur l’interface de l’agent. | | `shared_payment.issued_token.active` | Le client a effectué l’action requise et le SPT peut continuer à suivre le tunnel de paiement. | Vous écoutez cet événement pour savoir si le SPT est à nouveau utilisable une fois l’action requise terminée. | | `shared_payment.issued_token.used` | Vous recevez cet événement lorsque le commerçant utilise le SPT. | Vous écoutez cet événement afin d’informer le client que le paiement a été traité. | | `shared_payment.issued_token.deactivated` | Le SPT a été désactivé (révoqué ou expiré). | Vous écoutez cet événement pour savoir quand le SPT n’est plus valide. |