# Basisintegration für Karten migrieren Migrieren Sie zu einer Integration, die Bankanfragen zur Kartenauthentifizierung verarbeiten kann. Wenn Sie den Leitfaden [Kartenzahlungen ohne Bankauthentifizierung](https://docs.stripe.com/payments/without-card-authentication.md) befolgt haben, erstellt Ihre Integration Zahlungen, die abgelehnt werden, wenn eine Bank den Kunden/die Kundin um eine Authentifizierung des Kaufs bittet. Falls es vermehrt zu fehlgeschlagenen Zahlungen wie im Dashboard unten oder mit dem Fehlercode `requires_action_not_handled` in der API kommt, sollten Sie Ihre Basis-Integration entsprechend erweitern, damit solche Zahlungen abgewickelt und nicht mehr pauschal abgelehnt werden. ![Dashboard mit einer fehlgeschlagenen Zahlung, aus der hervorgeht, dass diese Bank für diese Zahlung eine Authentifizierung verlangt](https://b.stripecdn.com/docs-statics-srv/assets/failed-payment-dashboard.9e22ec31f3c7063665911e26e389c5dc.png) In diesem Leitfaden erfahren Sie, wie Sie die im vorherigen Leitfaden erstellte Integration aktualisieren, um Server- und Client-Code hinzuzufügen, mit dem die Kund/innen aufgefordert werden, die Zahlung durch Anzeige eines Modals zu authentifizieren. > Auf GitHub finden Sie ein [vollständiges Code-Beispiel](https://github.com/stripe-samples/accept-a-payment/tree/master/custom-payment-flow) dieser Integration. ## Prüfen, ob die Zahlung eine Authentifizierung erfordert [Serverseitig] Sie müssen auf Ihrem Server zwei Änderungen am Endpoint vornehmen, der den PaymentIntent erstellt: 1. **Entfernen** Sie den Parameter [error_on_requires_action](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-error_on_requires_action), damit Zahlungen, die eine Authentifizierung erfordern, nicht mehr abgelehnt werden. Stattdessen wird der PaymentIntent-Status auf `requires_action` gesetzt. 1. **Fügen** Sie den Parameter `confirmation_method` hinzu, um anzugeben, dass Sie die Zahlung auf dem Server explizit (manuell) erneut bestätigen möchten, nachdem Authentifizierungsanfragen bearbeitet wurden. #### curl ```bash curl https://api.stripe.com/v1/payment_intents \ -u <>: \ -d amount=1099 \ -d currency=usd \ -d payment_method_types[]=card \ -d confirm=true \-d payment_method="{{PAYMENT_METHOD_ID}}" \ -d confirmation_method=manual ``` Aktualisieren Sie anschließend Ihre Funktion „Antwort generieren“, sodass sie den Status `requires_action` verarbeitet, statt eine Fehlermeldung auszugeben: #### curl ```bash # If the request succeeds, check the # PaymentIntent's `status` and handle # its `next_action`. ``` ## Kund/innen sich authentifizieren lassen [Clientseitig] Aktualisieren Sie nun Ihren clientseitigen Code, damit Stripe ein Modal anzeigt, wenn sich Ihre Kund/innen authentifizieren müssen. Nutzen Sie [stripe.handleCardAction](https://docs.stripe.com/js.md#stripe-handle-card-action), wenn ein PaymentIntent den Status `requires_action` hat. Bei Erfolg erhält der PaymentIntent den Status `requires_confirmation`. Sie müssen dann den PaymentIntent erneut auf Ihrem Server bestätigen, um die Zahlung abzuschließen. ```javascript const handleServerResponse = async (responseJson) => { if (responseJson.error) { // Show error from server on payment form} else if (responseJson.requiresAction) { // Use Stripe.js to handle the required card action const { error: errorAction, paymentIntent } = await stripe.handleCardAction(responseJson.clientSecret); if (errorAction) { // Show error from Stripe.js in payment form } else { // The card action has been handled // The PaymentIntent can be confirmed again on the server const serverResponse = await fetch('/pay', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ payment_intent_id: paymentIntent.id }) }); handleServerResponse(await serverResponse.json()); } } else { // Show success message } } ``` ## PaymentIntent erneut bestätigen [Serverseitig] *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) Sie den PaymentIntent erneut mit demselben Endpunkt, den Sie in zuvor angelegt haben, um die Zahlung abzuschließen und die Bestellung auszuführen. Der Zahlungsversuch schlägt fehl und wird auf `requires_payment_method` zurückgesetzt, sofern die Zahlung nicht innerhalb einer Stunde erneut bestätigt wird. #### Curl ```bash curl https://api.stripe.com/v1/payment_intents/{{PAYMENT_INTENT_ID}}/confirm \ -u <>: \ -X "POST" ``` ## Integration testen Nutzen Sie unsere Testkarten in der Sandbox, um sicherzustellen, dass Ihre Integration korrekt aktualisiert wurde. Stripe zeigt im Modal eine künstliche Authentifizierungsseite an, mit der Sie sowohl erfolgreiche als auch fehlgeschlagene Zahlungen simulieren können. Im Live-Modus kontrolliert die Bank, was innerhalb des Modals in der Nutzeroberfläche angezeigt wird. | Nummer | Beschreibung | | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | | 4242424242424242 | Bei Erfolg sofortige Verarbeitung der Zahlung. | | 4000000000009995 | Schlägt stets mit dem Ablehnungscode `insufficient_funds` fehl. | | 4000002500003155 | Erfordert eine Authentifizierung, die in dieser Integration zu einem Fehler führt. Der Ablehnungscode lautet dann `authentication_not_handled`. |