# Zukünftige PayPal-Zahlungen einrichten Erfahren Sie, wie Sie PayPal-Details speichern und später Zahlungen Ihrer Kund/innen akzeptieren. Richten Sie zukünftige PayPal-Zahlungen ein, um Kundenzahlungsdaten für Abonnements und verzögerte Abbuchungen zu speichern und zukünftige Einkäufe zu optimieren. Erfahren Sie, wie Sie wiederkehrende Zahlungen mit PayPal über Stripe aktivieren und verwenden können. ## Wiederkehrende Zahlungen aktivieren Stripe aktiviert wiederkehrende Zahlungen für die meisten Nutzer/innen automatisch, wenn sie im Stripe-Dashboard [PayPal-Zahlungen aktivieren](https://docs.stripe.com/payments/paypal/activate.md). Aufgrund der Richtlinien und regionalen Einschränkungen von PayPal müssen einige Nutzer/innen wiederkehrende Zahlungen jedoch möglicherweise manuell aktivieren. Dies gilt auch für Nutzer/innen, die ihre Konten vor der Einführung der automatischen Aktivierung eingerichtet haben. So aktivieren Sie wiederkehrende Zahlungen manuell: 1. Gehen Sie zu Ihren [Einstellungen für Zahlungsmethoden](https://dashboard.stripe.com/settings/payment_methods). 1. Klicken Sie auf **PayPal** > **Aktivieren** im Abschnitt **Wiederkehrende Zahlungen**. Nachdem Sie wiederkehrende Zahlungen aktiviert haben, werden diese im Dashboard als **ausstehend** angezeigt. In der Regel dauert es bis zu fünf Werktage, bis Sie Zugriff erhalten. Wenn Ihnen Zugriff gewährt wird, stehen wiederkehrende Zahlungen in Ihren [PayPal-Einstellungen](https://dashboard.stripe.com/settings/payment_methods) zur Verfügung. In Testumgebungen sind wiederkehrende Zahlungen standardmäßig aktiviert. Sie können [Stripe Checkout](https://docs.stripe.com/payments/checkout.md) verwenden, um PayPal-Zahlungsinformationen vorab zu erfassen und den endgültigen Betrag bzw. das Zahlungsdatum später zu bestimmen. Mögliche Anwendungsszenarien: - Zahlungsmethoden in einer Wallet speichern, um zukünftige Einkäufe zu optimieren - Einziehen von Zuschlägen nach Abwicklung einer Dienstleistung - [Kostenlosen Testzeitraum für ein Abonnement starten](https://docs.stripe.com/billing/subscriptions/trials.md) ## Stripe einrichten [Serverseitig] Zunächst benötigen Sie ein Stripe-Konto. [Registrieren Sie sich jetzt](https://dashboard.stripe.com/register). Nutzen Sie unsere offiziellen Bibliotheken für den Zugriff auf die Stripe-API über Ihre Anwendung: #### 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' ``` ## Kund/innen vor Einrichtung erstellen oder abrufen [Serverseitig] Um eine PayPal-Zahlungsmethode für zukünftige Zahlungen zu wiederzuverwenden, muss sie einem *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments)-Objekt zugeordnet werden. Sie sollten ein Customer-Objekt erstellen, wenn Ihre Kund/innen ein Konto bei Ihrem Unternehmen anlegen. Wenn Sie die ID des Customer-Objekts mit Ihrer eigenen Darstellung einer Kundin/eines Kunden verknüpfen, können Sie später die gespeicherten Angaben zur Zahlungsmethode abrufen und verwenden. Wenn Ihre Kund/innen noch kein Konto erstellt haben, können Sie jetzt trotzdem ein Customer-Objekt erstellen und es zu einem späteren Zeitpunkt mit Ihrer eigenen internen Darstellung des Kundenkontos verknüpfen. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Checkout-Sitzung erstellen [Clientseitig] [Serverseitig] Bevor Sie Zahlungen per PayPal annehmen können, müssen Ihre Kund/innen Sie zum Verwenden ihrer PayPal-Konten für künftige Zahlungen über Stripe Checkout autorisieren. Fügen Sie Ihrer Website eine Schaltfläche zum Bezahlen hinzu, über die ein serverseitiger Endpoint aufgerufen wird, um eine [Checkout-Sitzung](https://docs.stripe.com/api/checkout/sessions.md) zu erstellen. ```html Checkout
``` Erstellen Sie eine Checkout-Sitzung im `setup`-Modus, um die erforderlichen Informationen zu erfassen. Leiten Sie Ihre Kundinnen/Kunden nach dem Erstellen der Checkout-Sitzung an die in der Antwort zurückgegebene [URL](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-url) weiter. #### curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"="paypal" \ -d mode=setup \ -d customer="{{CUSTOMER_ID}}" \ -d success_url="https://example.com/success?session_id={CHECKOUT_SESSION_ID}" \ ``` Wenn Ihre Kund/innen ihre Angaben zur Zahlungsmethode machen, werden sie an die `success_url` weitergeleitet. Hierbei handelt es sich um eine Seite auf Ihrer Website, auf der Ihre Kund/innen darüber informiert werden, dass ihre Zahlungsmethode erfolgreich gespeichert wurde. Stellen Sie die Sitzungs-ID auf Ihrer Erfolgsseite zur Verfügung, indem Sie die Vorlagenvariable `{CHECKOUT_SESSION_ID}` wie im obigen Beispiel in die `success_url` einfügen. > Verlassen Sie sich beim Erkennen von initiierten Zahlungen nicht allein auf die Weiterleitung auf die `success_url`: > > - Böswillige Nutzer/innen könnten, ohne zu bezahlen, direkt auf die `success_url` zugreifen und sich so unberechtigt Zugang zu Waren und Dienstleistungen verschaffen. - Nach einer erfolgreichen Zahlung schließen Kundinnen und Kunden möglicherweise ihren Browser-Tab, bevor sie zur `success_url` weitergeleitet werden. ## Zahlungsmethode abrufen [Serverseitig] Nachdem ein Kunde/eine Kundin seine/ihre Zahlungsdetails übermittelt hat, rufen Sie das [PaymentMethod](https://docs.stripe.com/payments/payment-methods.md)-Objekt ab. Eine *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) speichert die PayPal account-Informationen der Kundinnen und Kunden für spätere Zahlungen. Sie können die PaymentMethod synchron mit der `success_url` oder asynchron mithilfe von *Webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) abrufen. Ob Sie die PaymentMethod synchron oder asynchron abrufen, hängt von Ihrer Toleranz gegenüber Kaufabbrüchen ab, da Kund/innen in manchen Fällen nach erfolgreicher Zahlung nicht zur `success_url` weitergeleitet werden. (Sie können beispielsweise die Registerkarte im Browser schließen, bevor die Weiterleitung erfolgt ist.) Die Verarbeitung von Webhooks verhindert diese Form von Kaufabbrüchen in Ihrer Integration. #### Webhooks Verarbeiten Sie `checkout.session.completed`-Webhooks, die ein Session-Objekt enthalten. Hier erfahren Sie mehr über das [Einrichten von Webhooks](https://docs.stripe.com/webhooks.md). Beim folgenden Beispiel handelt es sich um eine `checkout.session.completed`-Antwort. ```json { "id": "evt_1Ep24XHssDVaQm2PpwS19Yt0", "object": "event", "api_version": "2019-03-14", "created": 1561420781, "data": { "object": { "id": "cs_test_MlZAaTXUMHjWZ7DcXjusJnDU4MxPalbtL5eYrmS2GKxqscDtpJq8QM0k", "object": "checkout.session", "billing_address_collection": null, "client_reference_id": null, "customer": null, "customer_email": null, "display_items": [], "mode": "setup","setup_intent": "seti_1EzVO3HssDVaQm2PJjXHmLlM", "submit_type": null, "subscription": null, "success_url": "https://example.com/success" } }, "livemode": false, "pending_webhooks": 1, "request": { "id": null, "idempotency_key": null }, "type": "checkout.session.completed" } ``` Beachten Sie den Wert des Schlüssels `setup_intent`, der die ID für das SetupIntent ist, das mit dem Bezahlvorgang erstellt wurde. Ein [SetupIntent](https://docs.stripe.com/payments/setup-intents.md) ist ein Objekt, das dazu dient, die Kundinnen und Kunden PayPal account-Informationen für zukünftige Zahlungen einzurichten. [Rufen Sie](https://docs.stripe.com/api/setup_intents/retrieve.md) das SetupIntent-Objekt mit der ID ab. Das zurückgegebene Objekt enthält die `payment_method`-ID. ```curl curl https://api.stripe.com/v1/setup_intents/seti_1EzVO3HssDVaQm2PJjXHmLlM \ -u "<>:" ``` #### Bestätigungs-URL Beziehen Sie die `session_id` aus der URL, wenn Nutzer/innen zu Ihrer Website zurückgeleitet werden, und [rufen Sie](https://docs.stripe.com/api/checkout/sessions/retrieve.md) das Sitzungsobjekt ab. ```curl curl -G https://api.stripe.com/v1/checkout/sessions/{{SESSION_ID}} \ -u "<>:" \ -d "expand[]=setup_intent" ``` > Um sicherzustellen, dass die `session_id` unter der URL verfügbar ist, fügen Sie beim Erstellen der Checkout-Sitzung die Vorlagenvariable `session_id={CHECKOUT_SESSION_ID}` in der `success_url` hinzu. Beachten Sie den SetupIntent, der während des Bezahlvorgangs erstellt wird. Ein [SetupIntent](https://docs.stripe.com/payments/setup-intents.md) ist ein Objekt, das dazu dient, die Kundin bzw. den Kunden PayPal account für zukünftige Zahlungen einzurichten. Das zurückgegebene Objekt enthält die `payment_method`-ID. ## Ereignisse nach Einrichtung verarbeiten [Serverseitig] Verwenden Sie eine Methode wie [Webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks), um zu bestätigen, dass die Abrechnungsvereinbarung kundenseitig ordnungsgemäß autorisiert wurde, statt sich darauf zu verlassen, dass Ihre Kunden und Kundinnen zur Zahlungsstatusseite zurückkehren. Wird eine Abrechnungsvereinbarung erfolgreich autorisiert, so gibt der SetupIntent das *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)-Ereignis [setup_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.succeeded) aus. Wenn Kundinnen/Kunden die Abrechnungsvereinbarung nicht erfolgreich autorisieren, gibt der SetupIntent das Webhook-Ereignis [setup_intent.setup_failed](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.setup_failed) aus und wechselt wieder in den Status `requires_payment_method`. Wenn ein Kunde/eine Kundin die Abrechnungsvereinbarung von seinem/ihren PayPal-Konto widerruft, wird [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated) ausgegeben. ## Integration testen Testen Sie Ihre PayPal-Integration mit Ihren [Test-API-Schlüsseln](https://docs.stripe.com/keys.md#test-live-modes), indem Sie die Weiterleitungsseite anzeigen. Sie können die erfolgreiche Zahlung testen, indem Sie die Zahlung auf der Weiterleitungsseite authentifizieren. Der PaymentIntent wechselt von `requires_action` zu `succeeded`. Um den Fall zu testen, in dem Nutzer/innen sich nicht authentifizieren können, verwenden Sie Ihre Test-API-Schlüssel und zeigen Sie die Weiterleitungsseite an. Klicken Sie auf der Weiterleitungsseite auf **Fail test payment** (Testzahlung fehlschlagen lassen). Der PaymentIntent wechselt von `requires_action` zu `requires_payment_method`. ## Zahlungsmethode für künftige Zahlungen verwenden [Serverseitig] Wenn Sie bereit sind, Kundinnen/Kunden Off-Session abzurechnen, verwenden Sie die *Kunden* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments)- und *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs)-IDs, um einen [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) zu erstellen. Um ein `paypal`-Instrument zu finden, das belastet werden soll, [listen](https://docs.stripe.com/api/payment_methods/list.md) Sie die Ihren Kundinnen/Kunden zugeordneten PaymentMethods auf. ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ -d type=paypal ``` Wenn Ihnen die Kunden-ID und die PaymentMethod-ID vorliegen, erstellen Sie eine PaymentIntent mit dem Betrag und der Währung der Zahlung. Legen Sie einige weitere Parameter fest, um die *Off-Session-Zahlung* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) durchzuführen: - Setzen Sie [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) auf `true`, um anzugeben, dass sich der Kunde oder die Kundin während dieses Zahlungsversuchs nicht in Ihrem Bezahlvorgang befindet. Das hat zur Folge, dass der PaymentIntent einen Fehler ausgibt, falls eine Authentifizierung erforderlich ist. - Legen Sie den Wert der Eigenschaft [confirm](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-confirm) des PaymentIntent auf `true` fest. Dadurch erfolgt die Bestätigung sofort, wenn der PaymentIntent erstellt wird. - Setzen Sie [payment_method](https://docs.stripe.com/api.md#create_payment_intent-payment_method) auf die ID der PaymentMethod und [Kunde/Kundin](https://docs.stripe.com/api.md#create_payment_intent-customer) auf die ID des Kunden/der Kundin. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=eur \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[]=paypal" \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d off_session=true \ -d confirm=true ``` ## Abbruch einer nutzerinitiierten Zahlungsmethode [Serverseitig] Eine Kundin/ein Kunde kann das Abo (Abrechnungsvereinbarung) über ihr/sein PayPal-Konto kündigen. Wenn dies geschieht, sendet Stripe einen [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated)-Webhook. Alle nachfolgenden PaymentIntents, die die gespeicherte Zahlungsmethode verwenden, schlagen fehl, bis Sie auf eine Zahlungsmethode mit aktiven Mandaten wechseln. Wenn Zahlungen für Abos fehlschlagen, ändert sich der Status gemäß den in Ihren [automatischen Einzugs-Einstellungen](https://docs.stripe.com/invoicing/automatic-collection.md) konfigurierten Abo-Status. Informieren Sie die Kundin/den Kunden über den Zahlungsausfall und [belasten Sie die Zahlung mit einer anderen Zahlungsmethode](https://docs.stripe.com/billing/subscriptions/overview.md#requires-payment-method). ## Optional: Gespeichertes PayPal-Konto entfernen [Serverseitig] Mit der API zum [Trennen](https://docs.stripe.com/api/payment_methods/detach.md) können Sie das gespeicherte PayPal-Konto eines Kunden/einer Kundin als Zahlungsmethode entfernen. Wenn Sie eine PayPal-Zahlungsmethode trennen, wird das [Mandat](https://docs.stripe.com/api/mandates.md) widerrufen und außerdem die PayPal API aufgerufen, um die zugehörige PayPal-Abrechnungsvereinbarung zu stornieren. ```curl curl -X POST https://api.stripe.com/v1/payment_methods/{{PAYMENT_METHOD_ID}}/detach \ -u "<>:" ``` # Direct API > This is a Direct API for when payment-ui is direct-api. View the full page at https://docs.stripe.com/payments/paypal/set-up-future-payments?payment-ui=direct-api. Verwenden Sie die [Setup Intents](https://docs.stripe.com/api/setup_intents.md), um die Details der PayPal-Zahlungsmethode im Voraus zu erfassen und den endgültigen Betrag oder das Zahlungsdatum zu einem späteren Zeitpunkt zu bestimmen. Dies ist nützlich für Folgendes: - Zahlungsmethoden in einer Wallet speichern, um zukünftige Einkäufe zu optimieren - Einziehen von Zuschlägen nach Abwicklung einer Dienstleistung - [Kostenlosen Testzeitraum für ein Abonnement starten](https://docs.stripe.com/billing/subscriptions/trials.md) ## Stripe einrichten [Serverseitig] Zunächst benötigen Sie ein Stripe-Konto. [Registrieren Sie sich jetzt](https://dashboard.stripe.com/register). Nutzen Sie unsere offiziellen Bibliotheken für den Zugriff auf die Stripe-API über Ihre Anwendung: #### 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' ``` ## Kund/innen vor Einrichtung erstellen oder abrufen [Serverseitig] Um eine PayPal-Zahlungsmethode für zukünftige Zahlungen zu wiederzuverwenden, muss sie einem *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments)-Objekt zugeordnet werden. Sie sollten ein Customer-Objekt erstellen, wenn Ihre Kund/innen ein Konto bei Ihrem Unternehmen anlegen. Wenn Sie die ID des Customer-Objekts mit Ihrer eigenen Darstellung einer Kundin/eines Kunden verknüpfen, können Sie später die gespeicherten Angaben zur Zahlungsmethode abrufen und verwenden. Wenn Ihre Kund/innen noch kein Konto erstellt haben, können Sie jetzt trotzdem ein Customer-Objekt erstellen und es zu einem späteren Zeitpunkt mit Ihrer eigenen internen Darstellung des Kundenkontos verknüpfen. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## SetupIntent erstellen [Serverseitig] Ein [SetupIntent](https://docs.stripe.com/api/setup_intents.md) ist ein Objekt, das Ihre Absicht darstellt, die Zahlungsmethode Ihrer Kundinnen/Kunden für zukünftige Zahlungen einzurichten, und die entsprechenden Schritte dokumentiert. Erstellen Sie einen [SetupIntent](https://docs.stripe.com/api/setup_intents.md) auf Ihrem Server, wobei die [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) auf `paypal` festgelegt sind, und geben Sie die [ID](https://docs.stripe.com/api/customers/object.md#customer_object-id) *des Kunden/der Kundin* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) an: ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=paypal" \ -d "payment_method_data[type]=paypal" ``` Das SetupIntent-Objekt enthält ein [client_secret](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret). Dies ist ein eindeutiger Schlüssel, den Sie auf der Client-Seite an Stripe übergeben müssen, um Ihre Käufer/innen an PayPal weiterzuleiten und Mandate zu autorisieren. ## Kund/innen weiterleiten [Clientseitig] Wenn Kundinnen/Kunden versuchen, ihr PayPal-Konto für zukünftige Zahlungen einzurichten, empfehlen wir die Verwendung von [Stripe.js](https://docs.stripe.com/js.md) zur Bestätigung des SetupIntent. Stripe.js ist unsere grundlegende JavaScript-Bibliothek für die Erstellung von Zahlungsabläufen. Sie verarbeitet automatisch komplexe Szenarien wie die nachfolgend beschriebene Weiterleitung und ermöglicht die Erweiterung Ihrer Integration durch zusätzliche Zahlungsmethoden in der Zukunft. Fügen Sie das Stripe.js-Skript auf Ihrer Bezahlseite ein, indem Sie es zum Header der HTML-Datei hinzufügen. ```html Checkout ``` Erstellen Sie einen Instanz von Stripe.js mit dem folgenden JavaScript auf Ihrer Bezahlseite. ```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('<>', {} ); ``` Um die Einrichtung auf der Client-Seite zu bestätigen, übergeben Sie das Client-Geheimnis des SetupIntent-Objekts, das Sie in Schritt 3 erstellt haben. Das Client-Geheimnis unterscheidet sich von Ihren API-Schlüsseln, die Stripe-API-Anfragen authentifizieren. Dennoch sollte sorgfältig damit umgegangen werden, da damit Zahlungen abgeschlossen werden können. Es darf nicht protokolliert, in URLs eingebettet oder Personen außer den Kundinnen und Kunden selbst zugänglich gemacht werden. ### PayPal-Einrichtung bestätigen Um die Verwendung des PayPal-Kontos für zukünftige Zahlungen zu genehmigen, werden Ihre Kundinnen/Kunden an eine PayPal-Zahlungsvereinbarungsseite weitergeleitet, der sie zustimmen müssen, bevor sie wieder zu Ihrer Website weitergeleitet werden. Verwenden Sie [stripe.confirmPayPalSetup](https://docs.stripe.com/js/setup_intents/confirm_paypal_setup), um die Weiterleitung von Ihrer Seite durchzuführen und die Einrichtung abzuschließen. Fügen Sie dieser Funktion eine `return_url` hinzu, um anzugeben, wohin Stripe die Nutzer/innen weiterleiten soll, nachdem sie die Abrechnungsvereinbarung auf der Website von PayPal bestätigt haben. ```javascript // Redirects away from the client const {error} = await stripe.confirmPayPalSetup( '{{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. } ``` Sie finden die ID der zahlenden Person und die ID der Abrechnungsvereinbarung im sich ergebenden [Mandat](https://docs.stripe.com/api/mandates/.md) unter der Eigenschaft [payment_method_details](https://docs.stripe.com/api/mandates/object.md#mandate_object-payment_method_details-paypal)). Die E-Mail-Adresse des Käufers/der Käuferin und die ID der zahlenden Person finden Sie auch in der Eigenschaft [PayPal](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-paypal) der [PaymentMethod](https://docs.stripe.com/api/payment_methods.md). | Feld | Wert | | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `payer_email` | Die E-Mail-Adresse der zahlenden Person in ihrem PayPal-Konto. | | `payer_id` | Eine eindeutige ID des PayPal-Kontos der zahlenden Person. | | `billing_agreement_id` | Die PayPal Billing Agreement ID (BAID). Dies ist eine von PayPal erzeugte ID, die das Mandat zwischen dem Unternehmen und der Kundin bzw. dem Kunden darstellt. | ## Webhooks überwachen [Serverseitig] Verwenden Sie eine Methode wie [Webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks), um zu bestätigen, dass die Abrechnungsvereinbarung kundenseitig ordnungsgemäß autorisiert wurde, statt sich darauf zu verlassen, dass Ihre Kunden und Kundinnen zur Zahlungsstatusseite zurückkehren. Wird eine Abrechnungsvereinbarung erfolgreich autorisiert, so gibt der SetupIntent das *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)-Ereignis [setup_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.succeeded) aus. Wenn Kundinnen/Kunden die Abrechnungsvereinbarung nicht erfolgreich autorisieren, gibt der SetupIntent das Webhook-Ereignis [setup_intent.setup_failed](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.setup_failed) aus und wechselt wieder in den Status `requires_payment_method`. Wenn ein Kunde/eine Kundin die Abrechnungsvereinbarung von seinem/ihren PayPal-Konto widerruft, wird [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated) ausgegeben. ## Off-Session-Zahlungen mit einer gespeicherten PayPal-Zahlungsmethode belasten [Serverseitig] Wenn Sie bereit sind, Kundinnen/Kunden Off-Session abzurechnen, verwenden Sie die *Kunden* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments)- und *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs)-IDs, um einen [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) zu erstellen. Um ein `paypal`-Instrument zu finden, das belastet werden soll, [listen](https://docs.stripe.com/api/payment_methods/list.md) Sie die Ihren Kundinnen/Kunden zugeordneten PaymentMethods auf. ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ -d type=paypal ``` Wenn Ihnen die Kunden-ID und die PaymentMethod-ID vorliegen, erstellen Sie eine PaymentIntent mit dem Betrag und der Währung der Zahlung. Legen Sie einige weitere Parameter fest, um die *Off-Session-Zahlung* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) durchzuführen: - Setzen Sie [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) auf `true`, um anzugeben, dass sich der Kunde oder die Kundin während dieses Zahlungsversuchs nicht in Ihrem Bezahlvorgang befindet. Das hat zur Folge, dass der PaymentIntent einen Fehler ausgibt, falls eine Authentifizierung erforderlich ist. - Legen Sie den Wert der Eigenschaft [confirm](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-confirm) des PaymentIntent auf `true` fest. Dadurch erfolgt die Bestätigung sofort, wenn der PaymentIntent erstellt wird. - Setzen Sie [payment_method](https://docs.stripe.com/api.md#create_payment_intent-payment_method) auf die ID der PaymentMethod und [Kunde/Kundin](https://docs.stripe.com/api.md#create_payment_intent-customer) auf die ID des Kunden/der Kundin. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=eur \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[]=paypal" \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d off_session=true \ -d confirm=true ``` ## On-Session-Zahlungen mit einer gespeicherten PayPal-Zahlungsmethode belasten [Clientseitig] Wenn Sie bereit sind, Kundinnen/Kunden On-Session abzurechnen, verwenden Sie die *Kunden* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments)- und *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs)-IDs, um einen [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) zu erstellen. Um ein zu belastendes `paypal`-Instrument zu finden, [listen Sie die PaymentMethods auf](https://docs.stripe.com/api/payment_methods/list.md), die mit Ihrem Kunden/Ihrer Kundin verbunden sind. ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ -d type=paypal ``` Wenn Ihnen die Kunden-ID und die PaymentMethod-ID vorliegen, erstellen Sie einen PaymentIntent mit dem Betrag und der Währung der Zahlung: ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=eur \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[]=paypal" \ -d payment_method={{PAYMENT_METHOD_ID}} ``` Rufen Sie mit dem Stripe.js SDK die Funktion [confirmPayPalPayment](https://docs.stripe.com/js/payment_intents/confirm_paypal_payment) auf, um den erstellten PaymentIntent auszuführen: ```javascript // Confirms the on-session payment const {error} = await stripe.confirmPayPalPayment( '{{PAYMENT_INTENT_CLIENT_SECRET}}', {payment_method: '{{PAYMENT_METHOD_ID}}'} // Note: return_url is not required here because the PayPal payment method was // previously set up using either a SetupIntent or a PaymentIntent with setup_future_usage ); if (error) { // Inform the customer that there was an error. } ``` > **Hinweis**: Der Parameter `return_url` ist für `confirmPayPalPayment` bedingt erforderlich: > > - Dies ist *nicht erforderlich*, wenn eine PayPal-Zahlungsmethode verwendet wird, die zuvor mit einem SetupIntent oder einem PaymentIntent mit setup_future_usage eingerichtet wurde. - In allen anderen Fällen ist dies *erforderlich*, einschließlich beim Erstellen einer neuen PayPal-Zahlungsmethode während der Sitzung. ## Abbruch einer nutzerinitiierten Zahlungsmethode [Serverseitig] Eine Kundin/ein Kunde kann das Abo (Abrechnungsvereinbarung) über ihr/sein PayPal-Konto kündigen. Wenn dies geschieht, sendet Stripe einen [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated)-Webhook. Alle nachfolgenden PaymentIntents, die die gespeicherte Zahlungsmethode verwenden, schlagen fehl, bis Sie auf eine Zahlungsmethode mit aktiven Mandaten wechseln. Wenn Zahlungen für Abos fehlschlagen, ändert sich der Status gemäß den in Ihren [automatischen Einzugs-Einstellungen](https://docs.stripe.com/invoicing/automatic-collection.md) konfigurierten Abo-Status. Informieren Sie die Kundin/den Kunden über den Zahlungsausfall und [belasten Sie die Zahlung mit einer anderen Zahlungsmethode](https://docs.stripe.com/billing/subscriptions/overview.md#requires-payment-method). ## Optional: Künftige PayPal-Zahlungen einrichten und eine Zahlung erfassen [Serverseitig] Es ist auch möglich, eine PayPal-Zahlungsmethode für die zukünftige Verwendung einzurichten und gleichzeitig eine Belastung vorzunehmen, wenn eine [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) erstellt wird. Legen Sie [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) auf `off_session` fest, um anzugeben, das Sie die Zahlungsmethode für die zukünftige Verwendung einrichten möchten. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=eur \ -d "payment_method_types[]=paypal" \ -d setup_future_usage=off_session ``` ## Optional: PayPal-Weiterleitung manuell handhaben [Serverseitig] Wir empfehlen, die Abwicklung von PayPal-Weiterleitungen und Abrechnungsautorisierungen auf Client-Seite mit `confirmPayPalSetup` Stripe.js zu überlassen. Wenn Sie Stripe.js verwenden, können Sie Ihre Integration viel einfacher um weitere Zahlungsmethoden erweitern. Sie können Ihre Kund/innen jedoch auch mithilfe der folgenden Schritte manuell an Ihren Server weiterleiten: Sie können den SetupIntent zur Erstellungszeit *bestätigen* (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), indem Sie `confirm: true` festlegen und Daten über das Mandat im Parameter [mandate_data](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-mandate_data) angeben. Bei der Bestätigung eines SetupIntent muss eine `return_url` bereitgestellt werden, um anzugeben, wohin Stripe den/die Nutzer/in weiterleiten soll, nachdem er/sie die Einrichtung auf der Website oder in der App von PayPal abgeschlossen hat. ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=paypal" \ -d "payment_method_data[type]=paypal" \ -d usage=off_session \ -d "mandate_data[customer_acceptance][type]=online" \ -d "mandate_data[customer_acceptance][online][ip_address]={{IP_ADDRESS}}" \ -d "mandate_data[customer_acceptance][online][user_agent]={{USER_AGENT}}" \ -d confirm=true \ --data-urlencode "return_url=https://example.com/setup/complete" ``` Überprüfen Sie, ob die SetupIntent den Status `requires_action` hat und ob `next_action` den Typ `redirect_to_url` hat. ```json { "id": "seti_1IQ9hjJJahOk1vSNevPWnhEN", "object": "setup_intent","status": "requires_action", "next_action": { "type": "redirect_to_url", "redirect_to_url": { "url": "https://hooks.stripe.com/...", "return_url": "https://example.com/setup/complete" } }, "application": null, "cancellation_reason": null, "client_secret": "seti_1IQ9hjJJahOk1vSNevPWnhEN_secret_J2EAlI0GQbQKV9tg7ITRcUWRBiAwvUV", "created": 1614597263, "customer": null, "description": null, "last_setup_error": null, "latest_attempt": "setatt_1IQ9hkJJahOk1vSN0rsCpnLI", "livemode": false, "mandate": null, "metadata": {}, "next_action": null, "on_behalf_of": null, "payment_method": "pm_1IQ9hjJJahOk1vSNDc5lQWia", "payment_method_options": {}, "payment_method_types": ["paypal"], "single_use_mandate": null, "usage": "off_session" } ``` Leiten Sie die Kund/innen an die in der Eigenschaft `next_action.redirect_to_url.url` angegebene URL weiter. Das folgende Codebeispiel ist nur eine Annäherung und kann sich vom Weiterleitungsverfahren in Ihrem Web-Framework unterscheiden. #### Ruby ```ruby if setup_intent.status == 'requires_action' && setup_intent.next_action.type == 'redirect_to_url' url = setup_intent.next_action.redirect_to_url.url redirect(url) end ``` Bei Abschluss des Autorisierungsvorgangs werden Kund/innen an die `return_url` weitergeleitet, die Sie in Schritt 1. konfiguriert haben. Die URL-Abfrageparameter `setup_intent` und `setup_intent_client_secret` sind darin enthalten, und Sie können, wie oben beschrieben, Ihre eigenen Abfrageparameter übergeben. ## Optional: Integration der Risikobibliothek für On-Session-Zahlungen manuell handhaben [Serverseitig] Wir empfehlen, Stripe.js zu nutzen, um On-Session-Zahlungen mit einer gespeicherten PayPal-Zahlungsmethode abzuwickeln, da es über eine integrierte [Fraudnet](https://developer.paypal.com/limited-release/fraudnet/)-Integration verfügt. Sie können PayPal PaymentIntents jedoch auch mit den folgenden Schritten manuell auf Ihrem Server bestätigen: Vernetzen Sie sich mit den Risikobibliotheken von PayPal ([Fraudnet](https://developer.paypal.com/limited-release/fraudnet/) für Web und [Magnes](https://developer.paypal.com/limited-release/magnes/) für Mobilgeräte), damit PayPal Risikodaten erfassen kann, wenn der/die Käufer/in bei der Zahlungssitzung anwensend ist. Dadurch lässt sich Betrug reduzieren und die Zahlungskonversion bei On-Session-Zahlungen erhöhen. Sie benötigen die Client-Metadaten-ID (auch bekannt als Risikokorrelations-ID), die zur Initialisierung der Bibliothek beim API-Aufruf an Stripe verwendet wird. Nachdem die Bibliothek geladen wurde, können Sie einen PaymentIntent mit der Client-Metadaten-ID, dem Betrag und der Währung der Zahlung erstellen: ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=eur \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[]=paypal" \ -d "payment_method_options[paypal][risk_correlation_id]={{RISK_CORRELATION_ID}}" \ -d confirm=true \ -d payment_method={{PAYMENT_METHOD_ID}} ``` Sie erhalten den Meldungscode `paypal_risk_correlation_id_missing`, wenn Sie bei der Bestätigung einer On-Session-Zahlung den Parameter [risk_correlation_id](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-payment_method_options-paypal-risk_correlation_id) nicht übergeben. ## Optional: Gespeichertes PayPal-Konto entfernen [Serverseitig] Mit der API zum [Trennen](https://docs.stripe.com/api/payment_methods/detach.md) können Sie das gespeicherte PayPal-Konto eines Kunden/einer Kundin als Zahlungsmethode entfernen. Wenn Sie eine PayPal-Zahlungsmethode trennen, wird das [Mandat](https://docs.stripe.com/api/mandates.md) widerrufen und außerdem die PayPal API aufgerufen, um die zugehörige PayPal-Abrechnungsvereinbarung zu stornieren. ```curl curl -X POST https://api.stripe.com/v1/payment_methods/{{PAYMENT_METHOD_ID}}/detach \ -u "<>:" ``` # iOS > This is a iOS for when payment-ui is mobile and platform is ios. View the full page at https://docs.stripe.com/payments/paypal/set-up-future-payments?payment-ui=mobile&platform=ios. Verwenden Sie die [Setup Intents](https://docs.stripe.com/api/setup_intents.md), um die Details der PayPal-Zahlungsmethode im Voraus zu erfassen und den endgültigen Betrag oder das Zahlungsdatum zu einem späteren Zeitpunkt zu bestimmen. Dies ist nützlich für Folgendes: ## Kundinnen/Kunden erstellen oder abrufen [Serverseitig] Um die Zahlungsmethode PayPal für künftige Zahlungen zu hinterlegen, müssen Sie diese den gewünschten *Kund/innen* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) zuordnen. Sie sollten ein Customer-Objekt erstellen, wenn Ihre Kund/innen ein Konto bei Ihrem Unternehmen anlegen. Wenn Sie die ID des Customer-Objekts mit Ihrer eigenen Darstellung eines/einer Kund/in verknüpfen, können Sie später die gespeicherten Angaben zur Zahlungsmethode abrufen und verwenden. Wenn Ihre Kund/innen noch kein Konto erstellt haben, können Sie jetzt trotzdem ein Customer-Objekt erstellen und es zu einem späteren Zeitpunkt mit Ihrer eigenen internen Darstellung des Kundenkontos verknüpfen. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## SetupIntent erstellen [Serverseitig] Ein [SetupIntent](https://docs.stripe.com/api/setup_intents.md) ist ein Objekt, das Ihre Absicht darstellt, die Zahlungsmethode Ihrer Kundinnen/Kunden für zukünftige Zahlungen einzurichten, und die entsprechenden Schritte dokumentiert. Erstellen Sie einen [SetupIntent](https://docs.stripe.com/api/setup_intents.md) auf Ihrem Server, wobei die [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) auf `paypal` festgelegt sind, und geben Sie die [ID](https://docs.stripe.com/api/customers/object.md#customer_object-id) *des Kunden/der Kundin* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) an: ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=paypal" \ -d "payment_method_data[type]=paypal" ``` Das SetupIntent-Objekt enthält ein [client_secret](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret). Dies ist ein eindeutiger Schlüssel, den Sie auf der Client-Seite an Stripe übergeben müssen, um Ihre Käufer/innen an PayPal weiterzuleiten und Mandate zu autorisieren. ## Angaben zur Zahlungsmethode erfassen [Clientseitig] #### Swift ```swift // PayPal doesn't require additional parameters so we only need to pass the initialized // STPPaymentMethodPayPalParams instance to STPPaymentMethodParams let payPal = STPPaymentMethodPayPalParams() let paymentMethodParams = STPPaymentMethodParams(payPal: payPal, billingDetails: nil, metadata: nil) ``` ## Zahlung an Stripe senden [Clientseitig] Rufen Sie das Client-Geheimnis von der erstellten SetupIntent ab und rufen Sie [STPPaymentHandler confirmSetupIntent](https://stripe.dev/stripe-ios/stripe-payments/Classes/STPPaymentHandler.html#/c:objc\(cs\)STPPaymentHandler\(im\)confirmSetupIntent:withAuthenticationContext:completion:). auf. Dies entspricht einer Webansicht, über die die Kundinnen/Kunden die Zahlung in PayPal durchführen können. Danach wird der Completion-Block mit dem Ergebnis der Zahlung aufgerufen. #### Swift ```swift let setupIntentParams = STPSetupIntentConfirmParams(clientSecret: setupIntentClientSecret) setupIntentParams.paymentMethodParams = paymentMethodParams setupIntentParams.returnURL = "payments-example://stripe-redirect" STPPaymentHandler.shared().confirmSetupIntent(withParams: setupIntentParams, authenticationContext: self) { (handlerStatus, setupIntent, error) in switch handlerStatus { case .succeeded: // Setup succeeded case .canceled: // Setup was canceled case .failed: // Setup failed @unknown default: fatalError() } } ``` ## Webhooks überwachen [Serverseitig] Verwenden Sie eine Methode wie [Webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks), um zu bestätigen, dass die Abrechnungsvereinbarung kundenseitig ordnungsgemäß autorisiert wurde, statt sich darauf zu verlassen, dass Ihre Kunden und Kundinnen zur Zahlungsstatusseite zurückkehren. Wird eine Abrechnungsvereinbarung erfolgreich autorisiert, so gibt der SetupIntent das *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)-Ereignis [setup_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.succeeded) aus. Wenn Kundinnen/Kunden die Abrechnungsvereinbarung nicht erfolgreich autorisieren, gibt der SetupIntent das Webhook-Ereignis [setup_intent.setup_failed](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.setup_failed) aus und wechselt wieder in den Status `requires_payment_method`. Wenn ein Kunde/eine Kundin die Abrechnungsvereinbarung von seinem/ihren PayPal-Konto widerruft, wird [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated) ausgegeben. ## Off-Session-Zahlungen mit einer gespeicherten PayPal-Zahlungsmethode belasten [Serverseitig] Wenn Sie bereit sind, Kundinnen/Kunden Off-Session abzurechnen, verwenden Sie die *Kunden* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments)- und *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs)-IDs, um einen [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) zu erstellen. Um ein `paypal`-Instrument zu finden, das belastet werden soll, [listen](https://docs.stripe.com/api/payment_methods/list.md) Sie die Ihren Kundinnen/Kunden zugeordneten PaymentMethods auf. ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ -d type=paypal ``` Wenn Ihnen die Kunden-ID und die PaymentMethod-ID vorliegen, erstellen Sie eine PaymentIntent mit dem Betrag und der Währung der Zahlung. Legen Sie einige weitere Parameter fest, um die *Off-Session-Zahlung* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) durchzuführen: - Setzen Sie [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) auf `true`, um anzugeben, dass sich der Kunde oder die Kundin während dieses Zahlungsversuchs nicht in Ihrem Bezahlvorgang befindet. Das hat zur Folge, dass der PaymentIntent einen Fehler ausgibt, falls eine Authentifizierung erforderlich ist. - Legen Sie den Wert der Eigenschaft [confirm](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-confirm) des PaymentIntent auf `true` fest. Dadurch erfolgt die Bestätigung sofort, wenn der PaymentIntent erstellt wird. - Setzen Sie [payment_method](https://docs.stripe.com/api.md#create_payment_intent-payment_method) auf die ID der PaymentMethod und [Kunde/Kundin](https://docs.stripe.com/api.md#create_payment_intent-customer) auf die ID des Kunden/der Kundin. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=eur \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[]=paypal" \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d off_session=true \ -d confirm=true ``` ## Abbruch einer nutzerinitiierten Zahlungsmethode [Serverseitig] Eine Kundin/ein Kunde kann das Abo (Abrechnungsvereinbarung) über ihr/sein PayPal-Konto kündigen. Wenn dies geschieht, sendet Stripe einen [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated)-Webhook. Alle nachfolgenden PaymentIntents, die die gespeicherte Zahlungsmethode verwenden, schlagen fehl, bis Sie auf eine Zahlungsmethode mit aktiven Mandaten wechseln. Wenn Zahlungen für Abos fehlschlagen, ändert sich der Status gemäß den in Ihren [automatischen Einzugs-Einstellungen](https://docs.stripe.com/invoicing/automatic-collection.md) konfigurierten Abo-Status. Informieren Sie die Kundin/den Kunden über den Zahlungsausfall und [belasten Sie die Zahlung mit einer anderen Zahlungsmethode](https://docs.stripe.com/billing/subscriptions/overview.md#requires-payment-method). ## Optional: Künftige PayPal-Zahlungen einrichten und eine Zahlung erfassen [Serverseitig] Es ist auch möglich, eine PayPal-Zahlungsmethode für die zukünftige Verwendung einzurichten und gleichzeitig eine Belastung vorzunehmen, wenn eine [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) erstellt wird. Legen Sie [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) auf `off_session` fest, um anzugeben, das Sie die Zahlungsmethode für die zukünftige Verwendung einrichten möchten. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=eur \ -d "payment_method_types[]=paypal" \ -d setup_future_usage=off_session ``` ## Optional: Integration der Risikobibliothek für On-Session-Zahlungen manuell handhaben [Serverseitig] Wir empfehlen, Stripe.js zu nutzen, um On-Session-Zahlungen mit einer gespeicherten PayPal-Zahlungsmethode abzuwickeln, da es über eine integrierte [Fraudnet](https://developer.paypal.com/limited-release/fraudnet/)-Integration verfügt. Sie können PayPal PaymentIntents jedoch auch mit den folgenden Schritten manuell auf Ihrem Server bestätigen: Vernetzen Sie sich mit den Risikobibliotheken von PayPal ([Fraudnet](https://developer.paypal.com/limited-release/fraudnet/) für Web und [Magnes](https://developer.paypal.com/limited-release/magnes/) für Mobilgeräte), damit PayPal Risikodaten erfassen kann, wenn der/die Käufer/in bei der Zahlungssitzung anwensend ist. Dadurch lässt sich Betrug reduzieren und die Zahlungskonversion bei On-Session-Zahlungen erhöhen. Sie benötigen die Client-Metadaten-ID (auch bekannt als Risikokorrelations-ID), die zur Initialisierung der Bibliothek beim API-Aufruf an Stripe verwendet wird. Nachdem die Bibliothek geladen wurde, können Sie einen PaymentIntent mit der Client-Metadaten-ID, dem Betrag und der Währung der Zahlung erstellen: ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=eur \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[]=paypal" \ -d "payment_method_options[paypal][risk_correlation_id]={{RISK_CORRELATION_ID}}" \ -d confirm=true \ -d payment_method={{PAYMENT_METHOD_ID}} ``` Sie erhalten den Meldungscode `paypal_risk_correlation_id_missing`, wenn Sie bei der Bestätigung einer On-Session-Zahlung den Parameter [risk_correlation_id](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-payment_method_options-paypal-risk_correlation_id) nicht übergeben. ## Optional: Gespeichertes PayPal-Konto entfernen [Serverseitig] Mit der API zum [Trennen](https://docs.stripe.com/api/payment_methods/detach.md) können Sie das gespeicherte PayPal-Konto eines Kunden/einer Kundin als Zahlungsmethode entfernen. Wenn Sie eine PayPal-Zahlungsmethode trennen, wird das [Mandat](https://docs.stripe.com/api/mandates.md) widerrufen und außerdem die PayPal API aufgerufen, um die zugehörige PayPal-Abrechnungsvereinbarung zu stornieren. ```curl curl -X POST https://api.stripe.com/v1/payment_methods/{{PAYMENT_METHOD_ID}}/detach \ -u "<>:" ``` # Android > This is a Android for when payment-ui is mobile and platform is android. View the full page at https://docs.stripe.com/payments/paypal/set-up-future-payments?payment-ui=mobile&platform=android. Verwenden Sie die [Setup Intents](https://docs.stripe.com/api/setup_intents.md), um die Details der PayPal-Zahlungsmethode im Voraus zu erfassen und den endgültigen Betrag oder das Zahlungsdatum zu einem späteren Zeitpunkt zu bestimmen. Dies ist nützlich für Folgendes: - Zahlungsmethoden in einer Wallet speichern, um zukünftige Einkäufe zu optimieren - Einziehen von Zuschlägen nach Abwicklung einer Dienstleistung - [Kostenlosen Testzeitraum für ein Abonnement starten](https://docs.stripe.com/billing/subscriptions/trials.md) ## Stripe einrichten [Serverseitig] [Clientseitig] Zunächst benötigen Sie ein Stripe-Konto. [Registrieren Sie sich jetzt](https://dashboard.stripe.com/register). ### Serverseitig Diese Integration erfordert Endpoints auf Ihrem Server, die mit der Stripe-API kommunizieren können. Nutzen Sie diese offiziellen Bibliotheken für den Zugriff auf die Stripe-API von Ihrem Server aus: #### 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' ``` ### Clientseitig Das [Stripe Android SDK](https://github.com/stripe/stripe-android) ist Open Source und [vollständig dokumentiert](https://stripe.dev/stripe-android/). Um das SDK zu installieren, fügen Sie `stripe-android` in den Block `dependencies` Ihrer [app/build.gradle](https://developer.android.com/studio/build/dependencies)-Datei ein: #### Kotlin ```kotlin plugins { id("com.android.application") } android { ... } dependencies { // ... // Stripe Android SDK implementation("com.stripe:stripe-android:23.2.0") // Include the financial connections SDK to support US bank account as a payment method implementation("com.stripe:financial-connections:23.2.0") } ``` > Details zur aktuellen SDK-Version und zu vorherigen Versionen finden Sie auf der Seite [Releases](https://github.com/stripe/stripe-android/releases) auf GitHub. Um bei Veröffentlichung eines neuen Release eine Benachrichtigung zu erhalten, [beobachten Sie Veröffentlichungen für das jeweilige Repository](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/configuring-notifications#configuring-your-watch-settings-for-an-individual-repository). Konfigurieren Sie das SDK mit Ihrem [veröffentlichbaren Schlüssel](https://dashboard.stripe.com/apikeys) von Stripe so, dass dieser Anfragen an die API stellen kann, wie beispielsweise in Ihrer Unterklasse `Application`: #### Kotlin ```kotlin import com.stripe.android.PaymentConfiguration class MyApp : Application() { override fun onCreate() { super.onCreate() PaymentConfiguration.init( applicationContext, "<>" ) } } ``` > Verwenden Sie Ihre [Testschlüssel](https://docs.stripe.com/keys.md#obtain-api-keys) beim Testen und Entwickeln Ihrer App und Ihre [Live-Modus](https://docs.stripe.com/keys.md#test-live-modes)-Schlüssel beim Veröffentlichen Ihrer App. Stripe-Beispiele nutzen auch [OkHttp](https://github.com/square/okhttp) und [GSON](https://github.com/google/gson), um HTTP-Anfragen an einen Server zu stellen. ## Kundinnen/Kunden erstellen oder abrufen [Serverseitig] Um die Zahlungsmethode PayPal für künftige Zahlungen zu hinterlegen, müssen Sie diese den gewünschten *Kund/innen* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) zuordnen. Sie sollten ein Customer-Objekt erstellen, wenn Ihre Kund/innen ein Konto bei Ihrem Unternehmen anlegen. Wenn Sie die ID des Customer-Objekts mit Ihrer eigenen Darstellung eines/einer Kund/in verknüpfen, können Sie später die gespeicherten Angaben zur Zahlungsmethode abrufen und verwenden. Wenn Ihre Kund/innen noch kein Konto erstellt haben, können Sie jetzt trotzdem ein Customer-Objekt erstellen und es zu einem späteren Zeitpunkt mit Ihrer eigenen internen Darstellung des Kundenkontos verknüpfen. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## SetupIntent erstellen [Serverseitig] Ein [SetupIntent](https://docs.stripe.com/api/setup_intents.md) ist ein Objekt, das Ihre Absicht darstellt, die Zahlungsmethode Ihrer Kundinnen/Kunden für zukünftige Zahlungen einzurichten, und die entsprechenden Schritte dokumentiert. Erstellen Sie einen [SetupIntent](https://docs.stripe.com/api/setup_intents.md) auf Ihrem Server, wobei die [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) auf `paypal` festgelegt sind, und geben Sie die [ID](https://docs.stripe.com/api/customers/object.md#customer_object-id) *des Kunden/der Kundin* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) an: ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=paypal" \ -d "payment_method_data[type]=paypal" ``` Das SetupIntent-Objekt enthält ein [client_secret](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret). Dies ist ein eindeutiger Schlüssel, den Sie auf der Client-Seite an Stripe übergeben müssen, um Ihre Käufer/innen an PayPal weiterzuleiten und Mandate zu autorisieren. ## Angaben zur Zahlungsmethode an Stripe senden [Clientseitig] Rufen Sie das Client-Geheimnis aus dem von Ihnen erstellten SetupIntent ab und rufen Sie [PaymentLauncher bestätigen](https://stripe.dev/stripe-android/payments-core/com.stripe.android.payments.paymentlauncher/-payment-launcher/confirm.html) auf. Dies entspricht einer Webansicht, über die die Kundinnen/Kunden die Einrichtung mit PayPal durchführen können. Nach Abschluss wird der angegebene `PaymentResultCallback` mit dem Ergebnis der Zahlung aufgerufen. #### Kotlin ```kotlin class PayPalSetupActivity : AppCompatActivity() { // ... private val paymentLauncher: PaymentLauncher by lazy { val paymentConfiguration = PaymentConfiguration.getInstance(this) PaymentLauncher.create( activity = this, publishableKey = paymentConfiguration.publishableKey, stripeAccountId = paymentConfiguration.stripeAccountId, callback = ::onPaymentResult, ) } override fun onCreate(savedInstanceState: Bundle?) { // … startCheckout() } private fun startCheckout() { // Create a SetupIntent on your backend and return the client_secret here val setupIntentClientSecret = // … val payPalPayParams = PaymentMethodCreateParams.createPayPal() val confirmParams = ConfirmSetupIntentParams.create( paymentMethodCreateParams = payPalPayParams, clientSecret = setupIntentClientSecret, // Add a mandate ID or MandateDataParams… ) paymentLauncher.confirm(confirmParams) } private fun onPaymentResult(paymentResult: PaymentResult) { // Handle the setup result… } } ``` ## Webhooks überwachen [Serverseitig] Verwenden Sie eine Methode wie [Webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks), um zu bestätigen, dass die Abrechnungsvereinbarung kundenseitig ordnungsgemäß autorisiert wurde, statt sich darauf zu verlassen, dass Ihre Kunden und Kundinnen zur Zahlungsstatusseite zurückkehren. Wird eine Abrechnungsvereinbarung erfolgreich autorisiert, so gibt der SetupIntent das *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)-Ereignis [setup_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.succeeded) aus. Wenn Kundinnen/Kunden die Abrechnungsvereinbarung nicht erfolgreich autorisieren, gibt der SetupIntent das Webhook-Ereignis [setup_intent.setup_failed](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.setup_failed) aus und wechselt wieder in den Status `requires_payment_method`. Wenn ein Kunde/eine Kundin die Abrechnungsvereinbarung von seinem/ihren PayPal-Konto widerruft, wird [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated) ausgegeben. ## Off-Session-Zahlungen mit einer gespeicherten PayPal-Zahlungsmethode belasten [Serverseitig] Wenn Sie bereit sind, Kundinnen/Kunden Off-Session abzurechnen, verwenden Sie die *Kunden* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments)- und *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs)-IDs, um einen [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) zu erstellen. Um ein `paypal`-Instrument zu finden, das belastet werden soll, [listen](https://docs.stripe.com/api/payment_methods/list.md) Sie die Ihren Kundinnen/Kunden zugeordneten PaymentMethods auf. ```curl curl -G https://api.stripe.com/v1/payment_methods \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ -d type=paypal ``` Wenn Ihnen die Kunden-ID und die PaymentMethod-ID vorliegen, erstellen Sie eine PaymentIntent mit dem Betrag und der Währung der Zahlung. Legen Sie einige weitere Parameter fest, um die *Off-Session-Zahlung* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) durchzuführen: - Setzen Sie [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) auf `true`, um anzugeben, dass sich der Kunde oder die Kundin während dieses Zahlungsversuchs nicht in Ihrem Bezahlvorgang befindet. Das hat zur Folge, dass der PaymentIntent einen Fehler ausgibt, falls eine Authentifizierung erforderlich ist. - Legen Sie den Wert der Eigenschaft [confirm](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-confirm) des PaymentIntent auf `true` fest. Dadurch erfolgt die Bestätigung sofort, wenn der PaymentIntent erstellt wird. - Setzen Sie [payment_method](https://docs.stripe.com/api.md#create_payment_intent-payment_method) auf die ID der PaymentMethod und [Kunde/Kundin](https://docs.stripe.com/api.md#create_payment_intent-customer) auf die ID des Kunden/der Kundin. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=eur \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[]=paypal" \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d off_session=true \ -d confirm=true ``` ## Abbruch einer nutzerinitiierten Zahlungsmethode [Serverseitig] Eine Kundin/ein Kunde kann das Abo (Abrechnungsvereinbarung) über ihr/sein PayPal-Konto kündigen. Wenn dies geschieht, sendet Stripe einen [mandate.updated](https://docs.stripe.com/api/events/types.md#event_types-mandate.updated)-Webhook. Alle nachfolgenden PaymentIntents, die die gespeicherte Zahlungsmethode verwenden, schlagen fehl, bis Sie auf eine Zahlungsmethode mit aktiven Mandaten wechseln. Wenn Zahlungen für Abos fehlschlagen, ändert sich der Status gemäß den in Ihren [automatischen Einzugs-Einstellungen](https://docs.stripe.com/invoicing/automatic-collection.md) konfigurierten Abo-Status. Informieren Sie die Kundin/den Kunden über den Zahlungsausfall und [belasten Sie die Zahlung mit einer anderen Zahlungsmethode](https://docs.stripe.com/billing/subscriptions/overview.md#requires-payment-method). ## Optional: Künftige PayPal-Zahlungen einrichten und eine Zahlung erfassen [Serverseitig] Es ist auch möglich, eine PayPal-Zahlungsmethode für die zukünftige Verwendung einzurichten und gleichzeitig eine Belastung vorzunehmen, wenn eine [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) erstellt wird. Legen Sie [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) auf `off_session` fest, um anzugeben, das Sie die Zahlungsmethode für die zukünftige Verwendung einrichten möchten. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=eur \ -d "payment_method_types[]=paypal" \ -d setup_future_usage=off_session ``` ## Optional: Integration der Risikobibliothek für On-Session-Zahlungen manuell handhaben [Serverseitig] Wir empfehlen, Stripe.js zu nutzen, um On-Session-Zahlungen mit einer gespeicherten PayPal-Zahlungsmethode abzuwickeln, da es über eine integrierte [Fraudnet](https://developer.paypal.com/limited-release/fraudnet/)-Integration verfügt. Sie können PayPal PaymentIntents jedoch auch mit den folgenden Schritten manuell auf Ihrem Server bestätigen: Vernetzen Sie sich mit den Risikobibliotheken von PayPal ([Fraudnet](https://developer.paypal.com/limited-release/fraudnet/) für Web und [Magnes](https://developer.paypal.com/limited-release/magnes/) für Mobilgeräte), damit PayPal Risikodaten erfassen kann, wenn der/die Käufer/in bei der Zahlungssitzung anwensend ist. Dadurch lässt sich Betrug reduzieren und die Zahlungskonversion bei On-Session-Zahlungen erhöhen. Sie benötigen die Client-Metadaten-ID (auch bekannt als Risikokorrelations-ID), die zur Initialisierung der Bibliothek beim API-Aufruf an Stripe verwendet wird. Nachdem die Bibliothek geladen wurde, können Sie einen PaymentIntent mit der Client-Metadaten-ID, dem Betrag und der Währung der Zahlung erstellen: ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=eur \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[]=paypal" \ -d "payment_method_options[paypal][risk_correlation_id]={{RISK_CORRELATION_ID}}" \ -d confirm=true \ -d payment_method={{PAYMENT_METHOD_ID}} ``` Sie erhalten den Meldungscode `paypal_risk_correlation_id_missing`, wenn Sie bei der Bestätigung einer On-Session-Zahlung den Parameter [risk_correlation_id](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-payment_method_options-paypal-risk_correlation_id) nicht übergeben. ## Optional: Gespeichertes PayPal-Konto entfernen [Serverseitig] Mit der API zum [Trennen](https://docs.stripe.com/api/payment_methods/detach.md) können Sie das gespeicherte PayPal-Konto eines Kunden/einer Kundin als Zahlungsmethode entfernen. Wenn Sie eine PayPal-Zahlungsmethode trennen, wird das [Mandat](https://docs.stripe.com/api/mandates.md) widerrufen und außerdem die PayPal API aufgerufen, um die zugehörige PayPal-Abrechnungsvereinbarung zu stornieren. ```curl curl -X POST https://api.stripe.com/v1/payment_methods/{{PAYMENT_METHOD_ID}}/detach \ -u "<>:" ```