# [Deprecated] Kartenzahlungen über die Charges API

Erfahren Sie, wie Karten mit Legacy APIs von Stripe belastet, gespeichert und authentifiziert werden.

The content on this page is deprecated and is superseded by:

- [Accept a payment](https://docs.stripe.com/payments/accept-a-payment.md)
- [Build a payments page](https://docs.stripe.com/payments/checkout.md)
- [The Payment Intents API](https://docs.stripe.com/payments/payment-intents.md)

> #### Deprecated
> 
> Wir haben die Verwendung der Charges-API zum Anlegen von Kartenzahlungen als veraltet eingestuft und planen, die Unterstützung dafür einzustellen. Verwenden Sie stattdessen [Checkout](https://docs.stripe.com/payments/checkout.md) oder die [Payment Intent](https://docs.stripe.com/payments/payment-intents.md) API. Bei neuen Integrationen kann die Charges-API nicht mehr zum Anlegen von Zahlungen verwendet werden.
> 
> Die Charges API unterstützt die folgenden Funktionen nicht, von denen viele für die Einhaltung von Kreditkartenvorschriften erforderlich sind:
> 
> - Unternehmen in Indien
> - [Bankanfragen zur Kartenauthentifizierung](https://docs.stripe.com/payments/cards/overview.md)
> - [Starke Kundenauthentifizierung](https://docs.stripe.com/strong-customer-authentication.md)

If you use the Charges API, your access to newer Stripe features is limited. To get the latest features, [migrate to the Payment Intents API](https://docs.stripe.com/payments/payment-intents/migration.md).

## Zahlungsablauf

In most cases, the Payment Intents API offers more flexibility and integration options.

| Charges API | Payment Intents API |
| --- | --- |
| 1. Die Zahlungsinformationen des/der Kund/in im Browser mit Elements erfassen.
2. Die Zahlungsinformationen mit Stripe.js tokenisieren.
3. Eine Anfrage zur Übermittlung des Tokens an Ihren Server durchführen.
4. Das Token zum Erstellen einer Zahlung auf Ihrem Server mit dem gewünschten Betrag und der gewünschten Währung verwenden.
5. Bei erfolgreicher Zahlung die Bestellung des/der Kund/in abwickeln. | 1. Einen PaymentIntent auf Ihrem Server mit dem gewünschten Betrag und der gewünschten Währung erstellen.
2. Das Client-Geheimnis des PaymentIntent an die Client-Seite übermitteln.
3. Die Zahlungsinformationen des/der Kund/in im Browser mit Elements erfassen.
4. Verwalten Sie mit Stripe.js oder den mobilen SDKs Ihre [3D&nbsp;Secure](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#three-ds-radar)-Optionen und schließen Sie Zahlungen auf dem Client ab.
5. Bei erfolgreicher Zahlung mit Webhooks die Kundenbestellung abwickeln. |

## Rückerstattungen

Um eine Zahlung über die API zu erstatten, erstellen Sie eine [Rückerstattung](https://docs.stripe.com/api.md#create_refund) und geben Sie die ID der zu erstattenden Zahlung an.

```curl
curl https://api.stripe.com/v1/refunds \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d charge={{CHARGE_ID}}
```

Um einen Teil einer Zahlung zu erstatten, geben Sie einen `amount`-Parameter als Ganzzahl in Cent (oder in der kleinsten Währungseinheit der Abbuchungswährung) an.

```curl
curl https://api.stripe.com/v1/refunds \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d charge={{CHARGE_ID}} \
  -d amount=1000
```

## Apple Pay

Wenn Ihr/e Kund/in die Zahlung genehmigt, empfängt Ihre App eine [PKPayment](https://developer.apple.com/documentation/passkit/pkpayment)-Instanz mit den verschlüsselten Kartendaten des/der Kund/in, indem die [PKPaymentAuthorizationViewControllerDelegate](https://developer.apple.com/documentation/passkit/pkpaymentauthorizationviewcontrollerdelegate)-Methoden implementiert werden.

1. Verwenden Sie die [createTokenWithPayment](https://stripe.dev/stripe-ios/stripe-payments/Classes/STPAPIClient.html#/c:@CM@StripePayments@StripeCore@objc\(cs\)STPAPIClient\(im\)createTokenWithPayment:completion:) SDK-Methode, um `PKPayment` in einen Stripe `Token`umzuwandeln
2. Verwenden Sie diesen `Token`, um eine Zahlung zu erstellen

#### Swift

```swift
extension CheckoutViewController: PKPaymentAuthorizationViewControllerDelegate {

    func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController, didAuthorizePayment payment: PKPayment, handler: @escaping (PKPaymentAuthorizationResult) -> Void) {
        // Convert the PKPayment into a Token
        STPAPIClient.shared.createToken(withPayment: payment) { token, error in
              guard let token = token else {
                  // Handle the error
                  return
              }
            let tokenID = token.tokenId
            // Send the token identifier to your server to create a Charge...
            // If the server responds successfully, set self.paymentSucceeded to YES
        }
    }

    func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) {
        // Dismiss payment authorization view controller
        dismiss(animated: true, completion: {
            if (self.paymentSucceeded) {
                // Show a receipt page...
            } else {
                // Present error to customer...
            }
        })
    }
}
```

## Dynamische Zahlungsbeschreibung in der Abrechnung

Immer wenn Sie eine Karte belasten, erscheint auf Kundenauszügen standardmäßig die [Zahlungsbeschreibung in der Abrechnung](https://docs.stripe.com/get-started/account/set-up.md#public-business-information) Ihres Stripe-Kontos. Darüber hinaus können Sie mit dem Argument `statement_descriptor` die Zahlungsbeschreibung in der Abrechnung im jeweiligen Charge-Objekt bei jeder Abbuchungsanfrage dynamisch festlegen.

#### Curl

```bash
curl https://api.stripe.com/v1/charges \
  -u <<YOUR_SECRET_KEY>>: \
  -d "amount"=999 \
  -d "currency"="usd" \
  -d "description"="Example charge" \
  -d "source"="tok_visa" \
  -d "statement_descriptor"="Custom descriptor"
```

Die Zahlungsbeschreibung in der Abrechnung ist auf 22 Zeichen begrenzt. Sie darf die Sonderzeichen `<`, `>`, `'`, `"` oder `*` nicht enthalten und nicht ausschließlich aus Ziffern bestehen.

Wenn Sie die Zahlungsbeschreibung in der Abrechnung bei Kredit- und Debitkartenzahlungen dynamisch festlegen, wird der dynamische Teil an die Zahlungsbeschreibung des Abwicklungshändlers angehängt (getrennt durch ein `*` und ein Leerzeichen). Die Zahlungsbeschreibung eines Unternehmens mit dem Namen FreeCookies, aus der die Art der gekauften Kekse hervorgehen soll, könnte beispielsweise `FREECOOKIES* SUGAR` lauten.

Das `*` und das Leerzeichen werden ebenfalls von den maximal zulässigen 22 Zeichen abgezogen, und Stripe vergibt automatisch 10 Zeichen für die dynamische Zahlungsbeschreibung. In der Folge könnte ein Teil der Zahlungsbeschreibung des Abwicklungshändlers abgeschnitten werden, wenn diese länger als 10 Zeichen ist (vorausgesetzt, die dynamische Zahlungsbeschreibung ist ebenfalls länger als 10 Zeichen). Wenn die dynamische Zahlungsbeschreibung in der Abrechnung länger als 10 Zeichen ist, werden beide Beschreibungen nach 10 Zeichen abgeschnitten.

Wenn Sie Probleme mit den Zeichenbeschränkungen haben, können Sie im Stripe-Dashboard eine [verkürzte Zahlungsbeschreibung](https://dashboard.stripe.com/settings/public) festlegen, damit die Zahlungsbeschreibung des Abwicklungshändlers kürzer ist. Dadurch erhält die dynamische Zahlungsbeschreibung mehr Platz. Die gekürzte Zahlungsbeschreibung:

- Ersetzt die Zahlungsbeschreibung des Abwicklungshändlers, wenn dynamische Zahlungsbeschreibungen verwendet werden.
- Kann zwischen 2 und 10 Zeichen lang sein.

> Wenn die Zahlungsbeschreibung Ihres Kontos länger als 10 Zeichen ist, legen Sie im Dashboard eine [gekürzte Zahlungsbeschreibung](https://dashboard.stripe.com/settings/public) fest oder verwenden Sie ein `statement_descriptor_prefix`. Dadurch lässt sich vermeiden, dass Ihre Zahlungsbeschreibung in der Abrechnung auf unvorhersehbare Weise abgeschnitten wird.

Wie die Zahlungsbeschreibung nach der Kombination der beiden Elemente aussehen wird, können Sie im [Stripe-Dashboard](https://dashboard.stripe.com/settings/public) überprüfen.

## Informationen in Metadaten speichern

If using the [Payment Intents API](https://docs.stripe.com/payments/payment-intents.md), only retrieve and update the `metadata` and `description` fields on the Payment Intent object. If using both the Payment Intent and Charge objects, you’re not guaranteed to see consistent values for these fields.

Für die meisten gängigen Anforderungen, beispielsweise die Zahlungsverarbeitung, unterstützt Stripe das Hinzufügen von [Metadaten](https://docs.stripe.com/api.md#metadata). Metadaten sind für Kundinnen/Kunden nicht sichtbar und fließen auch nicht in die Kriterien ein, ob eine Zahlung durch unsere Betrugsprävention abgelehnt oder gesperrt wird.

Mithilfe von Metadaten können Sie sonstige Informationen, die für Ihre Abläufe wichtig sind, mit Stripe-Aktivitäten verknüpfen. Alle Metadaten, die Sie angeben, lassen sich im Dashboard (beispielsweise auf der Detailseite einer Zahlung) anzeigen und stehen auch in allgemeinen Berichten und Exporten zur Verfügung. Zum Beispiel können Sie Ihre Zahlungen mit Bestell-IDs versehen, damit Sie, Ihre Buchhaltung oder Ihr/e Steuerberater/in die Zahlungen in Stripe den jeweiligen Bestellungen in Ihrem System zuordnen können.

Wenn Sie *Radar* (Stripe Radar helps detect and block fraud for any type of business using machine learning that trains on data across millions of global companies. It’s built into Stripe and requires no additional setup to get started) nutzen, ist es sinnvoll, alle zusätzlichen Kunden- und Bestellinformationen als Metadaten zu übergeben. Auf diese Weise können Sie [Radar-Regeln mit Metadatenattributen](https://docs.stripe.com/radar/rules/reference.md#metadata-attributes) erstellen und haben im Dashboard mehr Informationen zur Zahlung zur Verfügung, wodurch der Überprüfungsprozess beschleunigt werden kann.

#### Curl

```bash
curl https://api.stripe.com/v1/charges \
  -u <<YOUR_SECRET_KEY>>: \
  -d "amount"=999 \
  -d "currency"="usd" \
  -d "description"="Example charge" \
  -d "source"="tok_visa" \
  -d "metadata[order_id]"=6735
```

> Speichern Sie keine sensiblen Daten (personenbezogene Daten, Kartendaten usw.) als Metadaten oder im Parameter `description` der Zahlung.

## Abgelehnte Zahlungen

Wenn Sie möchten, dass Ihre Integration automatisch auf fehlgeschlagene Zahlungen reagiert, haben Sie zwei Optionen, auf das `outcome` einer Zahlung zuzugreifen.

- [Verwalten Sie den API-Fehler](https://docs.stripe.com/api.md#error_handling), der bei einer fehlgeschlagenen Zahlung zurückgegeben wird. Für gesperrte und von Kartenausstellern und -ausstellerinnen abgelehnte Zahlungen, enthält der Fehler die Zahlungs-ID, die Sie dann verwenden können, um die Zahlung [abzurufen](https://docs.stripe.com/api.md#retrieve_charge).
- Verwenden Sie [Webhooks](https://docs.stripe.com/webhooks.md), um Statusaktualisierungen zu überwachen. Das Ereignis `charge.failed` wird zum Beispiel ausgelöst, wenn eine Zahlung nicht erfolgreich war.
