# Kartenzahlungen über die Charges API Erfahren Sie, wie Karten mit Legacy APIs von Stripe belastet, gespeichert und authentifiziert werden. > #### Legacy API > > Der Inhalt dieses Abschnitts bezieht sich auf eine *Legacy* (Technology that's no longer recommended)-Funktion. Verwenden Sie stattdessen die [Payment Intents API](https://docs.stripe.com/payments/accept-a-payment.md). > > 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) Die [Charges](https://docs.stripe.com/api/charges.md) API und die [Tokens](https://docs.stripe.com/api/tokens.md) API sind Legacy-APIs, die in älteren Stripe-Integrationen verwendet werden, um Debit- und Kreditkartenzahlungen zu akzeptieren. Verwenden Sie [PaymentIntents](https://docs.stripe.com/payments/accept-a-payment.md) für neue Integrationen. Die Charges API beschränkt Ihre Möglichkeiten zur Nutzung von Stripe-Funktionen. Um die neuesten Funktionen nutzen zu können, verwenden Sie [Stripe Checkout](https://docs.stripe.com/payments/checkout.md) oder [migrieren Sie zur Payment Intents API](https://docs.stripe.com/payments/payment-intents/migration.md). ## Zahlungsablauf In den meisten Fällen bietet die PaymentIntents API mehr Flexibilität und Integrationsmöglichkeiten. | Charges API | Payment Intents API | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1. Die Zahlungsinformationen des/der Kund/in im Browser mit Elements erfassen. 1. Die Zahlungsinformationen mit Stripe.js tokenisieren. 1. Eine Anfrage zur Übermittlung des Tokens an Ihren Server durchführen. 1. Das Token zum Erstellen einer Zahlung auf Ihrem Server mit dem gewünschten Betrag und der gewünschten Währung verwenden. 1. 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. 1. Das Client-Geheimnis des PaymentIntent an die Client-Seite übermitteln. 1. Die Zahlungsinformationen des/der Kund/in im Browser mit Elements erfassen. 1. Verwalten Sie mit Stripe.js oder den mobilen SDKs Ihre [3D Secure](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#three-ds-radar)-Optionen und schließen Sie Zahlungen auf dem Client ab. 1. 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 "<>:" \ -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 "<>:" \ -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 1. 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, wird in der Abrechnung der Kundinnen und Kunden standardmäßig die [Zahlungsbeschreibung](https://docs.stripe.com/get-started/account/activate.md#public-business-information) Ihres Stripe-Kontos angezeigt. Darüber hinaus können Sie mit dem Argument `statement_descriptor` im jeweiligen Charge-Objekt die Zahlungsbeschreibung in der Abrechnung bei jeder Zahlungsanfrage dynamisch festlegen. #### Curl ```bash curl https://api.stripe.com/v1/charges \ -u <>: \ -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 Wenn Sie die [Payment Intents API](https://docs.stripe.com/payments/accept-a-payment.md) verwenden, sollten Sie nur die Felder `metadata` und `description` im Objekt “Payment Intent” abrufen und aktualisieren. Wenn Sie sowohl das Payment Intent- als auch das Charge-Objekt verwenden, ist nicht gewährleistet, dass für diese Felder einheitliche Werte angezeigt werden. 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 <>: \ -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.