# Kartenangaben an API-Endpoints von Drittanbietern weiterleiten Verwenden Sie die Vault and Forward API, um Kartendaten sicher für mehrere Abwickler auszutauschen. Mit der Vault and Forward API können Sie Kartendaten im PCI-konformen Tresor von Stripe tokenisieren und speichern und diese Daten an zugelassene Zahlungsabwickler oder Endpoints weiterleiten. Mit der API können Sie: - Verwenden Sie das [Payment Element](https://docs.stripe.com/payments/payment-element.md) für mehrere [Zahlungsabwickler](https://docs.stripe.com/payments/forwarding-third-party-processors.md). - Verwenden Sie Stripe als Ihren primären Tresor für Kartendaten bei allen Abwicklern. - Geben Sie Kartendaten an Ihren eigenen [PCI-konformen Token-Tresor](https://docs.stripe.com/payments/forwarding-token-vault.md) weiter. > #### Zugriff anfordern > > Um Zugriff auf den Weiterleitungsdienst von Stripe zu erhalten, wenden Sie sich an den [Stripe-Support](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). ## Weiterleitung von Anfragen an Ziel-Endpoints und Auffüllen der Kartendaten aus dem Tresor von Stripe API-Abläufe zum Weiterleiten von Kartenangaben (See full diagram at https://docs.stripe.com/payments/vault-and-forward) ## Kartenangaben erfassen und eine PaymentMethod erstellen Zum Erfassen von Kartendaten verwenden Sie das Payment Element. Mit diesem können Sie eine [PaymentMethod](https://docs.stripe.com/payments/finalize-payments-on-the-server-legacy.md?type=payment#create-pm) erstellen. Nach der Erstellung speichern wir die Kartendaten automatisch im PCI-konformen Tresor von Stripe. Wenn Sie über ein eigenes Frontend verfügen, können Sie die Vault and Forward API verwenden, indem Sie [direkt eine PaymentMethod erstellen](https://docs.stripe.com/api/payment_methods/create.md). In der Regel können Sie PaymentMethods nur wiederverwenden, indem Sie sie an eine Kundin/einen Kunden anhängen. Die Vault und Forward API akzeptiert jedoch alle PaymentMethod-Objekte, einschließlich derjenigen, die nicht mit einer Kundin/einem Kunden verknüpft sind. Ebenso [bestätigt](https://docs.stripe.com/api/payment_intents/confirm.md) oder [erfasst](https://docs.stripe.com/api/payment_intents/capture.md) die Vault and Forward API keine PaymentIntents. Infolgedessen können Sie sie unbeabsichtigt verwenden, um eine Zahlung auf Stripe zu erfassen, die bereits von einem anderen Verarbeiter erfasst wurde. Prüfziffern/CVCs verfallen automatisch nach einem bestimmten Zeitraum und auch dann, wenn sie mit der Vault and Forward API verwendet werden. Wenn Sie einen CVC benötigen, nachdem eine dieser Bedingungen erfüllt ist, müssen Sie die Kartenangaben erneut erfassen. ## ForwardingRequest erstellen Um Kartendaten aus dem Stripe-Tresor zu senden, müssen Sie [eine ForwardingRequest](https://docs.stripe.com/api/forwarding/forwarding_requests/create.md) erstellen und die folgenden Parameter angeben: - `payment_method`: Objekt mit dem Stripe die Kartendaten Ihrer Kundinnen und Kunden im Tresor von Stripe identifizieren und diese Daten in den Anfragetext einfügen kann. - `url`: Der genaue Ziel-Endpoint Ihrer Anfrage. - `request.body`: Der Anfragetext der API-Anfrage, die Sie an den Ziel-Endpoint senden möchten (zum Beispiel die Zahlungsanfrage, die Sie an einen anderen Zahlungsabwickler senden). Lassen Sie jedes Feld leer, in das Sie normalerweise Kartendaten Ihrer Kundin/Ihres Kunden eingeben. - `replacements`: Felder, die Stripe im `request.body` ersetzen soll. Die [verfügbaren Felder](https://docs.stripe.com/api/forwarding/forwarding_requests/create.md#forwarding_request_create-replacements), die unserer Empfehlung zufolge, immer festgelegt werden sollten, sind `card_number`, `card_expiry`, `card_cvc` und `cardholder_name`. Wenn Sie beispielsweise `card_number` in das Array `replacements` aufnehmen, wird das entsprechende Kartennummernfeld für Ihren Ziel-Endpoint im `request.body` ersetzt. > Stripe kann bei der Validierung des Namensfelds des Karteninhabers/der Karteninhaberin nachsichtiger sein als andere Zahlungsabwickler. Wenn Sie das Ersetzungsfeld `cardholder_name` verwenden, sind Sie dafür verantwortlich, dass die von Ihnen verwendeten Namen die vom Ziel-Endpoint erzwungene Validierung bestehen. Wenn der Ziel-Endpoint beispielsweise erwartet, dass alle Namen nur die Buchstaben A–Z ohne Akzentzeichen oder andere Schriftsysteme enthalten, müssen Sie sicherstellen, dass die von Ihnen weitergeleiteten Kartendaten diese Anforderung erfüllen. Eine Alternative besteht darin, das Ersetzungsfeld `cardholder_name` nicht zu verwenden und den Namen des Karteninhabers/der Karteninhaberin in Ihrem Anfragetext direkt in Ihrer Anfrage anzugeben. Sie müssen Ihre Anfrage basierend auf den Daten formatieren, die der Ziel-Endpoint erwartet. Im folgenden Beispiel erwartet der Ziel-Endpoint einen `Idempotency-Key`-Header und akzeptiert einen JSON-Text mit den Zahlungsdetails. Sie müssen bei jeder API-Anfrage API-Schlüssel für den Ziel-Endpoint übergeben. Stripe leitet die Anfrage mit den Ihnen bereitgestellten API-Schlüsseln weiter und speichert nur gehashte und verschlüsselte Versionen der API-Schlüssel des Ziel-Endpoints. ```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 ``` ```cli stripe forwarding requests create \ --idempotency {{IDEMPOTENCYKEY_ID}} \ --payment-method="{{PAYMENTMETHOD_ID}}" \ --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}} \ -d "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 ``` ```ruby # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = Stripe::StripeClient.new("<>") request = client.v1.forwarding.requests.create( { payment_method: '{{PAYMENTMETHOD_ID}}', url: 'https://endpoint-url/v1/payments', request: { headers: [ { name: 'Destination-API-Key', value: '{{DESTINATION_API_KEY}}', }, { name: 'Destination-Idempotency-Key', value: '{{DESTINATION_IDEMPOTENCY_KEY}}', }, ], body: '{"amount":{"value":1000,"currency":"usd"},"paymentMethod":{"number":"","expiryMonth":"","expiryYear":"","cvc":"","holderName":""},"reference":"{{REFERENCE_ID}}"}', }, replacements: ['card_number', 'card_expiry', 'card_cvc', 'cardholder_name'], }, {idempotency_key: '{{IDEMPOTENCYKEY_ID}}'}, ) ``` ```python # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = StripeClient("<>") # For SDK versions 12.4.0 or lower, remove '.v1' from the following line. request = client.v1.forwarding.requests.create( { "payment_method": "{{PAYMENTMETHOD_ID}}", "url": "https://endpoint-url/v1/payments", "request": { "headers": [ {"name": "Destination-API-Key", "value": "{{DESTINATION_API_KEY}}"}, { "name": "Destination-Idempotency-Key", "value": "{{DESTINATION_IDEMPOTENCY_KEY}}", }, ], "body": "{\"amount\":{\"value\":1000,\"currency\":\"usd\"},\"paymentMethod\":{\"number\":\"\",\"expiryMonth\":\"\",\"expiryYear\":\"\",\"cvc\":\"\",\"holderName\":\"\"},\"reference\":\"{{REFERENCE_ID}}\"}", }, "replacements": ["card_number", "card_expiry", "card_cvc", "cardholder_name"], }, {"idempotency_key": "{{IDEMPOTENCYKEY_ID}}"}, ) ``` ```php // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys $stripe = new \Stripe\StripeClient('<>'); $request = $stripe->forwarding->requests->create( [ 'payment_method' => '{{PAYMENTMETHOD_ID}}', 'url' => 'https://endpoint-url/v1/payments', 'request' => [ 'headers' => [ [ 'name' => 'Destination-API-Key', 'value' => '{{DESTINATION_API_KEY}}', ], [ 'name' => 'Destination-Idempotency-Key', 'value' => '{{DESTINATION_IDEMPOTENCY_KEY}}', ], ], 'body' => '{"amount":{"value":1000,"currency":"usd"},"paymentMethod":{"number":"","expiryMonth":"","expiryYear":"","cvc":"","holderName":""},"reference":"{{REFERENCE_ID}}"}', ], 'replacements' => ['card_number', 'card_expiry', 'card_cvc', 'cardholder_name'], ], ['idempotency_key' => '{{IDEMPOTENCYKEY_ID}}'] ); ``` ```java // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys StripeClient client = new StripeClient("<>"); RequestCreateParams params = RequestCreateParams.builder() .setPaymentMethod("{{PAYMENTMETHOD_ID}}") .setUrl("https://endpoint-url/v1/payments") .setRequest( RequestCreateParams.Request.builder() .addHeader( RequestCreateParams.Request.Header.builder() .setName("Destination-API-Key") .setValue("{{DESTINATION_API_KEY}}") .build() ) .addHeader( RequestCreateParams.Request.Header.builder() .setName("Destination-Idempotency-Key") .setValue("{{DESTINATION_IDEMPOTENCY_KEY}}") .build() ) .setBody( "{\"amount\":{\"value\":1000,\"currency\":\"usd\"},\"paymentMethod\":{\"number\":\"\",\"expiryMonth\":\"\",\"expiryYear\":\"\",\"cvc\":\"\",\"holderName\":\"\"},\"reference\":\"{{REFERENCE_ID}}\"}" ) .build() ) .addReplacement(RequestCreateParams.Replacement.CARD_NUMBER) .addReplacement(RequestCreateParams.Replacement.CARD_EXPIRY) .addReplacement(RequestCreateParams.Replacement.CARD_CVC) .addReplacement(RequestCreateParams.Replacement.CARDHOLDER_NAME) .build(); RequestOptions requestOptions = RequestOptions.builder().setIdempotencyKey("{{IDEMPOTENCYKEY_ID}}").build(); // For SDK versions 29.4.0 or lower, remove '.v1()' from the following line. Request request = client.v1().forwarding().requests().create(params, requestOptions); ``` ```node // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys const stripe = require('stripe')('<>'); const request = await stripe.forwarding.requests.create( { payment_method: '{{PAYMENTMETHOD_ID}}', url: 'https://endpoint-url/v1/payments', request: { headers: [ { name: 'Destination-API-Key', value: '{{DESTINATION_API_KEY}}', }, { name: 'Destination-Idempotency-Key', value: '{{DESTINATION_IDEMPOTENCY_KEY}}', }, ], body: '{"amount":{"value":1000,"currency":"usd"},"paymentMethod":{"number":"","expiryMonth":"","expiryYear":"","cvc":"","holderName":""},"reference":"{{REFERENCE_ID}}"}', }, replacements: ['card_number', 'card_expiry', 'card_cvc', 'cardholder_name'], }, { idempotencyKey: '{{IDEMPOTENCYKEY_ID}}', } ); ``` ```go // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys sc := stripe.NewClient("<>") params := &stripe.ForwardingRequestCreateParams{ PaymentMethod: stripe.String("{{PAYMENTMETHOD_ID}}"), URL: stripe.String("https://endpoint-url/v1/payments"), Request: &stripe.ForwardingRequestCreateParams{ Headers: []*stripe.ForwardingRequestCreateRequestHeaderParams{ &stripe.ForwardingRequestCreateRequestHeaderParams{ Name: stripe.String("Destination-API-Key"), Value: stripe.String("{{DESTINATION_API_KEY}}"), }, &stripe.ForwardingRequestCreateRequestHeaderParams{ Name: stripe.String("Destination-Idempotency-Key"), Value: stripe.String("{{DESTINATION_IDEMPOTENCY_KEY}}"), }, }, Body: stripe.String("{\"amount\":{\"value\":1000,\"currency\":\"usd\"},\"paymentMethod\":{\"number\":\"\",\"expiryMonth\":\"\",\"expiryYear\":\"\",\"cvc\":\"\",\"holderName\":\"\"},\"reference\":\"{{REFERENCE_ID}}\"}"), }, Replacements: []*string{ stripe.String(stripe.ForwardingRequestReplacementCardNumber), stripe.String(stripe.ForwardingRequestReplacementCardExpiry), stripe.String(stripe.ForwardingRequestReplacementCardCVC), stripe.String(stripe.ForwardingRequestReplacementCardholderName), }, } params.SetIdempotencyKey("{{IDEMPOTENCYKEY_ID}}") result, err := sc.V1ForwardingRequests.Create(context.TODO(), params) ``` ```dotnet // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys var options = new Stripe.Forwarding.RequestCreateOptions { PaymentMethod = "{{PAYMENTMETHOD_ID}}", Url = "https://endpoint-url/v1/payments", Request = new Stripe.Forwarding.RequestRequestOptions { Headers = new List { new Stripe.Forwarding.RequestRequestHeaderOptions { Name = "Destination-API-Key", Value = "{{DESTINATION_API_KEY}}", }, new Stripe.Forwarding.RequestRequestHeaderOptions { Name = "Destination-Idempotency-Key", Value = "{{DESTINATION_IDEMPOTENCY_KEY}}", }, }, Body = "{\"amount\":{\"value\":1000,\"currency\":\"usd\"},\"paymentMethod\":{\"number\":\"\",\"expiryMonth\":\"\",\"expiryYear\":\"\",\"cvc\":\"\",\"holderName\":\"\"},\"reference\":\"{{REFERENCE_ID}}\"}", }, Replacements = new List { "card_number", "card_expiry", "card_cvc", "cardholder_name", }, }; var requestOptions = new RequestOptions { IdempotencyKey = "{{IDEMPOTENCYKEY_ID}}", }; var client = new StripeClient("<>"); var service = client.V1.Forwarding.Requests; Stripe.Forwarding.Request request = service.Create(options, requestOptions); ``` > Sie können einen `Idempotency-Key` angeben, um sicherzustellen, dass Anfragen mit demselben Schlüssel nur zu einer einzigen ausgehenden Anfrage führen. Verwenden Sie einen anderen und eindeutigen Schlüssel für Stripe und alle Idempotenzschlüssel, die Sie bei der zugrunde liegenden Drittanbieteranfrage angeben. > > Verwenden Sie jedes Mal, wenn Sie eine Aktualisierung am Feld `request.body` oder `request.header` vornehmen, einen neuen `Idempotency-Key`. Die Übergabe des älteren Idempotenz-Schlüssels führt dazu, dass die API ältere Antworten wiedergibt, einschließlich aller früheren Validierungsfehler oder Fehler im Zusammenhang mit Ziel-Endpoints. Wir empfehlen die Verwendung eines neuen Idempotenz-Schlüssels bei der Wiederholung von Anfragen, bei denen beim Erreichen des Ziel-Endpoints ein Fehler aufgetreten ist. So stellen Sie sicher, dass die Anfrage am Ziel wiederholt wird. ## Anfrage mit Kartendaten weiterleiten Stripe stellt in Ihrem Namen eine Anfrage an den Ziel-Endpoint, indem die Kartendaten aus der PaymentMethod in den `request.body` eingefügt werden. Wenn diese Option aktiviert und verfügbar ist, versucht der Card Account Updater (CAU) automatisch, die neuesten verfügbaren Kartendaten für Anfragen zu aktualisieren und bereitzustellen. Stripe leitet die Anfrage dann an den Ziel-Endpoint weiter. Beispiel: 1. Stripe stellt eine POST-Anfrage an den Endpoint: ``` POST /v1/payments HTTP/1.1 User-Agent: Stripe Accept: */* Host: endpoint-url Content-Type: application/json Content-Length: 321 ``` 1. Stripe gliedert sich in folgende Kopfzeilen ``` Destination-API-Key: {{DESTINATION_API_KEY}} Destination-Idempotency-Key: {{DESTINATION_IDEMPOTENCY_KEY}} ``` 1. Stripe nimmt den folgenden JSON-Text in die Anfrage auf: ``` { amount: { value: 1000, currency: 'usd' }, paymentMethod: {number: '4242424242424242', expiryMonth: '03', expiryYear: '2030', cvc: '123', holderName: 'First Last', }, reference: '{{REFERENCE_ID}}' } ``` > Wenn Sie die Vault und die Forward API verwenden, um eine Autorisierungsanfrage zu stellen, müssen Sie alle Aktionen nach der Transaktion, wie Rückerstattungen oder Zahlungsanfechtungen, direkt mit dem Drittanbieter abwickeln. Wenden Sie sich an den Stripe-Support, wenn Sie eine 3DS-Authentifizierung für Ihre Einrichtung mit mehreren Zahlungsabwicklern benötigen. ## Antwort vom Ziel-Endpoint verarbeiten Wenn Sie die Vault and Forward API verwenden, um Kartendetails an einen Drittanbieter weiterzuleiten, wartet Stripe synchron auf eine Antwort vom Ziel-Endpoint. Das Zeitlimit für diese Antwort beträgt weniger als eine Minute. Stripe entfernt erkannte PCI-sensible Daten, speichert die entfernte Antwort des Ziel-Endpoints und gibt ein [ForwardingRequest](https://docs.stripe.com/api/forwarding/request/object.md)-Objekt zurück, das Daten über die Anfrage und die Antwort enthält. > Wenn Sie die Vault and Forward API zur Weiterleitung von Kartendaten an einen Drittanbieter-Zahlungsabwickler verwenden, kann Stripe nicht garantieren, dass der Abwickler eine bestimmte Antwort auf Ihre weitergeleiteten API-Anfragen geben wird. Wenn der Drittanbieter-Zahlungsabwickler nicht reagiert, müssen Sie sich zur Behebung des Problems direkt an diesen Abwickler wenden. ```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" ] ... } ``` ## Ihren Vault and Forward API-Endpoint konfigurieren Um Ihren Vault and Forward API-Endpoint einzurichten, müssen Sie wie folgt vorgehen: - [Bestätigung, dass wir den Ziel-Endpoint unterstützen](https://docs.stripe.com/payments/vault-and-forward.md#confirm-endpoint). - Stellen Sie ein Test- und ein Produktionskonto für den [Stripe-Support](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) bereit. - [Geben Sie die Produktionsdetails](https://docs.stripe.com/payments/vault-and-forward.md#share-production-details) für den Ziel-Endpoint an den [Stripe-Support](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) weiter. ### Bestätigung, dass wir den Ziel-Endpoint unterstützen Stripe unterstützt die Weiterleitung von API-Anfragen an die folgenden Endpoints: - **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` - **Braintree**: - `payments.braintree-api.com/graphql` - **Checkout**: - `api.checkout.com/tokens` - `api.checkout.com/payments` - **Fat Zebra**: - `gateway.pmnts.io/v1.0/credit_cards` - **FlexPay**: - `api.flexpay.io/v1/gateways/charge` - **GMO-Zahlungs-Gateway**: - `p01.mul-pay.jp/payment/ExecTran.json` - **PaymentsOS**: - `api.paymentsos.com/tokens` - **SoftBank**: - `stbfep.sps-system.com/api/xmlapi.do` - **Spreedly**: - `core.spreedly.com/v1/payment_methods.json` - **TabaPay**: - `[prefix]/v1/clients/[ClientID]/accounts` - **Worldpay**: - `access.worldpay.com/api/payments` - `access.worldpay.com/cardPayments/customerInitiatedTransactions` - `access.worldpay.com/tokens` - `secure.worldpay.com/jsp/merchant/xml/paymentService` - [Ihr eigener PCI-konformer Token-Tresor](https://docs.stripe.com/payments/forwarding-token-vault.md) Stripe unterstützt HTTPS-basierte APIs, die JSON/XML-Anfragen akzeptieren und JSON/XML-Antworten zurückgeben. Wenn Ihr Ziel-Endpoint nicht unterstützt wird oder Sie ein anderes API-Format benötigen, teilen Sie die Endpoint-Details mit dem [Stripe-Support](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), um Unterstützung für Ihre spezifischen Anforderungen zu erhalten. ### Unterstützte Länder Die Vault and Forward API kann nur Anfragen an die folgenden Länder weiterleiten: ### Länder, die für die Weiterleitung von Anfragen in Frage kommen - 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 Stellen Sie außerdem sicher, dass Ihr Stripe-Konto in einem dieser Länder registriert ist: ### Länder, die für die Vault and Forward API berechtigt sind - 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 ### Testkonten für den Stripe-Support bereitstellen Um auf die Vault and Forward API zuzugreifen, geben Sie die [Konto-IDs](https://dashboard.stripe.com/settings/account) (`acct_xxxx`) für Ihre Testkonten an den [Stripe-Support](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) weiter. ### Produktionsdaten teilen Geben Sie die Produktionsdetails für den Ziel-Endpoint an den [Stripe-Support](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) weiter. Dazu gehören die folgenden Angaben für den Ziel-Endpoint: URL, HTTP-Methode, Dokumentation, Felder, Anfrage-Header und Verschlüsselungsschlüssel. Stripe richtet dann den Ziel-Endpoint für die Verwendung mit der Vault and Forward API im Live-Modus ein. Um API-Schlüssel von Drittanbietern zu teilen, müssen Sie sie mit dem öffentlichen Schlüssel von Stripe, der speziell für die Vault and Forward API gilt, verschlüssen. Beginnen Sie, indem Sie mit dem [GNU Privacy Guard (PGP)](http://gnupg.org) [einen öffentlichen Schlüssel importieren](http://www.gnupg.org/gph/en/manual.html#AEN84). Nachdem Sie sich mit den Grundlagen von PGP vertraut gemacht haben, verwenden Sie den folgenden PGP-Schlüssel zum Verschlüsseln Ihrer Drittanbieter-API-Schlüssel: ### PGP-Schlüssel der Vault and Forward API ``` -----BEGIN PGP PUBLIC KEY BLOCK----- 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 UraCYX03loNHRxLCyeHR4GA= =bbos -----END PGP PUBLIC KEY BLOCK----- ``` So verschlüsseln Sie Ihre API-Schlüssel von Drittanbietern mit dem PGP-Schlüssel der Vault and Forward API: 1. Erstellen Sie eine Datei mit dem Namen `hash_encrypt_key.sh` mit dem folgenden Inhalt. Das Skript generiert einen `SHA256`-Hash Ihres API-Schlüssels, verschlüsselt ihn mit dem öffentlichen Schlüssel von Stripe und codiert ihn dann mit `Base64`. > #### Erforderliche Dienstprogramme > > Um das Skript ausführen zu können, müssen Sie zuerst die Dienstprogramme `sha256sum`, `gpg` und `base64` installieren. ```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. Führen Sie das Skript aus, indem Sie Ihren Drittanbieter-API Schlüssel in einfachen Anführungszeichen übergeben und dabei das Präfix `Bearer` oder `Basic` weglassen. Der Schlüssel muss exakt der Schlüssel sein, den Sie für tatsächliche Anforderungen an den Ziel-Endpoint verwenden, ohne Präfix. Das Skript erzeugt eine Datei mit dem Namen `encrypted_hashed_key.txt`. ```bash sh hash_encrypt_key.sh '' ``` ## Ihre Integration testen Um zu bestätigen, dass Ihre Integration mit dem Ziel-Endpoint korrekt funktioniert, initiieren Sie eine ForwardingRequest mit der von Ihnen erstellten PaymentMethod. In diesem Beispiel wird `pm_card_visa` als Zahlungsmethode verwendet. ```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 ``` ```cli stripe forwarding requests create \ --idempotency {{IDEMPOTENCYKEY_ID}} \ --payment-method=pm_card_visa \ --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}} \ -d "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 ``` ```ruby # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = Stripe::StripeClient.new("<>") request = client.v1.forwarding.requests.create( { payment_method: 'pm_card_visa', url: '{{DESTINATION ENDPOINT}}', request: { headers: [ { name: 'Destination-API-Key', value: '{{DESTINATION_API_KEY}}', }, { name: 'Destination-Idempotency-Key', value: '{{DESTINATION_IDEMPOTENCY_KEY}}', }, ], body: '{"amount":{"value":1000,"currency":"usd"},"paymentMethod":{"number":"","expiryMonth":"","expiryYear":"","cvc":"","holderName":""},"reference":"{{REFERENCE_ID}}"}', }, replacements: ['card_number', 'card_expiry', 'card_cvc', 'cardholder_name'], }, {idempotency_key: '{{IDEMPOTENCYKEY_ID}}'}, ) ``` ```python # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = StripeClient("<>") # For SDK versions 12.4.0 or lower, remove '.v1' from the following line. request = client.v1.forwarding.requests.create( { "payment_method": "pm_card_visa", "url": "{{DESTINATION ENDPOINT}}", "request": { "headers": [ {"name": "Destination-API-Key", "value": "{{DESTINATION_API_KEY}}"}, { "name": "Destination-Idempotency-Key", "value": "{{DESTINATION_IDEMPOTENCY_KEY}}", }, ], "body": "{\"amount\":{\"value\":1000,\"currency\":\"usd\"},\"paymentMethod\":{\"number\":\"\",\"expiryMonth\":\"\",\"expiryYear\":\"\",\"cvc\":\"\",\"holderName\":\"\"},\"reference\":\"{{REFERENCE_ID}}\"}", }, "replacements": ["card_number", "card_expiry", "card_cvc", "cardholder_name"], }, {"idempotency_key": "{{IDEMPOTENCYKEY_ID}}"}, ) ``` ```php // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys $stripe = new \Stripe\StripeClient('<>'); $request = $stripe->forwarding->requests->create( [ 'payment_method' => 'pm_card_visa', 'url' => '{{DESTINATION ENDPOINT}}', 'request' => [ 'headers' => [ [ 'name' => 'Destination-API-Key', 'value' => '{{DESTINATION_API_KEY}}', ], [ 'name' => 'Destination-Idempotency-Key', 'value' => '{{DESTINATION_IDEMPOTENCY_KEY}}', ], ], 'body' => '{"amount":{"value":1000,"currency":"usd"},"paymentMethod":{"number":"","expiryMonth":"","expiryYear":"","cvc":"","holderName":""},"reference":"{{REFERENCE_ID}}"}', ], 'replacements' => ['card_number', 'card_expiry', 'card_cvc', 'cardholder_name'], ], ['idempotency_key' => '{{IDEMPOTENCYKEY_ID}}'] ); ``` ```java // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys StripeClient client = new StripeClient("<>"); RequestCreateParams params = RequestCreateParams.builder() .setPaymentMethod("pm_card_visa") .setUrl("{{DESTINATION ENDPOINT}}") .setRequest( RequestCreateParams.Request.builder() .addHeader( RequestCreateParams.Request.Header.builder() .setName("Destination-API-Key") .setValue("{{DESTINATION_API_KEY}}") .build() ) .addHeader( RequestCreateParams.Request.Header.builder() .setName("Destination-Idempotency-Key") .setValue("{{DESTINATION_IDEMPOTENCY_KEY}}") .build() ) .setBody( "{\"amount\":{\"value\":1000,\"currency\":\"usd\"},\"paymentMethod\":{\"number\":\"\",\"expiryMonth\":\"\",\"expiryYear\":\"\",\"cvc\":\"\",\"holderName\":\"\"},\"reference\":\"{{REFERENCE_ID}}\"}" ) .build() ) .addReplacement(RequestCreateParams.Replacement.CARD_NUMBER) .addReplacement(RequestCreateParams.Replacement.CARD_EXPIRY) .addReplacement(RequestCreateParams.Replacement.CARD_CVC) .addReplacement(RequestCreateParams.Replacement.CARDHOLDER_NAME) .build(); RequestOptions requestOptions = RequestOptions.builder().setIdempotencyKey("{{IDEMPOTENCYKEY_ID}}").build(); // For SDK versions 29.4.0 or lower, remove '.v1()' from the following line. Request request = client.v1().forwarding().requests().create(params, requestOptions); ``` ```node // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys const stripe = require('stripe')('<>'); const request = await stripe.forwarding.requests.create( { payment_method: 'pm_card_visa', url: '{{DESTINATION ENDPOINT}}', request: { headers: [ { name: 'Destination-API-Key', value: '{{DESTINATION_API_KEY}}', }, { name: 'Destination-Idempotency-Key', value: '{{DESTINATION_IDEMPOTENCY_KEY}}', }, ], body: '{"amount":{"value":1000,"currency":"usd"},"paymentMethod":{"number":"","expiryMonth":"","expiryYear":"","cvc":"","holderName":""},"reference":"{{REFERENCE_ID}}"}', }, replacements: ['card_number', 'card_expiry', 'card_cvc', 'cardholder_name'], }, { idempotencyKey: '{{IDEMPOTENCYKEY_ID}}', } ); ``` ```go // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys sc := stripe.NewClient("<>") params := &stripe.ForwardingRequestCreateParams{ PaymentMethod: stripe.String("pm_card_visa"), URL: stripe.String("{{DESTINATION ENDPOINT}}"), Request: &stripe.ForwardingRequestCreateParams{ Headers: []*stripe.ForwardingRequestCreateRequestHeaderParams{ &stripe.ForwardingRequestCreateRequestHeaderParams{ Name: stripe.String("Destination-API-Key"), Value: stripe.String("{{DESTINATION_API_KEY}}"), }, &stripe.ForwardingRequestCreateRequestHeaderParams{ Name: stripe.String("Destination-Idempotency-Key"), Value: stripe.String("{{DESTINATION_IDEMPOTENCY_KEY}}"), }, }, Body: stripe.String("{\"amount\":{\"value\":1000,\"currency\":\"usd\"},\"paymentMethod\":{\"number\":\"\",\"expiryMonth\":\"\",\"expiryYear\":\"\",\"cvc\":\"\",\"holderName\":\"\"},\"reference\":\"{{REFERENCE_ID}}\"}"), }, Replacements: []*string{ stripe.String(stripe.ForwardingRequestReplacementCardNumber), stripe.String(stripe.ForwardingRequestReplacementCardExpiry), stripe.String(stripe.ForwardingRequestReplacementCardCVC), stripe.String(stripe.ForwardingRequestReplacementCardholderName), }, } params.SetIdempotencyKey("{{IDEMPOTENCYKEY_ID}}") result, err := sc.V1ForwardingRequests.Create(context.TODO(), params) ``` ```dotnet // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys var options = new Stripe.Forwarding.RequestCreateOptions { PaymentMethod = "pm_card_visa", Url = "{{DESTINATION ENDPOINT}}", Request = new Stripe.Forwarding.RequestRequestOptions { Headers = new List { new Stripe.Forwarding.RequestRequestHeaderOptions { Name = "Destination-API-Key", Value = "{{DESTINATION_API_KEY}}", }, new Stripe.Forwarding.RequestRequestHeaderOptions { Name = "Destination-Idempotency-Key", Value = "{{DESTINATION_IDEMPOTENCY_KEY}}", }, }, Body = "{\"amount\":{\"value\":1000,\"currency\":\"usd\"},\"paymentMethod\":{\"number\":\"\",\"expiryMonth\":\"\",\"expiryYear\":\"\",\"cvc\":\"\",\"holderName\":\"\"},\"reference\":\"{{REFERENCE_ID}}\"}", }, Replacements = new List { "card_number", "card_expiry", "card_cvc", "cardholder_name", }, }; var requestOptions = new RequestOptions { IdempotencyKey = "{{IDEMPOTENCYKEY_ID}}", }; var client = new StripeClient("<>"); var service = client.V1.Forwarding.Requests; Stripe.Forwarding.Request request = service.Create(options, requestOptions); ``` > Die Vault and Forward API behandelt jede Antwort vom Ziel-Endpoint als `success` und gibt `200` sowie den Antwortcode des Ziel-Endpoints im `response.body` zurück. Wenn der Ziel-Endpoint beispielsweisen den Antwortcode `400` an Stripe zurückgibt, antwortet die Vault and Forward API mit den Statuscode `200`. Der `response.body` enthält die `400`-Antwort des Ziel-Endpoints und eine Fehlermeldung. Testen Sie die API-Anfrage, die Sie an Ihren Ziel-Endpoint senden, separat, um sicherzustellen, dass keine Fehler auftreten. ### Ihre Anfrage-Logs im Dashboard anzeigen Sie können Anfrage Logs und Fehler im Zusammenhang mit der Vault and Forward API in [Workbench](https://docs.stripe.com/workbench/overview.md#request-logs) anzeigen. Darüber hinaus können Sie die [List API](https://docs.stripe.com/api/forwarding/forwarding_requests/list.md) verwenden, um die Logs von Stripe abzurufen. > Die Parameter `request.headers` und `request.body` in der eingehenden Anfrage sind verschlüsselt und werden im Dashboard als `encrypted_request` angezeigt.