# Migrieren Sie zu den Payment Intents und Payment Methods APIs

Erfahren Sie, wie Sie von der Sources API und der Tokens API zur Payment Methods API wechseln.

Die [Payment Methods API](https://docs.stripe.com/api/payment_methods.md) ersetzt die vorhandenen [Token](https://docs.stripe.com/api/tokens.md)- und [Sources](https://docs.stripe.com/api/sources.md) APIs als empfohlene Option zum Erfassen und Speichern von Zahlungsinformationen für Integrationen. Sie arbeitet mit der [Payment Intents API](https://docs.stripe.com/payments/payment-intents.md) zusammen, um Zahlungen für eine Vielzahl von Zahlungsmethoden zu erstellen.

Wir planen, die Unterstützung der Sources API für Kartenzahlungen einzustellen. Wenn Sie momentan Kartenzahlungsmethoden über die Sources API abwickeln, müssen Sie diese auf die Payment Intents API migrieren. Wir senden Ihnen per E-Mail weitere Informationen zur Einstellung der Unterstützung für die Sources API.

## Auf die Payment Intents API migrieren

Um Ihre Integration zu migrieren, aktualisieren Sie Ihren Server und Ihr Frontend, um die [Payment Intents API](https://docs.stripe.com/api/payment_intents.md) zu verwenden. Typische Integrationsoptionen umfassen Folgendes:

- Führen Sie für Ihren Zahlungsablauf eine Weiterleitung zu [Stripe Checkout](https://docs.stripe.com/payments/checkout.md) durch.
- Verwenden Sie das [Payment Element](https://docs.stripe.com/payments/payment-element.md) von Stripe auf Ihrer eigenen Zahlungsseite.
- Erstellen Sie ein benutzerdefiniertes Formular und verwenden Sie das Stripe JS SDK, um die Zahlung abzuschließen.

Wenn Sie Checkout oder das Payment Element verwenden, können Sie die meisten Zahlungsmethoden über das Stripe-Dashboard hinzufügen und verwalten, ohne Codeänderungen vorzunehmen.

Spezifische Informationen zur Integration einer Kartenzahlungsmethode mithilfe der Payment Methods API finden Sie in den Anweisungen für diese Zahlungsmethode in der [Dokumentation zu den Zahlungsmethoden](https://docs.stripe.com/payments/payment-methods/overview.md). Die folgende Tabelle bietet einen allgemeinen Vergleich der verschiedenen Zahlungsarten.

| Alte Integration | Stripe Checkout | Payment Element | Benutzerdefiniertes Formular |
| --- | --- | --- | --- |
|  | Geringer Integrationsaufwand | Mittlerer Integrationsaufwand | Hoher Integrationsaufwand |
| Erstellen Sie eine Quelle im Frontend oder auf dem Server. | Erstellen Sie eine `CheckoutSession` auf dem Server. | Erstellen Sie einen `PaymentIntent` auf dem Server. | Erstellen Sie einen `PaymentIntent` auf dem Server. |
| Autorisieren Sie die Zahlung, indem Sie ein Widget laden oder zu einem Drittanbieter weiterleiten. | Nicht erforderlich | Übergeben Sie das Client-Geheimnis an das Frontend und verwenden Sie das Stripe JS SDK, um ein Payment Element zu rendern und die Zahlung abzuschließen. | Übergeben Sie das Client-Geheimnis an das Frontend, verwenden Sie Ihr eigenes Formular, um Details von Ihrer Kundin oder Ihrem Kunden zu erfassen, und schließen Sie die Zahlung gemäß der Zahlungsmethode ab. |
| Überprüfen Sie, ob von der Quelle abgebucht werden kann, und belasten Sie die Quelle. | Nicht erforderlich | Nicht erforderlich | Nicht erforderlich |
| Bestätigen Sie mit dem Webhook `charge.succeeded`, dass die Abbuchung asynchron erfolgreich durchgeführt wurde. | Bestätigen Sie mit dem Webhook `payment_intent.succeeded`, dass die Checkout-Sitzung erfolgreich durchgeführt wurde. | Bestätigen Sie mit dem Webhook `payment_intent.succeeded`, dass der PaymentIntent erfolgreich war. | Bestätigen Sie mit dem Webhook `payment_intent.succeeded`, dass der PaymentIntent erfolgreich war. |

> #### Weitere Nutzung von Charge-Objekten
> 
> Ein `PaymentIntent`-Objekt stellt eine Zahlung in der neuen Integration dar und erstellt eine `Abbuchung`, wenn Sie die Zahlung im Frontend bestätigen. Wenn Sie zuvor Verweise auf die `Abbuchung` gespeichert haben, können Sie dies weiterhin tun, indem Sie die `Abbuchungs`-ID aus dem `PaymentIntent` abrufen, nachdem die Kundin oder der Kunde die Zahlung abgeschlossen hat. Wir empfehlen jedoch, auch die `PaymentIntent`-ID zu speichern.

### Zahlungsstatus überprüfen

Zuvor sollte Ihre Integration nach jedem API-Aufruf sowohl den Status der `Quelle` als auch den Status der `Abbuchung` überprüft haben. Sie müssen nicht mehr zwei Objekte überprüfen, sondern nur noch den Status des `PaymentIntent` oder der `CheckoutSession` überprüfen, nachdem Sie diesen im Frontend bestätigt haben.

| payment_intent.status | Bedeutung |
| --- | --- |
| `succeeded` | Die Zahlung war erfolgreich. |
| `requires_payment_method` | Die Zahlung ist fehlgeschlagen. |
| `requires_action` | Die Kundin oder der Kunde hat die Autorisierung der Zahlung nicht abgeschlossen, möglicherweise [aufgrund einer 3DS-Anforderung](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#check-status). |

Überprüfen Sie immer den Status des `PaymentIntent`, indem Sie ihn von Ihrem Server abrufen oder Webhook-Ereignisse auf Ihrem Server überwachen. Verlassen Sie sich nicht ausschließlich darauf, dass der/die Nutzer/in zur `return_url` zurückkehrt, die angegeben wird, wenn Sie den `PaymentIntent` bestätigen.

### Rückerstattungen

Sie können die Refunds API mit der `PaymentIntent`-ID anstelle der `Abbuchungs`-ID aufrufen.

Alternativ können Sie die Refunds API weiterhin mit der ID der `Abbuchung` aufrufen, die der `PaymentIntent` erstellt. Sie erhalten die ID der `Abbuchung` aus der Eigenschaft [latest_charge](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge).

### Fehlerbehebung

Zuvor mussten Sie Fehler bei der `Quelle` beheben. Mit `PaymentIntents` prüfen Sie stattdessen auf Fehler beim `PaymentIntent`, wenn dieser erstellt wird und nachdem die Kundin oder der Kunde die Zahlung autorisiert hat. Die meisten Fehler beim `PaymentIntent` sind vom Typ `invalid_request_error`, der bei einer ungültigen Anfrage zurückgegeben wird.

Denken Sie bei der Migration Ihrer Integration daran, dass sich die Fehlercodes des `PaymentIntent` von den entsprechenden Fehlercodes für `Quellen` unterscheiden können.

### Webhooks

Wenn Sie zuvor `Source`-Ereignisse überwacht haben, müssen Sie Ihre Integration möglicherweise aktualisieren, um stattdessen Ereignisse für andere Objekte zu überwachen. Die folgende Tabelle enthält einige Beispiele.

| Altes Ereignis | Neues Checkout-Ereignis | Neues PaymentIntent-Ereignis | Besondere Hinweise |
| --- | --- | --- | --- |
| `source.chargeable` | Nicht zutreffend | Nicht zutreffend |  |
| `source.failed` | Nicht zutreffend | Nicht zutreffend |  |
| `source.canceled` | Nicht zutreffend | Nicht zutreffend |  |
| `charge.succeeded` | `checkout.session.completed` | `payment_intent.succeeded` | Das Ereignis `charge.succeeded` wird ebenfalls gesendet, sodass Sie weiterhin dieses überwachen können, anstatt die anderen. |
| `charge.failed` | Nicht zutreffend - Der Kunde/die Kundin kann die Zahlung für dieselbe Checkout-Sitzung bis zum [Ablauf](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-expires_at) wiederholen. Anschließend erhalten Sie das Ereignis `checkout.session.expired`. | `payment_intent.payment_failed` | Das Ereignis `charge.failed` wird ebenfalls gesendet, sodass Sie weiterhin dieses überwachen können, anstatt die anderen. |
| `charge.dispute.created` | `charge.dispute.created` | `charge.dispute.created` |  |

## Umstellung auf die Payment Methods API

Der Hauptunterschied zwischen der Payment Methods API und der Sources API besteht darin, dass Sources den Transaktionsstatus über die Eigenschaft [status](https://docs.stripe.com/api/sources/object.md#source_object-status) beschreibt. Das bedeutet, dass jedes `Source`-Objekt in einen abbuchbaren Status übergehen muss, bevor Sie es für eine Zahlung verwenden können. Im Gegensatz dazu weist eine `PaymentMethod` keinen Status auf und stützt sich auf das PaymentIntent-Objekt, um den Zahlungsstatus darzustellen.

> Die folgende Tabelle umfasst nicht alle Zahlungsmethoden. Wenn Sie andere Zahlungsmethoden mit der Sources API integrieren, müssen Sie für diese ebenfalls eine Migration mit der Payment Methods API vornehmen.

| Zahlungsabläufe | Payment Methods API und Payment Intents API | Token oder Quellen mit Charges APIs |
| --- | --- | --- |
| Karten | [Kartenzahlungen](https://docs.stripe.com/payments/cards.md) | Veraltet |
| ACH-Lastschriftverfahren | [US-Bankkonto-Lastschriften](https://docs.stripe.com/payments/ach-direct-debit.md) | [Bei Token unterstützt](https://docs.stripe.com/ach-deprecated.md); Bei Quellen nicht unterstützt |

Nachdem Sie ausgewählt haben, mit welcher API die Integration stattfinden soll, nutzen Sie den [Leitfaden zu Zahlungsmethoden](https://stripe.com/payments/payment-methods-guide). Dieser hilft Ihnen dabei, die Zahlungsmethoden zu ermitteln, die Sie unterstützen sollten.

Dieser Leitfaden enthält detaillierte Beschreibungen der einzelnen Zahlungsmethoden und beschreibt die Unterschiede in den kundenorientierten Abläufen sowie die [geografischen Regionen](https://stripe.com/payments/payment-methods-guide#payment-methods-fact-sheets), in denen sie am relevantesten sind. Sie können jede im [Dashboard](https://dashboard.stripe.com/account/payments/settings) verfügbare Zahlungsmethode aktivieren. Die Aktivierung erfolgt in der Regel sofort und erfordert keine zusätzlichen Vereinbarungen.

## Gespeicherte Quellen in PaymentMethods migrieren

Um die auf `Quellen` oder auf [mit der Charges API erstellten Karten](https://docs.stripe.com/payments/charges-api.md) gespeicherten Zahlungsdaten Ihrer bestehenden Kundinnen und Kunden weiterhin verwenden zu können, müssen Sie diese mit dem [Datenmigrationstool im Stripe-Dashboard](https://dashboard.stripe.com/workbench/health/migrations) in `PaymentMethods` konvertieren.

Um eine migrierte `PaymentMethod` mit der Payment Intents API zu verwenden, übergeben Sie bei der Erstellung eines `PaymentIntent` die `PaymentMethod`-ID und die `Kunden`-ID:

```curl
curl https://api.stripe.com/v1/payment_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "automatic_payment_methods[enabled]=true" \
  -d amount=1099 \
  -d currency=usd \
  -d "customer={{CUSTOMER_ID}}" \
  -d "payment_method={{PAYMENTMETHOD_ID}}"
```

## See also

- [Leitfaden zu Zahlungsmethoden](https://stripe.com/payments/payment-methods-guide)
- [Connect-Zahlungen](https://docs.stripe.com/connect/charges.md)
- [Dokumentation zur Payment Methods API](https://docs.stripe.com/api/payment_methods.md)
