# Transfert des informations de carte vers des endpoints d'API tiers Comment utiliser l'API Vault and Forward pour partager en toute sécurité des informations de carte avec différents prestataires. L’API Vault and Forward vous permet de tokeniser et de stocker les informations de carte bancaire sur Stripe, une solution sécurisée conforme à la norme PCI, puis d’acheminer ces données vers des endpoints ou prestataires autorisés. Avec l’API, vous pouvez : - Utiliser le composant [Payment Element](https://docs.stripe.com/payments/payment-element.md) avec [différents prestataires de services de paiement](https://docs.stripe.com/payments/forwarding-third-party-processors.md). - Utiliser Stripe comme solution principale de stockage des informations de carte provenant de vos différents prestataires. - Transmettre des coordonnées de carte bancaire à votre propre [système de stockage des tokens conforme à la norme PCI](https://docs.stripe.com/payments/forwarding-token-vault.md). > #### Demander un accès > > Pour obtenir un accès au service de transfert de Stripe, contactez le [service Support de Stripe](https://dashboard.stripe.com/login?redirect=https%3A%2F%2Fsupport.stripe.com%2Fcontact%2Femail%3Fquestion%3Dother%26topic%3Dpayment_apis%26subject%3DHow%2520can%2520I%2520access%2520the%2520Vault%2520and%2520Forward%2520API%3F%26body%3DWhat%2520endpoint%28s%29%2520would%2520you%2520like%2520to%2520forward%2520card%2520details%2520to%3F). ## Transmettre les demandes aux endpoints de destination et renseigner les informations de carte à partir du système de stockage sécurisé de Stripe Flux d'API pour le transfert des informations de carte (See full diagram at https://docs.stripe.com/payments/vault-and-forward) ## Collecter des informations de carte et créer un PaymentMethod Pour collecter les informations de carte, utilisez le Payment Element afin de créer [un PaymentMethod](https://docs.stripe.com/payments/finalize-payments-on-the-server-legacy.md?type=payment#create-pm). Une fois que vous avez créé un PaymentMethod, nous stockons automatiquement les informations de la carte dans le système sécurisé de Stripe, conforme aux normes PCI. Si vous avez votre propre front-end, vous pouvez toujours utiliser l’API Vault and Forward en [créant directement un PaymentMethod](https://docs.stripe.com/api/payment_methods/create.md). En règle générale, vous ne pouvez réutiliser les PaymentMethods qu’en les associant à un objet Customer. Cependant, l’API Vault and Forward accepte tous les objets PaymentMethod, y compris ceux qui ne sont pas rattachés à un client. De même, l’API Vault and Forward ne [confirme](https://docs.stripe.com/api/payment_intents/confirm.md) ni ne [capture](https://docs.stripe.com/api/payment_intents/capture.md) les PaymentIntents. De ce fait, il est possible que vous les utilisiez par erreur pour capturer sur Stripe un paiement déjà capturé sur un autre prestataire de services de paiement. > #### Transactions Link > > Les identifiants de paiement des consommateurs enregistrés avec les transactions Link ne peuvent pas être transférés d’un prestataire de services de paiement à un autre. Les identifiants enregistrés via Link sont exclus de tout transfert. Les CVC expirent automatiquement après une certaine période et expirent également lorsqu’ils sont utilisés avec l’API Vault and Forward. Si vous avez besoin d’un CVC après que l’une ou l’autre de ces conditions a été remplie, vous devez recollecter les informations de la carte. ### Preserve CVC with SetupIntents If you use [SetupIntents](https://docs.stripe.com/api/setup_intents.md) to collect card details before forwarding, card validation during SetupIntent confirmation can consume the CVC. When this happens, subsequent Forwarding API calls won’t include the CVC, which can cause failures with processors that require it. To access options for preserving CVC availability when using SetupIntents with the Forwarding API, contact [Stripe support](https://dashboard.stripe.com/login?redirect=https%3A%2F%2Fsupport.stripe.com%2Fcontact%2Femail%3Fquestion%3Dother%26topic%3Dpayment_apis%26subject%3DPreserve%2520CVC%2520with%2520SetupIntents%2520and%2520Forwarding%2520API). ## Créer une ForwardingRequest Pour envoyer des informations de carte depuis le système sécurisé de Stripe, vous devez [créer une ForwardingRequest](https://docs.stripe.com/api/forwarding/forwarding_requests/create.md) et y inclure les paramètres suivants : - `payment_method` : objet qui permet à Stripe de trouver les informations de carte bancaire de votre client dans ses données et de les insérer dans le corps de la requête. - `url` : le endpoint de destination exact de votre requête. - `request.body` : le corps de la requête API que vous souhaitez envoyer au endpoint de destination (par exemple, l’envoi d’une demande de paiement à un autre prestataire de services de paiement). Le champ dans lequel vous saisissez habituellement les informations de carte bancaire de votre client doit rester vide. - `replacements` : les champs que vous souhaitez que Stripe remplace dans le `request.body`. Les [champs disponibles](https://docs.stripe.com/api/forwarding/forwarding_requests/create.md#forwarding_request_create-replacements) que nous recommandons de toujours définir sont `card_number`, `card_expiry`, `card_cvc`, et `cardholder_name`. Par exemple, l’inclusion de `card_number` dans le tableau `replacements` remplace le champ de numéro de carte approprié pour votre endpoint de destination dans le `request.body`. > Stripe peut être plus indulgent que d’autres sous-traitants dans la validation du champ du nom du titulaire de la carte. Si vous utilisez le champ de remplacement `cardholder_name`, vous devez vous assurer que les noms que vous utilisez passent la validation imposée par l’endpoint de destination. Par exemple, si l’endpoint de destination s’attend à ce que tous les noms ne contiennent que les lettres A à Z, sans accent ou autre système d’écriture, vous devez vérifier que les informations bancaires que vous transmettez répondent à cette exigence. Une autre solution consiste à ne pas utiliser le champ de remplacement `cardholder_name` et à préciser le nom du titulaire de la carte directement dans le corps de votre demande. Vous devez formater votre requête en fonction des données attendues par l’endpoint de destination. Dans l’exemple ci-dessous, l’endpoint de destination attend un en-tête `Idempotency-Key` et accepte un corps de requête JSON contenant les informations de paiement. Nous vous demandons de transmettre les clés API pour le endpoint de destination lors de chaque demande API. Stripe transmet la demande en utilisant les clés API que vous fournissez, et ne conserve que les versions hachées et chiffrées des clés API du endpoint de destination. ```curl curl https://api.stripe.com/v1/forwarding/requests \ -u "<>:" \ -H "Idempotency-Key: {{IDEMPOTENCYKEY_ID}}" \ -d "payment_method={{PAYMENTMETHOD_ID}}" \ --data-urlencode "url=https://endpoint-url/v1/payments" \ -d "request[headers][0][name]=Destination-API-Key" \ -d "request[headers][0][value]={{DESTINATION_API_KEY}}" \ -d "request[headers][1][name]=Destination-Idempotency-Key" \ -d "request[headers][1][value]={{DESTINATION_IDEMPOTENCY_KEY}}" \ --data-urlencode "request[body]={\"amount\":{\"value\":1000,\"currency\":\"usd\"},\"paymentMethod\":{\"number\":\"\",\"expiryMonth\":\"\",\"expiryYear\":\"\",\"cvc\":\"\",\"holderName\":\"\"},\"reference\":\"{{REFERENCE_ID}}\"}" \ -d "replacements[0]=card_number" \ -d "replacements[1]=card_expiry" \ -d "replacements[2]=card_cvc" \ -d "replacements[3]=cardholder_name" ``` > Vous pouvez fournir une `Idempotency-Key` pour vous assurer que les requêtes avec la même clé n’aboutissent qu’à une seule requête sortante. Utilisez une clé différente et unique pour Stripe et toutes les clés d’idempotence que vous fournissez dans la requête tierce sous-jacente. > > Utilisez un nouveau `Idempotency-Key` chaque fois que vous apportez des modifications aux champs `request.body` ou `request.header`. La transmission de l’ancienne clé d’idempotence entraîne la relecture par l’API des réponses plus anciennes, y compris les erreurs de validation précédentes ou les erreurs d’endpoint de destination. Nous vous recommandons d’utiliser une nouvelle clé d’idempotence lorsque vous relancez des demandes qui ont rencontré une erreur atteignant l’endpoint de destination pour vous assurer que la demande est relancée à la destination. ## Transférer les moyens de paiement des wallets Utilisez l’API Vault and Forward pour transférer les moyens de paiement Apple Pay et Google Pay. Selon le wallet et le type de tokenisation, utilisez différents champs de remplacement afin que les identifiants du wallet soient correctement transférés. ### Wallets pris en charge Stripe prend en charge les wallets suivants : - **Apple Pay** : numéros de compte principal d’appareil (DPAN) uniquement. Les numéros de compte principal de marchand (MPAN) Apple Pay ne sont pas pris en charge. - **Google Pay** : numéros de compte principal de financement (FPAN) et numéros de compte principal d’appareil (DPAN). Pour accéder au transfert de wallets, contactez [le support Stripe](https://dashboard.stripe.com/login?redirect=https%3A%2F%2Fsupport.stripe.com%2Fcontact%2Femail%3Fquestion%3Dother%26topic%3Dpayment_apis%26subject%3DHow%2520can%2520I%2520access%2520wallet%2520forwarding%2520for%2520Vault%2520and%2520Forward%3F). ### Détecter les moyens de paiement wallet Pour déterminer quels champs de remplacement utiliser, récupérez le `PaymentMethod` et vérifiez le type de wallet ainsi que la méthode de tokenisation : #### Google Pay Le champ `tokenization_type` indique si le moyen de paiement utilise un FPAN ou un DPAN : ```json { "id": "pm_1Q0PsIJvEtkwdCNYMSaVuRz6", "object": "payment_method", "type": "card", "card": { "wallet": { "type": "google_pay", "google_pay": { "tokenization_type": "dpan_or_ecommerce_token" // or "fpan" } } } } ``` #### Apple Pay Les moyens de paiement Apple Pay utilisent toujours des DPAN, comme indiqué par le champ `tokenization_type` : ```json { "id": "pm_1Q0PsIJvEtkwdCNYMSaVuRz6", "object": "payment_method", "type": "card", "card": { "wallet": { "type": "apple_pay", "apple_pay": { "tokenization_type": "dpan", "cryptogram_type": "emv" } } } } ``` ### Champs de remplacement pour les wallets Les champs de remplacement à utiliser dépendent du type de wallet : - **Google Pay FPAN** : utilisez les champs de remplacement standard de carte bancaire (`card_number`, `card_expiry`, `card_cvc`, `cardholder_name`) - **Google Pay DPAN** : utilisez les champs de remplacement de token réseau (`network_token_number`, `network_token_cryptogram`, `network_token_expiry`, `network_token_electronic_commerce_indicator`) - **Apple Pay DPAN** : utilisez les champs de remplacement de token réseau (`network_token_number`, `network_token_cryptogram`, `network_token_expiry`, `network_token_electronic_commerce_indicator`) ### Transférer un FPAN Google Pay Pour les FPAN Google Pay, utilisez les mêmes champs de remplacement que pour les paiements par carte classiques : ```curl curl https://api.stripe.com/v1/forwarding/requests \ -u "<>:" \ -H "Idempotency-Key: {{IDEMPOTENCYKEY_ID}}" \ -d "payment_method={{PAYMENTMETHOD_ID}}" \ --data-urlencode "url=https://endpoint-url/v1/payments" \ -d "request[headers][0][name]=Destination-API-Key" \ -d "request[headers][0][value]={{DESTINATION_API_KEY}}" \ -d "request[headers][1][name]=Destination-Idempotency-Key" \ -d "request[headers][1][value]={{DESTINATION_IDEMPOTENCY_KEY}}" \ --data-urlencode "request[body]={\"amount\":{\"value\":1000,\"currency\":\"usd\"},\"paymentMethod\":{\"number\":\"\",\"expiryMonth\":\"\",\"expiryYear\":\"\",\"cvc\":\"\",\"holderName\":\"\"},\"reference\":\"{{REFERENCE_ID}}\"}" \ -d "replacements[0]=card_number" \ -d "replacements[1]=card_expiry" \ -d "replacements[2]=card_cvc" \ -d "replacements[3]=cardholder_name" ``` ### Transférer des DPAN de wallet Pour les DPAN Google Pay et Apple Pay, utilisez les champs de remplacement de token réseau : #### Google Pay ```bash curl https://api.stripe.com/v1/forwarding/requests \ -u "sk_test_4eC39HqLyjWDarjtT1zdp7dc:" \ -H "Idempotency-Key: {{IDEMPOTENCY_KEY}}" \ -d payment_method="{{PAYMENT_METHOD}}" \ --data-urlencode url="https://endpoint-url/v1/payments" \ -d "replacements[0]"=network_token_number \ -d "replacements[1]"=network_token_cryptogram \ -d "replacements[2]"=network_token_expiry \ -d "replacements[3]"=network_token_electronic_commerce_indicator \ --data-urlencode 'request[body]={"amount":{"value":1000,"currency":"usd"},"paymentMethod":{"networkToken":{"number":"","cryptogram":"","expiryMonth":"","expiryYear":"","electronicCommerceIndicator":""}},"reference":"{{REFERENCE_ID}}"}' \ -d "request[headers][0][name]"=Destination-API-Key \ -d "request[headers][0][value]"="{{DESTINATION_API_KEY}}" \ -d "request[headers][1][name]"=Destination-Idempotency-Key \ -d "request[headers][1][value]"="{{DESTINATION_IDEMPOTENCY_KEY}}" ``` #### Apple Pay ```bash curl https://api.stripe.com/v1/forwarding/requests \ -u "sk_test_4eC39HqLyjWDarjtT1zdp7dc:" \ -H "Idempotency-Key: {{IDEMPOTENCY_KEY}}" \ -d payment_method="{{PAYMENT_METHOD}}" \ --data-urlencode url="https://endpoint-url/v1/payments" \ -d "replacements[0]"=network_token_number \ -d "replacements[1]"=network_token_cryptogram \ -d "replacements[2]"=network_token_expiry \ -d "replacements[3]"=network_token_electronic_commerce_indicator \ --data-urlencode 'request[body]={"amount":{"value":1000,"currency":"usd"},"paymentMethod":{"networkToken":{"number":"","cryptogram":"","expiryMonth":"","expiryYear":"","electronicCommerceIndicator":""}},"reference":"{{REFERENCE_ID}}"}' \ -d "request[headers][0][name]"=Destination-API-Key \ -d "request[headers][0][value]"="{{DESTINATION_API_KEY}}" \ -d "request[headers][1][name]"=Destination-Idempotency-Key \ -d "request[headers][1][value]"="{{DESTINATION_IDEMPOTENCY_KEY}}" ``` ## Transmettre la requête avec les informations de carte Stripe envoie une requête au endpoint de destination en votre nom en insérant les informations de carte du PaymentMethod dans le champ `request.body`. Lorsqu’il est activé et disponible, l’outil de mise à jour de carte tente automatiquement de mettre à jour les données et de fournir les dernières informations de carte disponibles pour les requêtes. Stripe transmet ensuite la requête à l’endpoint de destination. Par exemple : 1. Stripe envoie une requête POST à l’endpoint : ``` POST /v1/payments HTTP/1.1 User-Agent: Stripe Accept: */* Host: endpoint-url Content-Type: application/json Content-Length: 321 ``` 1. Stripe inclut les en-têtes suivants : ``` Destination-API-Key: {{DESTINATION_API_KEY}} Destination-Idempotency-Key: {{DESTINATION_IDEMPOTENCY_KEY}} ``` 1. Stripe inclut le corps JSON suivant dans la requête : ``` { amount: { value: 1000, currency: 'usd' }, paymentMethod: {number: '4242424242424242', expiryMonth: '03', expiryYear: '2030', cvc: '123', holderName: 'First Last', }, reference: '{{REFERENCE_ID}}' } ``` > Si vous utilisez l’API Vault and Forward pour effectuer une demande d’autorisation, vous devez traiter toutes les actions post-transaction éventuelles, telles que les remboursements et les litiges, directement auprès du prestataire de services de paiement tiers. Contactez le service Support de Stripe si vous avez besoin d’activer l’authentification 3DS dans une configuration à plusieurs prestataires. ## Traiter la réponse du endpoint de destination Lorsque vous utilisez l’API Vault and Forward pour transmettre les informations de carte à un prestataire de services de paiement tiers, Stripe attend une réponse synchrone de l’endpoint de destination. Le délai d’attente de cette réponse est inférieur à une minute. Stripe expurge les données sensibles PCI identifiées, stocke la réponse expurgée de l’endpoint de destination et renvoie un objet [ForwardingRequest](https://docs.stripe.com/api/forwarding/request/object.md) qui contient des données sur la requête et la réponse. > Lorsque vous utilisez l’API Vault and Forward pour transmettre des informations de carte à un prestataire de services de paiement tiers, Stripe ne peut pas garantir la réponse fournie par le prestataire à vos requêtes API transférées. Si le prestataire ne répond pas, vous devez le contacter directement pour résoudre le problème. ```json { id: "fwdreq_123", object: "forwarding.request", payment_method: "{{PAYMENT_METHOD}}", request_details: { body: '{ "amount": { "value": 1000, "currency": "usd" }, "paymentMethod": { "number": "424242******4242", "expiryMonth": "03", "expiryYear": "2030", "cvc": "***", "holderName": "First Last", }, "reference": "{{REFERENCE_ID}}" }', headers: [ { name: "Content-Type", value: "application/json", }, { name: "Destination-API-Key", value: "{{DESTINATION_API_KEY}}", }, { name: "Destination-Idempotency-Key", value: "{{DESTINATION_IDEMPOTENCY_KEY}}", }, ... ] }, request_context: { "destination_duration": 234, "destination_ip_address": "35.190.113.80" }, response_details: { body: '{ // Response from the third-party endpoint goes here ... }', headers: [ ... ], status: 200, }, replacements: [ "card_number", "card_expiry", "card_cvc", "cardholder_name" ] ... } ``` ## Configurer votre endpoint d’API Vault and Forward Pour configurer votre endpoint d’API Vault and Forward, vous devez : - [Confirmer que nous prenons en charge l’endpoint de destination](https://docs.stripe.com/payments/vault-and-forward.md#confirm-endpoint). - Fournir un compte de test et de production au [service Support de Stripe](https://dashboard.stripe.com/login?redirect=https%3A%2F%2Fsupport.stripe.com%2Fcontact%2Femail%3Fquestion%3Dother%26topic%3Dpayment_apis%26subject%3DHow%2520can%2520I%2520access%2520the%2520Vault%2520and%2520Forward%2520API%3F%26body%3DWhat%2520endpoint%28s%29%2520would%2520you%2520like%2520to%2520forward%2520card%2520details%2520to%3F). - [Partager les détails de production](https://docs.stripe.com/payments/vault-and-forward.md#share-production-details) du endpoint de destination avec le [service Support de Stripe](https://dashboard.stripe.com/login?redirect=https%3A%2F%2Fsupport.stripe.com%2Fcontact%2Femail%3Fquestion%3Dother%26topic%3Dpayment_apis%26subject%3DHow%2520can%2520I%2520access%2520the%2520Vault%2520and%2520Forward%2520API%3F%26body%3DWhat%2520endpoint%28s%29%2520would%2520you%2520like%2520to%2520forward%2520card%2520details%2520to%3F). ### Vérifier que nous prenons en charge l’endpoint de destination Stripe prend en charge le transfert des requêtes API vers les endpoints suivants : - **Accertify** : - `icnow01.accertify.net/icNowImport/[path]` - **Adyen** : - `[prefix]-checkout-live.adyenpayments.com/checkout/v68/payments` - `[prefix]-checkout-live.adyenpayments.com/checkout/v68/storedPaymentMethods` - `[prefix]-checkout-live.adyenpayments.com/checkout/v69/payments` - `[prefix]-checkout-live.adyenpayments.com/checkout/v69/storedPaymentMethods` - `[prefix]-checkout-live.adyenpayments.com/checkout/v70/payments` - `[prefix]-checkout-live.adyenpayments.com/checkout/v70/storedPaymentMethods` - `[prefix]-checkout-live.adyenpayments.com/checkout/v71/payments` - `[prefix]-checkout-live.adyenpayments.com/checkout/v71/storedPaymentMethods` - **Basis Theory** : - `api.basistheory.com/connections/stripe-forward/tokenize` - **Braintree** : - `payments.braintree-api.com/graphql` - **CardPointe** : - `[prefix].cardconnect.com/cardconnect/rest/auth` - **Checkout** : - `api.checkout.com/tokens` - `api.checkout.com/payments` - **Evervault** : - `[prefix].relay.evervault.app` - **Expedia** : - `api.ean.com/v3/itineraries` - **Fat Zebra** : - `gateway.pmnts.io/v1.0/credit_cards` - **Fiserv** : - `prod.api.firstdata.com/gateway/v2/payments` - **FlexPay** : - `api.flexpay.io/v1/gateways/charge` - **GMO Payment Gateway** : - `p01.mul-pay.jp/payment/ExecTran.json` - **PaymentsOS** : - `api.paymentsos.com/tokens` - **PCI Vault** : - `api.pcivault.io/v1/capture/stripe` - **ProcessOut** : - `api.processout.com/cards` - **Rewards Network** : - `api.rewardsnetwork.com/v2/members/enroll` - `api.rewardsnetwork.com/v2/members/*/cards` - **Shift4** : - `api.shift4.com/charges` - **SoftBank** : - `stbfep.sps-system.com/api/xmlapi.do` - **Spreedly** : - `core.spreedly.com/v1/payment_methods.json` - **TabaPay** : - `[prefix]/v1/clients/[ClientID]/accounts` - **TokenEx** : - `tgapi.tokenex.com/Tokenize/Proxy/[ProfileID]` - **VGS (Very Good Security)** : - `[prefix].live.verygoodproxy.com/cards` - **Worldpay** : - `access.worldpay.com/api/payments` - `access.worldpay.com/cardPayments/customerInitiatedTransactions` - `access.worldpay.com/tokens` - `secure.worldpay.com/jsp/merchant/xml/paymentService` - **Xsolla** : - `ps.xsolla.com/forwarding/payments/card` - [Votre propre système de stockage des tokens, conforme à la norme PCI](https://docs.stripe.com/payments/forwarding-token-vault.md) Stripe prend en charge les API reposant sur le protocole HTTPS qui acceptent les requêtes JSON/XML et renvoient des réponses JSON/XML. Si votre endpoint n’est pas pris en charge ou si vous avez besoin d’un format d’API différent, communiquez les détails de l’endpoint au[service Support de Stripe](https://dashboard.stripe.com/login?redirect=https%3A%2F%2Fsupport.stripe.com%2Fcontact%2Femail%3Fquestion%3Dother%26topic%3Dpayment_apis%26subject%3DHow%2520can%2520I%2520Access%2520the%2520Vault%2520and%2520Forward%2520API%3F%26body%3DWhat%2520endpoint%28s%29%2520would%2520you%2520like%2520to%2520forward%2520card%2520details%2520to%3F) afin d’obtenir de l’aide. ### Pays pris en charge L’API Vault and Forward peut uniquement transférer des requêtes vers les pays suivants : ### Pays admissibles à la transmission des requêtes - AE - AG - AL - AM - AO - AR - AT - AU - AZ - BA - BD - BE - BG - BH - BJ - BN - BO - BS - BT - BW - CA - CH - CI - CL - CO - CR - CY - CZ - DE - DK - DO - DZ - EC - EE - EG - ES - ET - FI - FR - GA - GB - GH - GI - GM - GR - GT - GY - HK - HR - HU - ID - IE - IL - IN - IS - IT - JM - JO - JP - KE - KH - KR - KW - KZ - LA - LC - LI - LK - LT - LU - LV - MA - MC - MD - MG - MK - MN - MO - MT - MU - MX - MY - MZ - NA - NE - NG - NL - NO - NZ - OM - PA - PE - PH - PK - PL - PT - PY - QA - RO - RS - RW - SA - SE - SG - SI - SK - SM - SN - SV - TH - TN - TR - TT - TW - TZ - US - UY - UZ - VN - ZA En outre, assurez-vous que votre compte Stripe est établi dans l’un de ces pays : ### Pays éligibles à l'API Vault and Forward - AE - AT - AU - BE - BG - BR - CA - CH - CY - CZ - DE - DK - EE - ES - FI - FR - GB - GI - GR - HK - HR - HU - ID - IE - IT - JP - LI - LT - LU - LV - MT - MX - MY - NL - NO - NZ - PL - PT - RO - SE - SG - SI - SK - US ### Fournir des comptes de test au service Support de Stripe Pour accéder à l’API Vault and Forward, partagez les [identifiants de compte](https://dashboard.stripe.com/settings/account) (`acct_xxxx`) de vos comptes de test avec le [service Support de Stripe](https://dashboard.stripe.com/login?redirect=https%3A%2F%2Fsupport.stripe.com%2Fcontact%2Femail%3Fquestion%3Dother%26topic%3Dpayment_apis%26subject%3DHow%2520can%2520I%2520access%2520the%2520Vault%2520and%2520Forward%2520API%3F%26body%3DWhat%2520endpoint%28s%29%2520would%2520you%2520like%2520to%2520forward%2520card%2520details%2520to%3F). ### Partager des informations de production Communiquez les informations de production concernant votre endpoint de destination au [service Support de Stripe](https://dashboard.stripe.com/login?redirect=https%3A%2F%2Fsupport.stripe.com%2Fcontact%2Femail%3Fquestion%3Dother%26topic%3Dpayment_apis%26subject%3DHow%2520can%2520I%2520access%2520the%2520Vault%2520and%2520Forward%2520API%3F%26body%3DWhat%2520endpoint%28s%29%2520would%2520you%2520like%2520to%2520forward%2520card%2520details%2520to%3F) en précisant notamment les éléments suivants : URL, méthode HTTP, documentation, champs, en-têtes des requêtes et clés de chiffrement. Stripe configure ensuite votre endpoint de destination pour une utilisation avec l’API Vault and Forward en mode production. Pour partager des clés API tierces, vous devez les chiffrer à l’aide de la clé publique de Stripe spécifique à l’API Vault and Forward. Commencez par [importer une clé publique](http://www.gnupg.org/gph/en/manual.html#AEN84) à l’aide du [PGP GNU Privacy Guard](http://gnupg.org). Familiarisez-vous avec les principes de bases de PGP, puis utilisez la clé PGP suivante pour chiffrer vos clés API tierces : ### Clé PGP de l'API Vault and Forward ``` -----BEGIN PGP PUBLIC KEY BLOCK----- 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 UraCYX03loNHRxLCyeHR4GA= =bbos -----END PGP PUBLIC KEY BLOCK----- ``` Pour chiffrer vos clés API tierces avec la clé PGP de l’API Vault and Forward : 1. Créez un fichier nommé `hash_encrypt_key.sh` avec le contenu ci-dessous. Le script génère un hachage `SHA256` pour votre clé API, le chiffre à l’aide de la clé publique de Stripe, puis l’encode en fonction de `Base64`. > #### Utilitaires requis > > Pour exécuter le script, vous devez d’abord installer les utilitaires `sha256sum`, `gpg` et `base64`. ```bash #!/bin/sh set -euo pipefail fail () { printf "Error: $1\n" >&2 && exit 1; } STRIPE_PUBLIC_KEY=AE863ADA1603150856C0A853A7B203177D034588 API_KEY=$(printf "$1" | tr -d '\n' | sed 's/^[[:space:]]*//; s/[[:space:]]*$//') [ -x "$(command -v sha256sum)" ] || fail "sha256sum is not installed." [ -x "$(command -v gpg)" ] || fail "gpg is not installed." [ -x "$(command -v base64)" ] || fail "base64 is not installed." [ ! -z "$API_KEY" ] || fail "Please pass in an API key." grep -iqv "Basic \|Bearer " <<< "$API_KEY" || fail "Please omit the Basic/Bearer prefix." gpg --list-keys $STRIPE_PUBLIC_KEY > /dev/null 2>&1 || fail "Stripe public key not imported." printf "$API_KEY" | sha256sum | cut -d " " -f 1 | tr -d '\n' | gpg -e -r $STRIPE_PUBLIC_KEY --always-trust | base64 > encrypted_hashed_key.txt printf "Successfully generated encrypted_hashed_key.txt\n" ``` 1. Exécutez le script en transmettant votre clé API tierce entre guillemets simples, en omettant tout préfixe `Bearer` ou `Basic`. La clé doit correspondre exactement à celle que vous utilisez pour les requêtes réelles au endpoint de destination, sans inclure de préfixe. Le script produit un fichier nommé `encrypted_hashed_key.txt`. ```bash sh hash_encrypt_key.sh '' ``` ### Utilisez les clés API limitées de Stripe avec Vault et Forward Utilisez une [ clé API limitée (RAK)](https://docs.stripe.com/keys-best-practices.md#limit-access) pour permettre l’accès côté serveur uniquement aux endpoints Vault et Forward. - Activez les permissions minimales pour votre clé limitée : - `forwarding_request_write` : Obligatoire pour [create](https://docs.stripe.com/api/forwarding/forwarding_requests/create.md) ForwardingRequests. - `forwarding_request_read` : (Facultatif) pour [retrieve](https://docs.stripe.com/api/forwarding/forwarding_requests/retrieve.md) ou [list](https://docs.stripe.com/api/forwarding/forwarding_requests/list.md) ForwardingRequests. - Utilisez la clé API limitée comme votre identifiant `Authorization: Bearer` lors d’un appel `/v1/forwarding/requests` depuis votre serveur. - Si votre intégration appelle aussi d’autres API, ajoutez seulement les permissions supplémentaires minimales requises par ces appels. En savoir plus sur comment [créer une clé API limitée](https://docs.stripe.com/keys.md#create-restricted-api-secret-key). ## Tester votre intégration Pour confirmer que votre intégration fonctionne correctement avec votre endpoint de destination, lancez une ForwardingRequest en utilisant le PaymentMethod que vous avez créé. Cet exemple utilise `pm_card_visa` comme moyen de paiement. ```curl curl https://api.stripe.com/v1/forwarding/requests \ -u "<>:" \ -H "Idempotency-Key: {{IDEMPOTENCYKEY_ID}}" \ -d payment_method=pm_card_visa \ -d "url={{DESTINATION ENDPOINT}}" \ -d "request[headers][0][name]=Destination-API-Key" \ -d "request[headers][0][value]={{DESTINATION_API_KEY}}" \ -d "request[headers][1][name]=Destination-Idempotency-Key" \ -d "request[headers][1][value]={{DESTINATION_IDEMPOTENCY_KEY}}" \ --data-urlencode "request[body]={\"amount\":{\"value\":1000,\"currency\":\"usd\"},\"paymentMethod\":{\"number\":\"\",\"expiryMonth\":\"\",\"expiryYear\":\"\",\"cvc\":\"\",\"holderName\":\"\"},\"reference\":\"{{REFERENCE_ID}}\"}" \ -d "replacements[0]=card_number" \ -d "replacements[1]=card_expiry" \ -d "replacements[2]=card_cvc" \ -d "replacements[3]=cardholder_name" ``` > L’API Vault and Forward traite toutes les réponses de l’endpoint de destination comme une réussite (`success`) et renvoie un code d’état `200`, ainsi que le code de réponse de l’endpoint de destination dans le fichier `response.body`. Par exemple, lorsque l’endpoint de destination renvoie un code d’état `400` à Stripe, l’API Vault and Forward répond avec un code d’état `200`. Le fichier `response.body` inclut la réponse `400` de l’endpoint de destination et le message d’erreur. Testez séparément la requête API que vous envoyez à votre endpoint de destination pour vous assurer que vous n’avez pas d’erreurs. ### Consulter le log des requêtes dans le Dashboard Vous pouvez consulter les journaux de requêtes et les erreurs liées à l’API Vault and Forward dans [Workbench](https://docs.stripe.com/workbench/overview.md#request-logs). De plus, vous pouvez utiliser l’[API List](https://docs.stripe.com/api/forwarding/forwarding_requests/list.md) pour récupérer les journaux de Stripe. > Les paramètres `request.headers` et `request.body` de la requête entrante sont chiffrés et apparaissent comme `encrypted_request` dans le Dashboard.