# Swish-Zahlungen Erfahren Sie, wie Sie Zahlungen per Swish, einer beliebten Zahlungsmethode in Schweden, akzeptieren. Swish ist eine in Schweden verwendete Zahlungsmethoden zum [einmaligen Gebrauch](https://docs.stripe.com/payments/payment-methods.md#usage). Sie bietet Kundinnen und Kunden die Möglichkeit, Zahlungen mit der mobilen Swish-App und der schwedischen mobilen BankID-App zu [authentifizieren und zu genehmigen](https://docs.stripe.com/payments/payment-methods.md#customer-actions). Sie erhalten eine [sofortige Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification), ob die Zahlung erfolgreich war oder fehlgeschlagen ist. > Stripe kann Ihren Kundinnen und Kunden automatisch die relevanten Zahlungsmethoden anzeigen, indem Währungen, Einschränkungen der Zahlungsmethode und andere Parameter ausgewertet werden. > > - Befolgen Sie den Leitfaden [Eine Zahlung akzeptieren](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=checkout&ui=stripe-hosted), um eine Checkout-Integration zu erstellen, die [dynamische Zahlungsmethoden](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md) verwendet. - Wenn Sie keine dynamischen Zahlungsmethoden verwenden möchten, befolgen Sie die folgenden Schritte, um die Zahlungsmethoden in Ihrer Checkout-Integration manuell zu konfigurieren. Dieser Leitfaden zeigt Ihnen, wie Sie Swish auf [Checkout](https://docs.stripe.com/payments/checkout.md), unserem gehosteten Bezahlformular aktivieren, und erklärt die Unterschiede zwischen der Annahme einer Kartenzahlung und einer Swish-Zahlung. ## Kompatibilität bestimmen **Unterstützte Unternehmensstandorte**: Europe **Unterstützte Währungen**: `sek` **Transaktionswährungen**: `sek` **Zahlungsmodus**: Yes **Einrichtungsmodus**: No **Abonnementmodus**: No Für die Unterstützung von Zahlungen per Swish muss eine Checkout-Sitzung alle folgenden Bedingungen erfüllen: - Die *Preise* (Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions) für alle Posten müssen in SEK angegeben werden. ## 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' ``` ## Zahlung annehmen > Dieser Leitfaden beruht auf der grundlegenden Checkout-Integration für die [Annahme einer Zahlung](https://docs.stripe.com/payments/accept-a-payment.md?integration=checkout). ### Swish als Zahlungsmethode aktivieren Führen Sie bei der Erstellung einer neuen [Checkout-Sitzung](https://docs.stripe.com/api/checkout/sessions.md) folgende Schritte aus: 1. Fügen Sie `swish` zur Liste der `payment_method_types` hinzu. 1. Stellen Sie sicher, dass all Ihre `line_items` die Währung `sek` verwenden. #### Von Stripe gehostete Seite ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price_data][currency]=sek" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d "payment_method_types[0]=card" \ -d "payment_method_types[1]=swish" \ --data-urlencode "success_url=https://example.com/success" ``` #### Eingebettetes Formular ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price_data][currency]=sek" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d "payment_method_types[0]=card" \ -d "payment_method_types[1]=swish" \ --data-urlencode "return_url=https://example.com/return" \ -d ui_mode=embedded_page ``` ### Abwicklung Ihrer Bestellungen Informieren Sie sich über die [Ausführung von Bestellungen](https://docs.stripe.com/checkout/fulfillment.md), nachdem Sie eine Zahlung angenommen haben. ## Optional: Ereignisse nach der Zahlung verarbeiten Stripe übermittelt ein [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded)-Ereignis, wenn die Zahlung abgeschlossen ist. Verwenden Sie im Dashboard einen *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) oder eine Partnerlösung, um diese Ereignisse zu empfangen und Aktionen auszuführen (Versenden einer Bestellbestätigung per E-Mail an die Kund/innen, Erfassen des Verkaufs in einer Datenbank oder Einleiten des Versandablaufs). Überwachen Sie diese Ereignisse, statt auf einen Callback vom Client zu warten. Auf dem Client könnte der Kunde/die Kundin das Browserfenster schließen oder die App beenden, bevor der Callback erfolgt ist und böswillige Clients könnten die Antwort manipulieren. Wenn Sie Ihre Integration so einrichten, dass asynchrone Ereignisse überwacht werden, hilft Ihnen dies auch dabei, in Zukunft mehr Zahlungsmethoden zu akzeptieren. Hier erhalten Sie Informationen zu den [Unterschieden zwischen allen unterstützten Zahlungsmethoden](https://stripe.com/payments/payment-methods-guide). - **Manuelles Bearbeiten von Ereignissen im Dashboard** Verwenden Sie das Dashboard, um [Ihre Testzahlungen im Dashboard anzuzeigen](https://dashboard.stripe.com/test/payments), E-Mail-Belege zu senden, Auszahlungen zu bearbeiten oder fehlgeschlagene Zahlungen erneut zu versuchen. - **Erstellen eines benutzerdefinierten Webhooks** [Build a custom webhook](https://docs.stripe.com/webhooks/handling-payment-events.md#build-your-own-webhook) handler to listen for events and build custom asynchronous payment flows. Test and debug your webhook integration locally with the Stripe CLI. - **Integrieren einer vorgefertigten App** Bearbeiten Sie häufige Unternehmensereignisse, wie z. B.[Automatisierung](https://stripe.partners/?f_category=automation) oder[Marketing und Vertrieb](https://stripe.partners/?f_category=marketing-and-sales), indem Sie eine Partneranwendung integrieren. ## Optional: Integration testen #### Testen von mobilen Web-Apps Um Ihre Integration zu testen, wählen Sie als Zahlungsmethode Swish und tippen Sie auf **Bezahlen**. In einer Testumgebung werden Sie auf eine Testzahlungsseite weitergeleitet, auf der Sie die Zahlung genehmigen oder ablehnen können. Wenn Sie im Live-Modus auf **Bezahlen** tippen, werden Sie zur mobilen App von Swish weitergeleitet. Dort können Sie die Zahlung genehmigen oder ablehnen. #### Testen von Desktop-Web-Apps Scannen Sie den QR-Code mit einer QR-Code-Scanner-App auf Ihrem Mobilgerät, um Ihre Integration zu testen. In einer Testumgebung enthält die Nutzlast des QR-Codes eine URL, die Sie zu einer Testzahlungsseite weiterleitet, auf der Sie die Testzahlung genehmigen oder ablehnen können. Im Live-Modus müssen Sie den QR-Code mit dem QR-Code-Scanner in der mobilen Swish-App scannen. Nachdem Sie den QR-Code gescannt haben, können Sie die Zahlung in der mobilen App von Swish genehmigen oder ablehnen. ## Fehlgeschlagene Zahlungen Swish verwendet mehrere Datenpunkte, um zu entscheiden, wann eine Transaktion abgelehnt wird (zum Beispiel ist das Kundenguthaben auf dem Bankkonto nicht ausreichende oder die Kundin/der Kunde hat in der App auf **Abbrechen** geklickt). In diesen Fällen wird die [PaymentMethod](https://docs.stripe.com/api/payment_methods/object.md) getrennt und der Status des [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md)-Objekts wechselt automatisch zu `requires_payment_method`. Anders als bei einer abgelehnten Zahlung müssen Kundinnen/Kunden bei einem Swish-[PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) mit dem Status `requires_action` die Zahlung innerhalb von 3 Minuten nach abschließen. Wenn nach 3 Minuten keine Aktion erfolgt ist, wird die [PaymentMethod](https://docs.stripe.com/api/payment_methods/object.md) getrennt, und der Status des [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md)-Objekts wechselt automatisch zu `requires_payment_method`. ## See also - [Checkout-Ausführung](https://docs.stripe.com/checkout/fulfillment.md) - [Checkout anpassen](https://docs.stripe.com/payments/checkout/customization.md) # Elements > This is a Elements for when payment-ui is elements. View the full page at https://docs.stripe.com/payments/swish/accept-a-payment?payment-ui=elements. Swish ist eine in Schweden verwendete Zahlungsmethoden zum [einmaligen Gebrauch](https://docs.stripe.com/payments/payment-methods.md#usage). Sie bietet Kundinnen und Kunden die Möglichkeit, Zahlungen mit der mobilen Swish-App und der schwedischen mobilen BankID-App zu [authentifizieren und zu genehmigen](https://docs.stripe.com/payments/payment-methods.md#customer-actions). Sie erhalten eine [sofortige Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification), ob die Zahlung erfolgreich war oder fehlgeschlagen ist. In diesem Leitfaden zeigen wir Ihnen, wie Sie mit dem [Payment Element](https://docs.stripe.com/payments/payment-element.md) ein benutzerdefiniertes Zahlungsformular von Stripe in Ihre Website oder Anwendung einbetten. Mit dem Payment Element können Sie Zahlungsmethoden wie Swish automatisch annehmen. Informationen zu erweiterten Konfigurationen und Anpassungen finden Sie im Integrationsleitfaden [Zahlungen annehmen](https://docs.stripe.com/payments/accept-a-payment.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' ``` ## Erstellen Sie ein PaymentIntent [Serverseitig] Stripe verwendet ein [PaymentIntent](https://docs.stripe.com/api/payment_intents.md)-Objekt, um Ihre Absicht darzustellen, eine Kundenzahlung einzuziehen. Dabei werden die Abbuchungsversuche und Zahlungsstatusänderungen während des gesamten Vorgangs dokumentiert. #### Zahlungsmethoden über das Dashboard verwalten Erstellen Sie einen PaymentIntent auf Ihrem Server mit einem Betrag und einer Währung. Sie können Zahlungsmethoden über das [Dashboard](https://dashboard.stripe.com/settings/payment_methods) verwalten. Stripe handhabt die Rückgabe der geeigneten Zahlungsmethoden anhand von Faktoren wie Transaktionsbetrag, Währung und Zahlungsablauf. Stellen Sie vor Erstellung des Payment Intent sicher, dass **Swish** in den [Einstellungen für Zahlungsmethoden](https://dashboard.stripe.com/settings/payment_methods) aktiviert ist. Legen Sie den zu zahlenden Betrag immer serverseitig fest, also in einer vertrauenswürdigen Umgebung, und nicht auf Client-Seite. So wird verhindert, dass böswillige Kundinnen und Kunden ihre eigenen Preise festlegen können. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d "automatic_payment_methods[enabled]=true" ``` #### Zahlungsmethoden manuell auflisten Wenn Sie das Dashboard nicht nutzen oder die Zahlungsmethoden manuell angeben möchten, können Sie diese mit dem Attribut `payment_method_types` auflisten. Erstellen Sie einen PaymentIntent auf Ihrem Server mit einem Betrag, einer Währung und einer Liste der Zahlungsmethoden. Entscheiden Sie immer auf Server-Seite, die im Gegensatz zur Client-Seite vertrauenswürdig ist, wie viel berechnet werden soll. Dadurch wird verhindert, dass böswillige Kundinnen und Kunden ihre eigenen Preise wählen können. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1000 \ -d currency=sek \ -d "payment_method_types[]=swish" ``` ### Client-Geheimnis abrufen Im PaymentIntent ist ein *Client-Geheimnis* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) enthalten, das auf dem Client verwendet wird, um Zahlungen sicher abzuschließen. Es gibt verschiedene Verfahren zum Übergeben des Client-Geheimnisses an den Client. #### Einseitige Anwendung Rufen Sie das Client-Geheimnis von einem Endpoint auf Ihrem Server ab, indem Sie die Browser-Funktion `fetch` verwenden. Diese Vorgehensweise funktioniert am besten, wenn es sich bei Ihrer Client-Seite um eine einseitige Anwendung handelt, insbesondere wenn sie mit einem modernen Frontend-Framework wie React erstellt wurde. Erstellen Sie den Server-Endpoint, der das Client-Geheimnis bereitstellt: #### Ruby ```ruby get '/secret' do intent = # ... Create or retrieve the PaymentIntent {client_secret: intent.client_secret}.to_json end ``` Und dann rufen Sie das Client-Geheimnis mit JavaScript auf der Client-Seite ab: ```javascript (async () => { const response = await fetch('/secret'); const {client_secret: clientSecret} = await response.json(); // Render the form using the clientSecret })(); ``` #### Serverseitiges Rendering Übergeben Sie das Client-Geheimnis von Ihrem Server an den Client. Diese Vorgehensweise funktioniert am besten, wenn Ihre Anwendung statische Inhalte auf dem Server generiert, bevor sie an den Browser gesendet werden. Fügen Sie das [client_secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) in Ihr Bezahlformular ein. Rufen Sie in Ihrem serverseitigen Code das Client-Geheimnis aus dem PaymentIntent ab: #### Ruby ```erb
``` ```ruby get '/checkout' do @intent = # ... Fetch or create the PaymentIntent erb :checkout end ``` ## Zahlungsdetails erfassen [Clientseitig] Erfassen Sie Zahlungsdetails auf dem Client mit dem [Payment Element](https://docs.stripe.com/payments/payment-element.md). Das Payment Element ist eine vorgefertigte Komponente der Nutzeroberfläche, die die Erfassung von Zahlungsdaten für eine Vielzahl von Zahlungsmethoden vereinfacht. Das Payment Element enthält einen iFrame, der Zahlungsinformationen über eine sichere HTTPS-Verbindung an Stripe sendet. Vermeiden Sie es, das Payment Element in einem anderen iFrame zu platzieren, da einige Zahlungsmethoden die Weiterleitung an eine andere Seite zur Zahlungsbestätigung voraussetzen. Wenn Sie sich für die Verwendung eines Iframes entscheiden und Apple Pay oder Google Pay akzeptieren möchten, muss das Attribut [Zulassen](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-allowpaymentrequest) des Iframes auf `"payment*"` gesetzt sein. Die Adresse der Bezahlseite muss mit `https://` beginnen, nicht mit `http://`, damit Ihre Integration funktioniert. Sie können Ihre Integration ohne HTTPS testen. Denken Sie jedoch daran, dieses zu [aktivieren](https://docs.stripe.com/security/guide.md#tls), wenn Sie bereit sind, Live-Zahlungen zu akzeptieren. #### HTML + JS ### Stripe.js einrichten Das Payment Element ist ein Feature von Stripe.js und steht damit automatisch zur Verfügung. Fügen Sie das Stripe.js-Skript auf Ihrer Bezahlseite ein, indem Sie es in den `head` Ihrer HTML-Datei einbinden. Laden Sie Stripe.js immer direkt von js.stripe.com, um die PCI-Konformität zu gewährleisten. Fügen Sie das Skript nicht in ein Paket ein und hosten Sie selbst keine Kopie davon. ```html Checkout ``` Erstellen Sie auf Ihrer Bezahlseite eine Instanz von Stripe mit dem folgenden JavaScript: ```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('<>'); ``` ### Payment Element Ihrer Bezahlseite hinzufügen Das Payment Element benötigt einen festen Platz auf Ihrer Zahlungsseite. Erstellen Sie einen leeren DOM-Knoten (Container) mit einer eindeutigen ID in Ihrem Zahlungsformular: ```html
``` Wenn das vorherige Formular geladen wurde, erstellen Sie eine Instanz des Payment Element und verbinden es mit dem DOM-Knoten (Container). Übergeben Sie das [Client-Geheimnis](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) aus dem vorherigen Schritt an `options`, wenn Sie die [Elements](https://docs.stripe.com/js/elements_object/create)-Instanz erstellen: Gehen Sie sorgfältig mit dem Client-Geheimnis um, denn es kann die Zahlung abschließen. Protokollieren Sie es nicht, betten Sie es nicht in URLs ein und geben Sie es nur dem/der Kund/in preis. ```javascript const options = { clientSecret: '{{CLIENT_SECRET}}', // Fully customizable with appearance API. appearance: {/*...*/}, }; // Set up Stripe.js and Elements to use in checkout form, passing the client secret obtained in a previous stepconst elements = stripe.elements(options); // Optional: Autofill user's saved payment methods. If the customer's // email is known when the page is loaded, you can pass the email // to the linkAuthenticationElement on mount: // // linkAuthenticationElement.mount("#link-authentication-element", { // defaultValues: { // email: 'jenny.rosen@example.com', // } // }) // Create and mount the Payment Element const paymentElementOptions = { layout: 'accordion'}; const paymentElement = elements.create('payment', paymentElementOptions); paymentElement.mount('#payment-element'); ``` #### React ### Stripe.js einrichten Installieren Sie [React Stripe.js](https://www.npmjs.com/package/@stripe/react-stripe-js) und den [Stripe.js-Loader](https://www.npmjs.com/package/@stripe/stripe-js) aus dem öffentlichen npm-Register: ```bash npm install --save @stripe/react-stripe-js @stripe/stripe-js ``` ### Den Elements-Anbieter zu Ihrer Zahlungsseite hinzufügen und konfigurieren Um die Payment Element-Komponente zu verwenden, schließen Sie die Komponente Ihrer Bezahlseite in einen [Elements-Anbieter](https://docs.stripe.com/sdks/stripejs-react.md#elements-provider) ein. Rufen Sie `loadStripe` mit Ihrem veröffentlichbaren Schlüssel auf und übergeben Sie das zurückgegebene `Promise` an den `Elements`-Anbieter. Übergeben Sie auch das [Client-Geheimnis](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) aus dem vorherigen Schritt als `options` an den `Elements`-Anbieter. ```jsx import React from 'react'; import ReactDOM from 'react-dom'; import {Elements} from '@stripe/react-stripe-js'; import {loadStripe} from '@stripe/stripe-js'; import CheckoutForm from './CheckoutForm'; // Make sure to call `loadStripe` outside of a component’s render to avoid // recreating the `Stripe` object on every render. const stripePromise = loadStripe('<>'); function App() { const options = { // passing the client secret obtained in step 3 clientSecret: '{{CLIENT_SECRET}}', // Fully customizable with appearance API. appearance: {/*...*/}, }; return ( ); }; ReactDOM.render(, document.getElementById('root')); ``` ### Payment Element hinzufügen Verwenden Sie die Komponente `PaymentElement`, um Ihr Formular zu erstellen: ```jsx import React from 'react'; import {PaymentElement} from '@stripe/react-stripe-js'; const CheckoutForm = () => { return (
// Optional: Autofill user's saved payment methods. If the customer's // email is known when the page is loaded, you can pass the email // to the linkAuthenticationElement // // ); }; export default CheckoutForm; ``` ## Zahlung an Stripe senden [Clientseitig] Verwenden Sie [stripe.confirmPayment](https://docs.stripe.com/js/payment_intents/confirm_payment), um die Zahlung mit Details aus dem Payment Element vorzunehmen. Geben Sie für diese Funktion eine [return_url](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-return_url) an, um anzugeben, wohin Stripe die Nutzer/innen nach Durchführung der Zahlung weiterleiten soll. Ihre Nutzer/innen werden möglicherweise zunächst an eine zwischengeschaltete Seite weitergeleitet, wie z. B. eine Bankautorisierungsseite, bevor sie zur `return_url` weitergeleitet werden. Kartenzahlungen werden sofort zur `return_url` weitergeleitet, wenn eine Zahlung erfolgreich war. #### HTML + JS ```javascript const form = document.getElementById('payment-form'); form.addEventListener('submit', async (event) => { event.preventDefault(); const {error} = await stripe.confirmPayment({ //`Elements` instance that was used to create the Payment Element elements, confirmParams: { return_url: 'https://example.com/order/123/complete', }, }); if (error) { // This point will only be reached if there is an immediate error when // confirming the payment. Show error to your customer (for example, payment // details incomplete) const messageContainer = document.querySelector('#error-message'); messageContainer.textContent = error.message; } else { // Your customer will be redirected to your `return_url`. For some payment // methods like iDEAL, your customer will be redirected to an intermediate // site first to authorize the payment, then redirected to the `return_url`. } }); ``` #### React Verwenden Sie die Hooks [useStripe](https://docs.stripe.com/sdks/stripejs-react.md#usestripe-hook) und [useElements](https://docs.stripe.com/sdks/stripejs-react.md#useelements-hook), um [stripe.confirmPayment](https://docs.stripe.com/js/payment_intents/confirm_payment) über die Komponente Ihres Zahlungsformulars aufzurufen. Wenn Sie herkömmliche Klassenkomponenten gegenüber Hooks bevorzugen, können Sie stattdessen einen [ElementsConsumer](https://docs.stripe.com/sdks/stripejs-react.md#elements-consumer) verwenden. ```jsx import React, {useState} from 'react'; import {useStripe, useElements, PaymentElement} from '@stripe/react-stripe-js'; const CheckoutForm = () => { const stripe = useStripe(); const elements = useElements(); const [errorMessage, setErrorMessage] = useState(null); const handleSubmit = async (event) => { // We don't want to let default form submission happen here, // which would refresh the page. event.preventDefault(); if (!stripe || !elements) { // Stripe.js hasn't yet loaded. // Make sure to disable form submission until Stripe.js has loaded. return; } const {error} = await stripe.confirmPayment({ //`Elements` instance that was used to create the Payment Element elements, confirmParams: { return_url: 'https://example.com/order/123/complete', }, }); if (error) { // This point will only be reached if there is an immediate error when // confirming the payment. Show error to your customer (for example, payment // details incomplete) setErrorMessage(error.message); } else { // Your customer will be redirected to your `return_url`. For some payment // methods like iDEAL, your customer will be redirected to an intermediate // site first to authorize the payment, then redirected to the `return_url`. } }; return (
{/* Show error message to your customers */} {errorMessage &&
{errorMessage}
} ); }; export default CheckoutForm; ``` Achten Sie darauf, dass die `return_url` auf eine Seite Ihrer Website verweist, die den Status der Zahlung angibt. Wenn Stripe den/die Kund/in an die `return_url` weiterleitet, stellen wir die folgenden URL-Abfrageparameter bereit: | Parameter | Beschreibung | | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | | `payment_intent` | Die eindeutige ID für die `PaymentIntent`. | | `payment_intent_client_secret` | Das [Client-Geheimnis](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) des `PaymentIntent`-Objekts. | > Wenn Sie über Tools verfügen, die die Browser-Sitzung der Kund/innen verfolgen, müssen Sie möglicherweise die Domain `stripe.com` zur Referenz-Ausschlussliste hinzufügen. Weiterleitungen haben zur Folge, dass einige Tools neue Sitzungen erstellen. Dies wiederum hindert Sie daran, die gesamte Sitzung zu verfolgen. Verwenden Sie einen der Abfrageparameter, um den PaymentIntent abzurufen. Überprüfen Sie den [Status des PaymentIntent](https://docs.stripe.com/payments/paymentintents/lifecycle.md), um zu entscheiden, was Ihren Kundinnen/Kunden angezeigt werden soll. Sie können bei der Angabe der `return_url` auch Ihre eigenen Abfrageparameter anhängen, die während des Weiterleitungsvorgangs erhalten bleiben. #### HTML + JS ```javascript // Initialize Stripe.js using your publishable key const stripe = Stripe('<>'); // Retrieve the "payment_intent_client_secret" query parameter appended to // your return_url by Stripe.js const clientSecret = new URLSearchParams(window.location.search).get( 'payment_intent_client_secret' ); // Retrieve the PaymentIntent stripe.retrievePaymentIntent(clientSecret).then(({paymentIntent}) => { const message = document.querySelector('#message') // Inspect the PaymentIntent `status` to indicate the status of the payment // to your customer. // // Some payment methods will [immediately succeed or fail][0] upon // confirmation, while others will first enter a `processing` state. // // [0]: https://stripe.com/docs/payments/payment-methods#payment-notification switch (paymentIntent.status) { case 'succeeded': message.innerText = 'Success! Payment received.'; break; case 'processing': message.innerText = "Payment processing. We'll update you when payment is received."; break; case 'requires_payment_method': message.innerText = 'Payment failed. Please try another payment method.'; // Redirect your user back to your payment page to attempt collecting // payment again break; default: message.innerText = 'Something went wrong.'; break; } }); ``` #### React ```jsx import React, {useState, useEffect} from 'react'; import {useStripe} from '@stripe/react-stripe-js'; const PaymentStatus = () => { const stripe = useStripe(); const [message, setMessage] = useState(null); useEffect(() => { if (!stripe) { return; } // Retrieve the "payment_intent_client_secret" query parameter appended to // your return_url by Stripe.js const clientSecret = new URLSearchParams(window.location.search).get( 'payment_intent_client_secret' ); // Retrieve the PaymentIntent stripe .retrievePaymentIntent(clientSecret) .then(({paymentIntent}) => { // Inspect the PaymentIntent `status` to indicate the status of the payment // to your customer. // // Some payment methods will [immediately succeed or fail][0] upon // confirmation, while others will first enter a `processing` state. // // [0]: https://stripe.com/docs/payments/payment-methods#payment-notification switch (paymentIntent.status) { case 'succeeded': setMessage('Success! Payment received.'); break; case 'processing': setMessage("Payment processing. We'll update you when payment is received."); break; case 'requires_payment_method': // Redirect your user back to your payment page to attempt collecting // payment again setMessage('Payment failed. Please try another payment method.'); break; default: setMessage('Something went wrong.'); break; } }); }, [stripe]); return message; }; export default PaymentStatus; ``` ## Transaktionen umleiten und authentifizieren Kundinnen/Kunden können Transaktionen per Swish mit der mobilen App oder der Desktop-App authentifizieren. Der kundenseitig verwendete Client bestimmt die Authentifizierungsmethode, nachdem `confirmPayment` aufgerufen wurde. #### Authentifizierung mittels mobiler Apps Nachdem `confirmPayment` aufgerufen wurde, werden die Kundinnen/Kunden zu Swish weitergeleitet, um die Zahlung zu genehmigen oder abzulehnen. Nachdem die Zahlung kundenseitig autorisiert wurde, werden diese zur `return_url` des Payment Intent weitergeleitet. Stripe fügt `payment_intent`, `payment_intent_client_secret`, `redirect_pm_type` und `redirect_status` als URL-Abfrageparameter hinzu (zusätzlich zu allen vorhandenen Abfrageparametern in `return_url`). Eine Authentifizierungssitzung läuft nach 3 Minuten ab und dann wechselt der Status des PaymentIntent wieder auf `require_payment_method`. Nach der Statusänderung sehen Kundinnen/Kunden einen Zahlungsfehler und müssen den Bezahlvorgang von vorne beginnen. #### Authentifizierung über Desktop-Web-App Nachdem „confirmPayment“ aufgerufen wurde, wird ein QR-Code auf der Webseite angezeigt. Ihre Kundinnen/Kunden können den QR-Code mit der Kamera ihres Mobilgeräts oder der mobilen Swish-App scannen und die Zahlung mit Swish authentifizieren. Ein paar Sekunden nach der erfolgreichen Authentifizierung der Zahlung durch die Kundinnen/Kunden wird das QR-Code-Modal automatisch geschlossen und Sie können die Bestellung ausführen. Stripe nimmt eine Weiterleitung zur `return_url` vor, wenn die Zahlung abgeschlossen ist. Wenn Sie nach Zahlungsabschluss keine webbasierte Weiterleitung vornehmen möchten, übergeben Sie `redirect: if_required` an das Payment Element. Eine Authentifizierungssitzung läuft nach 3 Minuten ab. Sie können den QR-Code bis zu 20 Mal aktualisieren, bevor der Status des PaymentIntent wieder auf `require_payment_method` wechselt. Nach den Statusänderungen sehen Kundinnen/Kunden einen Zahlungsfehler und müssen den Zahlungsvorgang neu starten. ## Optional: Ereignisse nach der Zahlung verarbeiten Stripe übermittelt ein [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded)-Ereignis, wenn die Zahlung abgeschlossen ist. Verwenden Sie im Dashboard einen *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) oder eine Partnerlösung, um diese Ereignisse zu empfangen und Aktionen auszuführen (Versenden einer Bestellbestätigung per E-Mail an die Kund/innen, Erfassen des Verkaufs in einer Datenbank oder Einleiten des Versandablaufs). Überwachen Sie diese Ereignisse, statt auf einen Callback vom Client zu warten. Auf dem Client könnte der Kunde/die Kundin das Browserfenster schließen oder die App beenden, bevor der Callback erfolgt ist und böswillige Clients könnten die Antwort manipulieren. Wenn Sie Ihre Integration so einrichten, dass asynchrone Ereignisse überwacht werden, hilft Ihnen dies auch dabei, in Zukunft mehr Zahlungsmethoden zu akzeptieren. Hier erhalten Sie Informationen zu den [Unterschieden zwischen allen unterstützten Zahlungsmethoden](https://stripe.com/payments/payment-methods-guide). - **Manuelles Bearbeiten von Ereignissen im Dashboard** Verwenden Sie das Dashboard, um [Ihre Testzahlungen im Dashboard anzuzeigen](https://dashboard.stripe.com/test/payments), E-Mail-Belege zu senden, Auszahlungen zu bearbeiten oder fehlgeschlagene Zahlungen erneut zu versuchen. - **Erstellen eines benutzerdefinierten Webhooks** [Build a custom webhook](https://docs.stripe.com/webhooks/handling-payment-events.md#build-your-own-webhook) handler to listen for events and build custom asynchronous payment flows. Test and debug your webhook integration locally with the Stripe CLI. - **Integrieren einer vorgefertigten App** Bearbeiten Sie häufige Unternehmensereignisse, wie z. B.[Automatisierung](https://stripe.partners/?f_category=automation) oder[Marketing und Vertrieb](https://stripe.partners/?f_category=marketing-and-sales), indem Sie eine Partneranwendung integrieren. ## Optional: Integration testen #### Testen von mobilen Web-Apps Um Ihre Integration zu testen, wählen Sie als Zahlungsmethode Swish und tippen Sie auf **Bezahlen**. In einer Testumgebung werden Sie auf eine Testzahlungsseite weitergeleitet, auf der Sie die Zahlung genehmigen oder ablehnen können. Wenn Sie im Live-Modus auf **Bezahlen** tippen, werden Sie zur mobilen App von Swish weitergeleitet. Dort können Sie die Zahlung genehmigen oder ablehnen. #### Testen von Desktop-Web-Apps Scannen Sie den QR-Code mit einer QR-Code-Scanner-App auf Ihrem Mobilgerät, um Ihre Integration zu testen. In einer Testumgebung enthält die Nutzlast des QR-Codes eine URL, die Sie zu einer Testzahlungsseite weiterleitet, auf der Sie die Testzahlung genehmigen oder ablehnen können. Im Live-Modus müssen Sie den QR-Code mit dem QR-Code-Scanner in der mobilen Swish-App scannen. Nachdem Sie den QR-Code gescannt haben, können Sie die Zahlung in der mobilen App von Swish genehmigen oder ablehnen. ## Fehlgeschlagene Zahlungen Swish verwendet mehrere Datenpunkte, um zu entscheiden, wann eine Transaktion abgelehnt wird (zum Beispiel ist das Kundenguthaben auf dem Bankkonto nicht ausreichende oder die Kundin/der Kunde hat in der App auf **Abbrechen** geklickt). In diesen Fällen wird die [PaymentMethod](https://docs.stripe.com/api/payment_methods/object.md) getrennt und der Status des [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md)-Objekts wechselt automatisch zu `requires_payment_method`. Anders als bei einer abgelehnten Zahlung müssen Kundinnen/Kunden bei einem Swish-[PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) mit dem Status `requires_action` die Zahlung innerhalb von 3 Minuten nach abschließen. Wenn nach 3 Minuten keine Aktion erfolgt ist, wird die [PaymentMethod](https://docs.stripe.com/api/payment_methods/object.md) getrennt, und der Status des [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md)-Objekts wechselt automatisch zu `requires_payment_method`. # Direct API > This is a Direct API for when payment-ui is direct-api. View the full page at https://docs.stripe.com/payments/swish/accept-a-payment?payment-ui=direct-api. Swish ist eine in Schweden verwendete Zahlungsmethoden zum [einmaligen Gebrauch](https://docs.stripe.com/payments/payment-methods.md#usage). Sie bietet Kundinnen und Kunden die Möglichkeit, Zahlungen mit der mobilen Swish-App und der schwedischen mobilen BankID-App zu [authentifizieren und zu genehmigen](https://docs.stripe.com/payments/payment-methods.md#customer-actions). Sie erhalten eine [sofortige Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification), ob die Zahlung erfolgreich war oder fehlgeschlagen ist. ## Erforderliche Hinweise Um die Swish-Regeln einzuhalten, müssen Sie in Ihrem Zahlungsablauf den folgenden Text anzeigen, bevor die Kundin/der Kunde die Swish-Zahlung autorisiert: - Für englische Lokalisierungen: „Stripe Technology Europe Limited („Stripe“) has acquired the claim for payment. Therefore your payment will be made to Stripe.“ - Für schwedische Lokalisierungen: „Stripe Technology Europe Limited („Stripe“) har övertagit fordran på betalning. Din betalning görs därför till Stripe.” - Für andere Sprachen eine gleichwertige Übersetzung des Vorstehenden. Wenn Sie Swish über ein von Stripe gehostetes Zahlungsformular oder eine von Stripe gehostete Nutzeroberfläche wie [Checkout](https://docs.stripe.com/payments/checkout.md) oder das [Payment Element](https://docs.stripe.com/payments/payment-element.md) integrieren, zeigt Stripe Ihnen diesen Hinweis an. ## Stripe einrichten [Serverseitig] 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' ``` ## Erstellen Sie ein PaymentIntent [Serverseitig] Ein [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) ist ein Objekt, das Ihre Absicht, eine Zahlung von Kundinnen und Kunden einzuziehen, darstellt und den gesamten Zahlungsvorgang dokumentiert. Erstellen Sie zunächst einen `PaymentIntent` auf Ihrem Server und geben Sie den einzuziehenden Betrag und die Währung an. Falls Sie bereits über eine Integration verfügen, die die [Payment Intents API](https://docs.stripe.com/payments/payment-intents.md) verwendet, fügen Sie der Liste der [Zahlungsmethoden](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types) für Ihren `PaymentIntent` die Zahlungsmethode `swish` hinzu. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=6000 \ -d currency=sek \ -d "payment_method_types[]=swish" \ -d "payment_method_data[type]=swish" \ -d "payment_method_options[swish][reference]=Order-123" ``` > #### Hinweis > > Sie können festlegen, dass die Bestellreferenz Ihren Kundinnen/Kunden in der Swish-App angezeigt wird. ### Antwort ```json { "id": "pi_12345", "amount": 6000, "client_secret": "pi_12345_secret_abcdef", "currency": "sek", "payment_method": "pm_12345", "payment_method_types": [ "swish" ], "payment_method_options": { "swish": { "reference": "Order-123", }, }, "status": "requires_confirmation" } ``` ### Client-Geheimnis abrufen Im PaymentIntent ist ein *Client-Geheimnis* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) enthalten, das auf dem Client verwendet wird, um Zahlungen sicher abzuschließen. Es gibt verschiedene Verfahren zum Übergeben des Client-Geheimnisses an den Client. #### Einseitige Anwendung Rufen Sie das Client-Geheimnis von einem Endpoint auf Ihrem Server ab, indem Sie die Browser-Funktion `fetch` verwenden. Diese Vorgehensweise funktioniert am besten, wenn es sich bei Ihrer Client-Seite um eine einseitige Anwendung handelt, insbesondere wenn sie mit einem modernen Frontend-Framework wie React erstellt wurde. Erstellen Sie den Server-Endpoint, der das Client-Geheimnis bereitstellt: #### Ruby ```ruby get '/secret' do intent = # ... Create or retrieve the PaymentIntent {client_secret: intent.client_secret}.to_json end ``` Und dann rufen Sie das Client-Geheimnis mit JavaScript auf der Client-Seite ab: ```javascript (async () => { const response = await fetch('/secret'); const {client_secret: clientSecret} = await response.json(); // Render the form using the clientSecret })(); ``` #### Serverseitiges Rendering Übergeben Sie das Client-Geheimnis von Ihrem Server an den Client. Diese Vorgehensweise funktioniert am besten, wenn Ihre Anwendung statische Inhalte auf dem Server generiert, bevor sie an den Browser gesendet werden. Fügen Sie das [client_secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) in Ihr Bezahlformular ein. Rufen Sie in Ihrem serverseitigen Code das Client-Geheimnis aus dem PaymentIntent ab: #### Ruby ```erb
``` ```ruby get '/checkout' do @intent = # ... Fetch or create the PaymentIntent erb :checkout end ``` ## PaymentIntent bestätigen Verwenden Sie die [ID](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-id) des PaymentIntent aus [Schritt 2](https://docs.stripe.com/payments/swish/accept-a-payment.md#direct-api-create-payment-intent), um den PaymentIntent zu *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). Dadurch wird erklärt, dass die Kundin/der Kunde beabsichtigt, mit der angegebenen *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) zu bezahlen. Nachdem der PaymentIntent bestätigt wurde, wird die Zahlung eingeleitet. Die [return_url](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-return_url) gibt an, wohin Stripe Nutzer/innen nach dem Zahlungsabschluss weiterleitet. Initiieren Sie die Swish-Zahlung, indem Sie den Payment Intent bestätigen. Geben Sie eine `return_url` an, an die Ihre Kundinnen und Kunden weitergeleitet werden, nachdem die Zahlung abgeschlossen ist. ```curl curl https://api.stripe.com/v1/payment_intents/{{PAYMENTINTENT_ID}}/confirm \ -u "<>:" \ --data-urlencode "return_url=https://example.com/checkout/complete" ``` ### Antwort ```json { "id": "pi_12345", "amount": 6000, "currency": "sek", "payment_method": "pm_12345", "next_action": { "swish_handle_redirect_or_display_qr_code": { "hosted_instructions_url": "https://stripe.com/hiu-pi_123", "qr_code": { "data": "abc123", "image_url_png": "https://qr.stripe.com/qr_123.png", "image_url_svg": "https://qr.stripe.com/qr_123.svg" } }, "type": "swish_handle_redirect_or_display_qr_code" }, "payment_method_types": [ "swish" ], "payment_method_options": { "swish": { "reference": "Order-123", }, }, "status": "requires_action" } ``` Um die Zahlung zu autorisieren, leiten Sie Ihre Kundin/Ihren Kunden an die URL im Feld [next_action[swish_handle_redirect_or_display_qr_code][hosted_instructions_url]](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-swish_handle_redirect_or_display_qr_code-hosted_instructions_url) weiter oder laden Sie diese Seite in einen iframe. Auf dieser Seite finden QR-Code als auch eine Schaltfläche, die Sie an die Swish-App weiterleiten können. - Desktop-Nutzer/innen können den QR-Code mit der Swish-App scannen und anschließend die Zahlung autorisieren. - Nutzer/innen mobiler Geräte können auf eine Schaltfläche klicken, die zur Swish-App weiterleitet, wo sie die Zahlung autorisieren können. > #### Hinweis > > Ihr Kunde/Ihre Kundin hat 3 Minuten Zeit, die Zahlung in der Swish-App zu autorisieren. Danach schlägt die Zahlung fehl und der Payment Intent wechselt zu `requires_payment_method`. ## Wickeln Sie die Bestellung ab [Serverseitig] [Verwenden Sie eine Methode wie Webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks), um die *Ausführung* (Fulfillment is the process of providing the goods or services purchased by a customer, typically after payment is collected) von Bestellungen abzuwickeln. Wenn eine Kundin/ein Kunde die Zahlung abschließt, wechselt der Status des `PaymentIntent` zu `succeeded` und das *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)-Ereignis [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) wird gesendet. Wenn eine Kundin/ein Kunde nicht zahlt, sendet der `PaymentIntent` das Webhook-Ereignis [payment_intent.payment_failed](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.payment_failed) und wechselt wieder in den Status `requires_payment_method`. ## Optional: Alternative Autorisierungsmethode verwenden Kundinnen und Kunden können möglicherweise keinen QR-Code scannen oder einer mobilen Weiterleitung folgen. Verwenden Sie diese alternative Autorisierungsmethode, um ihnen zu erlauben, ihre Telefonnummer einzugeben und die Swish-App manuell zu öffnen. Diese Funktion befindet sich derzeit in einer Betaversion, die nur auf Einladung verfügbar ist. [Kontaktieren Sie den Support](https://support.stripe.com/), um frühzeitigen Zugriff zu erhalten. ## Optional: Ereignisse nach der Zahlung verarbeiten Stripe übermittelt ein [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded)-Ereignis, wenn die Zahlung abgeschlossen ist. Verwenden Sie im Dashboard einen *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) oder eine Partnerlösung, um diese Ereignisse zu empfangen und Aktionen auszuführen (Versenden einer Bestellbestätigung per E-Mail an die Kund/innen, Erfassen des Verkaufs in einer Datenbank oder Einleiten des Versandablaufs). Überwachen Sie diese Ereignisse, statt auf einen Callback vom Client zu warten. Auf dem Client könnte der Kunde/die Kundin das Browserfenster schließen oder die App beenden, bevor der Callback erfolgt ist und böswillige Clients könnten die Antwort manipulieren. Wenn Sie Ihre Integration so einrichten, dass asynchrone Ereignisse überwacht werden, hilft Ihnen dies auch dabei, in Zukunft mehr Zahlungsmethoden zu akzeptieren. Hier erhalten Sie Informationen zu den [Unterschieden zwischen allen unterstützten Zahlungsmethoden](https://stripe.com/payments/payment-methods-guide). - **Manuelles Bearbeiten von Ereignissen im Dashboard** Verwenden Sie das Dashboard, um [Ihre Testzahlungen im Dashboard anzuzeigen](https://dashboard.stripe.com/test/payments), E-Mail-Belege zu senden, Auszahlungen zu bearbeiten oder fehlgeschlagene Zahlungen erneut zu versuchen. - **Erstellen eines benutzerdefinierten Webhooks** [Build a custom webhook](https://docs.stripe.com/webhooks/handling-payment-events.md#build-your-own-webhook) handler to listen for events and build custom asynchronous payment flows. Test and debug your webhook integration locally with the Stripe CLI. - **Integrieren einer vorgefertigten App** Bearbeiten Sie häufige Unternehmensereignisse, wie z. B.[Automatisierung](https://stripe.partners/?f_category=automation) oder[Marketing und Vertrieb](https://stripe.partners/?f_category=marketing-and-sales), indem Sie eine Partneranwendung integrieren. ## Optional: Integration testen 1. Testen Sie die Standard-Autorisierungsmethode. Erstellen und bestätigen Sie einen PaymentIntent mithilfe Ihrer [Test-API-Schlüssel](https://docs.stripe.com/keys.md#test-live-modes). Folgen Sie nach der Bestätigung des PaymentIntent der URL im Feld [next_action[swish_handle_redirect_or_display_qr_code][hosted_instructions_url]](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-swish_handle_redirect_or_display_qr_code-hosted_instructions_url) zu einer Testseite mit Optionen zur Autorisierung oder Ablehnung der Zahlung. - Klicken Sie auf **Authorize test payment**, um den Fall einer erfolgreichen Zahlung zu testen. Der PaymentIntent wechselt von `requires_action` zu `succeeded`. - Klicken Sie auf **Fail test payment**, um den Fall einer fehlgeschlagenen Kundenauthentifizierung zu testen. Der PaymentIntent wechselt von `requires_action` zu `requires_payment_method`. | E-Mail | Beschreibung | | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `{any_prefix}@{any_domain}` | Simuliert eine Swish-Zahlung, die eine Kundin/ein Kunde nach 1 Minute autorisiert – der *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) trifft nach ca. 1 Minute ein. In einer Produktionsumgebung wird der Webhook bereitgestellt, sobald die Zahlung autorisiert wurde. Beispiel: irgendetwas@example.com | | `{any_prefix}succeed_immediately@{any_domain}` | Simuliert eine Swish-Zahlung, die Ihr Kunde/Ihre Kundin sofort autorisiert. Der Webhook [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) trifft innerhalb weniger Sekunden ein. In der Produktionsumgebung wird dieser Webhook bereitgestellt, sobald die Zahlung autorisiert wurde. Beispiel: succeed_immediately@example.com | | `{any_prefix}expire_immediately@{any_domain}` | Simuliert eine Swish-Zahlung, die abläuft, bevor Ihre Kundin/Ihr Kunde diese autorisiert. Der Webhook [payment_intent.payment_failed](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.payment_failed) trifft innerhalb weniger Sekunden ein. Beispiel: expire_immediately@example.com | | `{any_prefix}expire_with_delay@{any_domain}` | Simuliert eine Swish-Zahlung, die abläuft, bevor Ihre Kundin/Ihr Kunde diese autorisiert. Der Webhook [payment_intent.payment_failed](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.payment_failed) trifft nach ca. 3 Minuten ein. Beispiel: expire_with_delay@example.com | ## Optional: Stornierung Sie können Swish-Zahlungen stornieren, bevor sie ablaufen, indem Sie [den PaymentIntent stornieren](https://docs.stripe.com/api/payment_intents/cancel.md), der mit der Swish-Zahlung verknüpft ist. ## Fehlgeschlagene Zahlungen Swish verwendet mehrere Datenpunkte, um zu entscheiden, wann eine Transaktion abgelehnt wird (zum Beispiel ist das Kundenguthaben auf dem Bankkonto nicht ausreichende oder die Kundin/der Kunde hat in der App auf **Abbrechen** geklickt). In diesen Fällen wird die [PaymentMethod](https://docs.stripe.com/api/payment_methods/object.md) getrennt und der Status des [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md)-Objekts wechselt automatisch zu `requires_payment_method`. Anders als bei einer abgelehnten Zahlung müssen Kundinnen/Kunden bei einem Swish-[PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) mit dem Status `requires_action` die Zahlung innerhalb von 3 Minuten nach abschließen. Wenn nach 3 Minuten keine Aktion erfolgt ist, wird die [PaymentMethod](https://docs.stripe.com/api/payment_methods/object.md) getrennt, und der Status des [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md)-Objekts wechselt automatisch zu `requires_payment_method`. # 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/swish/accept-a-payment?payment-ui=mobile&platform=ios. Swish ist eine in Schweden verwendete Zahlungsmethoden zum [einmaligen Gebrauch](https://docs.stripe.com/payments/payment-methods.md#usage). Sie bietet Kundinnen und Kunden die Möglichkeit, Zahlungen mit der mobilen Swish-App und der schwedischen mobilen BankID-App zu [authentifizieren und zu genehmigen](https://docs.stripe.com/payments/payment-methods.md#customer-actions). Sie erhalten eine [sofortige Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification), ob die Zahlung erfolgreich war oder fehlgeschlagen ist. ## Erforderliche Hinweise Um die Swish-Regeln einzuhalten, müssen Sie in Ihrem Zahlungsablauf den folgenden Text anzeigen, bevor die Kundin/der Kunde die Swish-Zahlung autorisiert: - Für englische Lokalisierungen: „Stripe Technology Europe Limited („Stripe“) has acquired the claim for payment. Therefore your payment will be made to Stripe.“ - Für schwedische Lokalisierungen: „Stripe Technology Europe Limited („Stripe“) har övertagit fordran på betalning. Din betalning görs därför till Stripe.” - Für andere Sprachen eine gleichwertige Übersetzung des Vorstehenden. Wenn Sie Swish über ein von Stripe gehostetes Zahlungsformular oder eine von Stripe gehostete Nutzeroberfläche wie [Checkout](https://docs.stripe.com/payments/checkout.md) oder das [Payment Element](https://docs.stripe.com/payments/payment-element.md) integrieren, zeigt Stripe Ihnen diesen Hinweis an. Wir empfehlen die Verwendung des [Mobile Payment Element](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=ios), eines einbettbaren Zahlungsformulars, über das Sie Swish und weitere Zahlungsmethoden mit wenig Aufwand zu Ihrer Integration hinzufügen können. In diesem Leitfaden erfahren Sie, wie Sie Swish über Ihre native Mobilanwendung akzeptieren, wenn Sie Ihr eigenes benutzerdefiniertes Zahlungsformular verwenden möchten. Wenn Sie Swish über Ihre native mobile App akzeptieren, werden Ihre Kundinnen/Kunden zur Authentifizierung an die mobile Swish-App weitergeleitet. Die Zahlung wird bei der Weiterleitung authentifiziert. Der Abschluss des Kaufs erfordert keine zusätzlichen Aktionen in der mobilen Swish-App, und die Kundinnen/Kunden werden auf Ihre Seite zurückgeleitet. ## 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 die 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 iOS SDK](https://github.com/stripe/stripe-ios) ist Open Source, [vollständig dokumentiert](https://stripe.dev/stripe-ios/index.html) und kompatibel mit Apps, die iOS 13 oder höher unterstützen. #### Swift Package Manager Führen Sie zur Installation des SDK die folgenden Schritte aus: 1. Wählen Sie in Xcode **Datei** > **Add Package Dependencies** (Paketabhängigkeiten hinzufügen) aus und geben Sie als Repository-URL `https://github.com/stripe/stripe-ios-spm` ein. 1. Wählen auf unserer [Veröffentlichungsseite](https://github.com/stripe/stripe-ios/releases) die neueste Version aus. 1. Fügen Sie das Produkt **StripePaymentsUI** zum [Ziel Ihrer App](https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app) hinzu. #### CocoaPods 1. Falls noch nicht geschehen, installieren Sie bitte die aktuellste Version von [CocoaPods](https://guides.cocoapods.org/using/getting-started.html). 1. Wenn Sie keine bestehende [Podfile](https://guides.cocoapods.org/syntax/podfile.html) haben, führen Sie folgenden Befehl aus, um eine zu erstellen: ```bash pod init ``` 1. Fügen Sie folgende Zeile in Ihre `Podfile` ein: ```podfile pod 'StripePaymentsUI' ``` 1. Führen Sie folgenden Befehl aus: ```bash pod install ``` 1. Vergessen Sie nicht, ab jetzt in Zukunft anstelle der Datei `.xcodeproj` die Datei `.xcworkspace` zum Öffnen Ihres Projekts in Xcode zu verwenden. 1. Führen Sie für zukünftige Updates auf die jeweils aktuelle Version des SDK Folgendes aus: ```bash pod update StripePaymentsUI ``` #### Carthage 1. Falls noch nicht geschehen, installieren Sie bitte die aktuelle Version von [Carthage](https://github.com/Carthage/Carthage#installing-carthage). 1. Fügen Sie folgende Zeile in Ihre `Cartfile` ein: ```cartfile github "stripe/stripe-ios" ``` 1. Befolgen Sie die [Carthage-Installationsanweisungen](https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos). Vergewissern Sie sich, dass Sie alle [hier](https://github.com/stripe/stripe-ios/tree/master/StripePaymentsUI/README.md#manual-linking) aufgeführten erforderlichen Frameworks einbetten. 1. Führen Sie für zukünftige Updates auf die aktuelle Version unseres SDK einfach folgenden Befehl aus: ```bash carthage update stripe-ios --platform ios ``` #### Manuelles Framework 1. Gehen Sie auf unsere [GitHub-Release-Seite](https://github.com/stripe/stripe-ios/releases/latest), laden Sie **Stripe.xcframework.zip** herunter und entpacken Sie die Datei. 1. Ziehen Sie **StripePaymentsUI.xcframework** in den Abschnitt **Embedded Binaries** (Eingebettete Binärdateien) der Einstellungen unter **General** (Allgemeines) Ihres Xcode-Projekts. Aktivieren Sie dabei die Option **Copy items if needed** (Elemente kopieren, falls nötig). 1. Wiederholen Sie Schritt 2 für alle [hier](https://github.com/stripe/stripe-ios/tree/master/StripePaymentsUI/README.md#manual-linking) aufgeführten erforderlichen Frameworks. 1. Wiederholen Sie für zukünftige Updates auf die jeweils aktuelle Version des SDK die Schritte 1–3. > Details zur aktuellen SDK-Version und zu vorherigen Versionen finden Sie auf der Seite [Releases](https://github.com/stripe/stripe-ios/releases) auf GitHub. Um bei Veröffentlichung einer neuen Version eine Benachrichtigung zu erhalten, [achten Sie auf die Releases zum jeweiligen Repository](https://help.github.com/en/articles/watching-and-unwatching-releases-for-a-repository#watching-releases-for-a-repository). Konfigurieren Sie das SDK mit Ihrem [veröffentlichbaren Schlüssel](https://dashboard.stripe.com/test/apikeys) von Stripe, um es beim Start der App auszuführen. Dadurch kann Ihre App Anfragen an die Stripe-API senden. #### Swift ```swift import UIKitimportStripePaymentsUI @main class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {StripeAPI.defaultPublishableKey = "<>" // do any other necessary launch configuration return true } } ``` > 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. ## Erstellen Sie ein PaymentIntent [Serverseitig] [Clientseitig] ### Serverseitig Ein [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) ist ein Objekt, das Ihre Absicht, eine Kundenzahlung einzuziehen, repräsentiert und den gesamten Zahlungsvorgang dokumentiert. So erstellen und bestätigen Sie einen `PaymentIntent` auf Ihrem Server: - Geben Sie den einzuziehenden Betrag und die Währung an. - Fügen Sie `swish` zur Liste der [Zahlungsmethoden](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types) für Ihren `PaymentIntent` hinzu. Vergewissern Sie sich, dass Swish im [Dashboard](https://dashboard.stripe.com/settings/payment_methods) aktiviert ist. - Setzen Sie `payment_method_data[type]` auf `swish`, um eine *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) zu erstellen und diese sofort mit diesem PaymentIntent zu verwenden. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=6000 \ -d currency=sek \ -d "payment_method_types[]=swish" \ -d "payment_method_data[type]=swish" \ --data-urlencode "return_url=payments-example://stripe-redirect" ``` Der zurückgegebene PaymentIntent enthält ein *Client-Geheimnis* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)), das Sie verwenden werden, um den PaymentIntent zu *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). Übermitteln Sie das Client-Geheimnis zurück an den Client, damit Sie es im nächsten Schritt verwenden können. ### Clientseitig Fordern Sie auf dem Client einen PaymentIntent von Ihrem Server an und speichern Sie sein *Client-Geheimnis* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)). #### Swift ```swift class CheckoutViewController: UIViewController { var paymentIntentClientSecret: String? // ...continued from previous step override func viewDidLoad() { // ...continued from previous step startCheckout() } func startCheckout() { // Request a PaymentIntent from your server and store its client secret // Click View full sample to see a complete implementation } } ``` ## Zahlung an Stripe senden [Clientseitig] Wenn Kundinnen/Kunden die Schaltfläche zum Bezahlen mit Swish antippen, bestätigen Sie den `PaymentIntent`, um die Zahlung abzuschließen. Konfigurieren Sie ein `STPPaymentIntentParams`-Objekt mit dem [Client-Geheimnis](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) des `PaymentIntent`. Das Client-Geheimnis unterscheidet sich von Ihren API-Schlüsseln, die die Stripe API-Anfragen authentifizieren. Achten Sie auf einen vorsichtigen Umgang mit dem Client-Geheimnis, da mit ihm die Zahlungen abgeschlossen werden können. Es darf nicht protokolliert, in URLs eingebettet oder anderen Personen zugänglich gemacht werden. ### Rückgabe-URL einrichten Das iOS SDK zeigt zur Durchführung einer Zahlung per Swish eine Webansicht in Ihrer App an. Wenn die Authentifizierung abgeschlossen ist, muss Ihre Kundin/Ihr Kunde sie nicht schließen, da dies automatisch geschieht. Um dieses Verhalten zu aktivieren, konfigurieren Sie ein benutzerdefiniertes URL-Schema oder einen Universal-Link und richten Sie Ihre App so ein, dass die URL an das SDK weitergeleitet wird. #### Swift ```swift // This method handles opening custom URL schemes (for example, "your-app://stripe-redirect") func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { let stripeHandled = StripeAPI.handleURLCallback(with: url) if (stripeHandled) { return true } else { // This was not a Stripe url – handle the URL normally as you would } return false } // This method handles opening universal link URLs (for example, "https://example.com/stripe_ios_callback") func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { if userActivity.activityType == NSUserActivityTypeBrowsingWeb { if let url = userActivity.webpageURL { let stripeHandled = StripeAPI.handleURLCallback(with: url) if (stripeHandled) { return true } else { // This was not a Stripe url – handle the URL normally as you would } } } return false } ``` Übergeben Sie die URL als `return_url`, wenn Sie den PaymentIntent bestätigen. Nach Abschluss der Authentifizierung über die Webansicht leitet Stripe die Nutzer/innen an die `return_url` weiter. ### Swish-Zahlung bestätigen Führen Sie durch Aufrufen von `STPPaymentHandler confirmPayment` die Zahlung durch. Dies entspricht einer Webansicht, über die die Kundinnen/Kunden die Zahlung per Swish durchführen können. Danach wird der Completion-Block mit dem Ergebnis der Zahlung aufgerufen. #### Swift ```swift let paymentIntentParams = STPPaymentIntentParams(clientSecret: paymentIntentClientSecret) // Swish doesn't require additional parameters so we only need to pass the initialized // STPPaymentMethodSwishParams instance to STPPaymentMethodParams let swish = STPPaymentMethodSwishParams() let paymentMethodParams = STPPaymentMethodParams(swish: swish, billingDetails: nil, metadata: nil) paymentIntentParams.paymentMethodParams = paymentMethodParams paymentIntentParams.returnURL = "payments-example://stripe-redirect" STPPaymentHandler.shared().confirmPayment(paymentIntentParams, with: self) { (handlerStatus, paymentIntent, error) in switch handlerStatus { case .succeeded: // Payment succeeded // ... case .canceled: // Payment canceled // ... case .failed: // Payment failed // ... @unknown default: fatalError() } } ``` ## Optional: Ereignisse nach der Zahlung verarbeiten Stripe übermittelt ein [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded)-Ereignis, wenn die Zahlung abgeschlossen ist. Verwenden Sie im Dashboard einen *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) oder eine Partnerlösung, um diese Ereignisse zu empfangen und Aktionen auszuführen (Versenden einer Bestellbestätigung per E-Mail an die Kund/innen, Erfassen des Verkaufs in einer Datenbank oder Einleiten des Versandablaufs). Überwachen Sie diese Ereignisse, statt auf einen Callback vom Client zu warten. Auf dem Client könnte der Kunde/die Kundin das Browserfenster schließen oder die App beenden, bevor der Callback erfolgt ist und böswillige Clients könnten die Antwort manipulieren. Wenn Sie Ihre Integration so einrichten, dass asynchrone Ereignisse überwacht werden, hilft Ihnen dies auch dabei, in Zukunft mehr Zahlungsmethoden zu akzeptieren. Hier erhalten Sie Informationen zu den [Unterschieden zwischen allen unterstützten Zahlungsmethoden](https://stripe.com/payments/payment-methods-guide). - **Manuelles Bearbeiten von Ereignissen im Dashboard** Verwenden Sie das Dashboard, um [Ihre Testzahlungen im Dashboard anzuzeigen](https://dashboard.stripe.com/test/payments), E-Mail-Belege zu senden, Auszahlungen zu bearbeiten oder fehlgeschlagene Zahlungen erneut zu versuchen. - **Erstellen eines benutzerdefinierten Webhooks** [Build a custom webhook](https://docs.stripe.com/webhooks/handling-payment-events.md#build-your-own-webhook) handler to listen for events and build custom asynchronous payment flows. Test and debug your webhook integration locally with the Stripe CLI. - **Integrieren einer vorgefertigten App** Bearbeiten Sie häufige Unternehmensereignisse, wie z. B.[Automatisierung](https://stripe.partners/?f_category=automation) oder[Marketing und Vertrieb](https://stripe.partners/?f_category=marketing-and-sales), indem Sie eine Partneranwendung integrieren. ## Optional: Integration testen Testen Sie Ihre Swish-Integration mit Ihren Test-API-Schlüsseln, indem Sie die Weiterleitungsseite anzeigen. Den Fall einer erfolgreichen Zahlung testen Sie, indem Sie die Zahlung auf der Weiterleitungsseite authentifizieren. Der [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) wechselt dann 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 die Weiterleitungsseite an. Klicken Sie auf der Weiterleitungsseite auf **Testzahlung fehlschlagen lassen**. Der [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) wechselt dann von `requires_action` zu `requires_payment_method`. Wenn Sie im Live-Modus auf **Bezahlen** tippen, werden Sie zur mobilen App von Swish weitergeleitet. Dort können Sie die Zahlung genehmigen oder ablehnen. ## Optional: Kündigung Sie können Swish-Zahlungen stornieren, bevor sie ablaufen, indem Sie [den PaymentIntent stornieren](https://docs.stripe.com/api/payment_intents/cancel.md), der mit der Swish-Zahlung verknüpft ist. ## Fehlgeschlagene Zahlungen Swish verwendet mehrere Datenpunkte, um zu entscheiden, wann eine Transaktion abgelehnt wird (zum Beispiel ist das Kundenguthaben auf dem Bankkonto nicht ausreichende oder die Kundin/der Kunde hat in der App auf **Abbrechen** geklickt). In diesen Fällen wird die [PaymentMethod](https://docs.stripe.com/api/payment_methods/object.md) getrennt und der Status des [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md)-Objekts wechselt automatisch zu `requires_payment_method`. Anders als bei einer abgelehnten Zahlung müssen Kundinnen/Kunden bei einem Swish-[PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) mit dem Status `requires_action` die Zahlung innerhalb von 3 Minuten nach abschließen. Wenn nach 3 Minuten keine Aktion erfolgt ist, wird die [PaymentMethod](https://docs.stripe.com/api/payment_methods/object.md) getrennt, und der Status des [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md)-Objekts wechselt automatisch zu `requires_payment_method`. # 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/swish/accept-a-payment?payment-ui=mobile&platform=android. Swish ist eine in Schweden verwendete Zahlungsmethoden zum [einmaligen Gebrauch](https://docs.stripe.com/payments/payment-methods.md#usage). Sie bietet Kundinnen und Kunden die Möglichkeit, Zahlungen mit der mobilen Swish-App und der schwedischen mobilen BankID-App zu [authentifizieren und zu genehmigen](https://docs.stripe.com/payments/payment-methods.md#customer-actions). Sie erhalten eine [sofortige Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification), ob die Zahlung erfolgreich war oder fehlgeschlagen ist. ## Erforderliche Hinweise Um die Swish-Regeln einzuhalten, müssen Sie in Ihrem Zahlungsablauf den folgenden Text anzeigen, bevor die Kundin/der Kunde die Swish-Zahlung autorisiert: - Für englische Lokalisierungen: „Stripe Technology Europe Limited („Stripe“) has acquired the claim for payment. Therefore your payment will be made to Stripe.“ - Für schwedische Lokalisierungen: „Stripe Technology Europe Limited („Stripe“) har övertagit fordran på betalning. Din betalning görs därför till Stripe.” - Für andere Sprachen eine gleichwertige Übersetzung des Vorstehenden. Wenn Sie Swish über ein von Stripe gehostetes Zahlungsformular oder eine von Stripe gehostete Nutzeroberfläche wie [Checkout](https://docs.stripe.com/payments/checkout.md) oder das [Payment Element](https://docs.stripe.com/payments/payment-element.md) integrieren, zeigt Stripe Ihnen diesen Hinweis an. Wir empfehlen die Verwendung des [Mobile Payment Element](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=android), eines einbettbaren Zahlungsformulars, über das Sie Swish und weitere Zahlungsmethoden mit wenig Aufwand zu Ihrer Integration hinzufügen können. In diesem Leitfaden erfahren Sie, wie Sie Swish über Ihre native Mobilanwendung akzeptieren, wenn Sie Ihr eigenes benutzerdefiniertes Zahlungsformular verwenden möchten. Wenn Sie Swish mit Ihrer nativen App für Mobilgeräte akzeptieren, werden Ihre Kundinnen/Kunden zur Authentifizierung an die App von Swish weitergeleitet. Die Zahlung wird während der Weiterleitung authentifiziert. In der mobilen Swish-App sind keine weiteren Schritte erforderlich, um den Kauf abzuschließen. Anschließend werden die Kundinnen/Kunden auf Ihre Seite zurückgeleitet. ## 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. ## Erstellen Sie ein PaymentIntent [Serverseitig] [Clientseitig] ### Serverseitig Ein [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) ist ein Objekt, das Ihre Absicht, eine Kundenzahlung einzuziehen, repräsentiert und den gesamten Zahlungsvorgang dokumentiert. So erstellen und bestätigen Sie einen `PaymentIntent` auf Ihrem Server: - Geben Sie den einzuziehenden Betrag und die Währung an. - Fügen Sie `swish` zur Liste der [Zahlungsmethoden](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types) für Ihren `PaymentIntent` hinzu. Vergewissern Sie sich, dass Swish im [Dashboard](https://dashboard.stripe.com/settings/payment_methods) aktiviert ist. - Setzen Sie `payment_method_data[type]` auf `swish`, um eine *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) zu erstellen und diese sofort mit diesem PaymentIntent zu verwenden. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=6000 \ -d currency=sek \ -d "payment_method_types[]=swish" \ -d "payment_method_data[type]=swish" \ -d "payment_method_options[swish][reference]=Order-123" ``` Der zurückgegebene PaymentIntent enthält ein *Client-Geheimnis* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)), das Sie verwenden werden, um den PaymentIntent zu *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). Übermitteln Sie das Client-Geheimnis zurück an den Client, damit Sie es im nächsten Schritt verwenden können. ### Clientseitig Fordern Sie auf dem Client einen PaymentIntent von Ihrem Server an und speichern Sie sein *Client-Geheimnis* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)). #### Kotlin ```kotlin class CheckoutActivity : AppCompatActivity() { private lateinit var paymentIntentClientSecret: String override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... startCheckout() } private fun startCheckout() { // Request a PaymentIntent from your server and store its client secret in paymentIntentClientSecret // Click View full sample to see a complete implementation } } ``` ## Zahlung an Stripe senden [Clientseitig] Wenn Kundinnen/Kunden die Schaltfläche zum Bezahlen mit Swish antippen, bestätigen Sie den `PaymentIntent`, um die Zahlung abzuschließen. Konfigurieren Sie ein `ConfirmPaymentIntentParams`-Objekt mit dem [Client-Geheimnis](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) des `PaymentIntent`. Das Client-Geheimnis unterscheidet sich von Ihren API-Schlüsseln, die die Stripe API-Anfragen authentifizieren. Achten Sie auf einen vorsichtigen Umgang mit dem Client-Geheimnis, da mit ihm die Zahlungen abgeschlossen werden können. Es darf nicht protokolliert, in URLs eingebettet oder anderen Personen zugänglich gemacht werden. ### Swish-Zahlung bestätigen Schließen Sie die Zahlung ab, indem Sie [PaymentLauncher bestätigen](https://stripe.dev/stripe-android/payments-core/com.stripe.android.payments.paymentlauncher/-payment-launcher/confirm.html) aufrufen. Dies entspricht einer Webansicht, über die die Kundinnen/Kunden Zahlungen mit Swish durchführen können. Nach Abschluss wird der angegebene `PaymentResultCallback` mit dem Ergebnis der Zahlung aufgerufen. #### Kotlin ```kotlin class CheckoutActivity : AppCompatActivity() { // ... private val paymentLauncher: PaymentLauncher by lazy { val paymentConfiguration = PaymentConfiguration.getInstance(applicationContext) PaymentLauncher.create( activity = this, publishableKey = paymentConfiguration.publishableKey, stripeAccountId = paymentConfiguration.stripeAccountId, callback = ::onPaymentResult, ) } // … private fun startCheckout() { // ... val swishParams = PaymentMethodCreateParams.createSwish() val confirmParams = ConfirmPaymentIntentParams .createWithPaymentMethodCreateParams( paymentMethodCreateParams = swishParams, clientSecret = paymentIntentClientSecret, // Add a mandate ID or MandateDataParams if you // want to set this up for future use… ) paymentLauncher.confirm(confirmParams) } private fun onPaymentResult(paymentResult: PaymentResult) { // Handle the payment result… } } ``` ## Optional: Ereignisse nach der Zahlung verarbeiten Stripe übermittelt ein [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded)-Ereignis, wenn die Zahlung abgeschlossen ist. Verwenden Sie im Dashboard einen *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) oder eine Partnerlösung, um diese Ereignisse zu empfangen und Aktionen auszuführen (Versenden einer Bestellbestätigung per E-Mail an die Kund/innen, Erfassen des Verkaufs in einer Datenbank oder Einleiten des Versandablaufs). Überwachen Sie diese Ereignisse, statt auf einen Callback vom Client zu warten. Auf dem Client könnte der Kunde/die Kundin das Browserfenster schließen oder die App beenden, bevor der Callback erfolgt ist und böswillige Clients könnten die Antwort manipulieren. Wenn Sie Ihre Integration so einrichten, dass asynchrone Ereignisse überwacht werden, hilft Ihnen dies auch dabei, in Zukunft mehr Zahlungsmethoden zu akzeptieren. Hier erhalten Sie Informationen zu den [Unterschieden zwischen allen unterstützten Zahlungsmethoden](https://stripe.com/payments/payment-methods-guide). - **Manuelles Bearbeiten von Ereignissen im Dashboard** Verwenden Sie das Dashboard, um [Ihre Testzahlungen im Dashboard anzuzeigen](https://dashboard.stripe.com/test/payments), E-Mail-Belege zu senden, Auszahlungen zu bearbeiten oder fehlgeschlagene Zahlungen erneut zu versuchen. - **Erstellen eines benutzerdefinierten Webhooks** [Build a custom webhook](https://docs.stripe.com/webhooks/handling-payment-events.md#build-your-own-webhook) handler to listen for events and build custom asynchronous payment flows. Test and debug your webhook integration locally with the Stripe CLI. - **Integrieren einer vorgefertigten App** Bearbeiten Sie häufige Unternehmensereignisse, wie z. B.[Automatisierung](https://stripe.partners/?f_category=automation) oder[Marketing und Vertrieb](https://stripe.partners/?f_category=marketing-and-sales), indem Sie eine Partneranwendung integrieren. ## Optional: Integration testen Testen Sie Ihre Swish-Integration mit Ihren Test-API-Schlüsseln, indem Sie die Weiterleitungsseite anzeigen. Den Fall einer erfolgreichen Zahlung testen Sie, indem Sie die Zahlung auf der Weiterleitungsseite authentifizieren. Der [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) wechselt dann 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 die Weiterleitungsseite an. Klicken Sie auf der Weiterleitungsseite auf **Testzahlung fehlschlagen lassen**. Der [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) wechselt dann von `requires_action` zu `requires_payment_method`. Wenn Sie im Live-Modus auf **Bezahlen** tippen, werden Sie zur mobilen App von Swish weitergeleitet. Dort können Sie die Zahlung genehmigen oder ablehnen. ## Optional: Kündigung Sie können Swish-Zahlungen stornieren, bevor sie ablaufen, indem Sie [den PaymentIntent stornieren](https://docs.stripe.com/api/payment_intents/cancel.md), der mit der Swish-Zahlung verknüpft ist. ## Fehlgeschlagene Zahlungen Swish verwendet mehrere Datenpunkte, um zu entscheiden, wann eine Transaktion abgelehnt wird (zum Beispiel ist das Kundenguthaben auf dem Bankkonto nicht ausreichende oder die Kundin/der Kunde hat in der App auf **Abbrechen** geklickt). In diesen Fällen wird die [PaymentMethod](https://docs.stripe.com/api/payment_methods/object.md) getrennt und der Status des [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md)-Objekts wechselt automatisch zu `requires_payment_method`. Anders als bei einer abgelehnten Zahlung müssen Kundinnen/Kunden bei einem Swish-[PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) mit dem Status `requires_action` die Zahlung innerhalb von 3 Minuten nach abschließen. Wenn nach 3 Minuten keine Aktion erfolgt ist, wird die [PaymentMethod](https://docs.stripe.com/api/payment_methods/object.md) getrennt, und der Status des [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md)-Objekts wechselt automatisch zu `requires_payment_method`. # React Native > This is a React Native for when payment-ui is mobile and platform is react-native. View the full page at https://docs.stripe.com/payments/swish/accept-a-payment?payment-ui=mobile&platform=react-native. Swish ist eine in Schweden verwendete Zahlungsmethoden zum [einmaligen Gebrauch](https://docs.stripe.com/payments/payment-methods.md#usage). Sie bietet Kundinnen und Kunden die Möglichkeit, Zahlungen mit der mobilen Swish-App und der schwedischen mobilen BankID-App zu [authentifizieren und zu genehmigen](https://docs.stripe.com/payments/payment-methods.md#customer-actions). Sie erhalten eine [sofortige Benachrichtigung](https://docs.stripe.com/payments/payment-methods.md#payment-notification), ob die Zahlung erfolgreich war oder fehlgeschlagen ist. ## Erforderliche Hinweise Um die Swish-Regeln einzuhalten, müssen Sie in Ihrem Zahlungsablauf den folgenden Text anzeigen, bevor die Kundin/der Kunde die Swish-Zahlung autorisiert: - Für englische Lokalisierungen: „Stripe Technology Europe Limited („Stripe“) has acquired the claim for payment. Therefore your payment will be made to Stripe.“ - Für schwedische Lokalisierungen: „Stripe Technology Europe Limited („Stripe“) har övertagit fordran på betalning. Din betalning görs därför till Stripe.” - Für andere Sprachen eine gleichwertige Übersetzung des Vorstehenden. Wenn Sie Swish über ein von Stripe gehostetes Zahlungsformular oder eine von Stripe gehostete Nutzeroberfläche wie [Checkout](https://docs.stripe.com/payments/checkout.md) oder das [Payment Element](https://docs.stripe.com/payments/payment-element.md) integrieren, zeigt Stripe Ihnen diesen Hinweis an. ## Stripe einrichten [Serverseitig] [Clientseitig] Zunächst benötigen Sie ein Stripe-Konto. [Registrieren Sie sich jetzt](https://dashboard.stripe.com/register). ### Serverseitig Für diese Integration sind Endpoints auf Ihrem Server erforderlich, 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 [React Native SDK](https://github.com/stripe/stripe-react-native) ist Open Source und vollständig dokumentiert. Intern werden [native iOS](https://github.com/stripe/stripe-ios) und [Android](https://github.com/stripe/stripe-android) SDKs verwendet. Um das React Native SDK von Stripe zu installieren, führen Sie einen der folgenden Befehle im Verzeichnis Ihres Projekts aus (je nachdem, welchen Paket-Manager Sie verwenden): #### yarn ```bash yarn add @stripe/stripe-react-native ``` #### npm ```bash npm install @stripe/stripe-react-native ``` Installieren Sie als Nächstes einige weitere erforderliche Abhängigkeiten: - Für iOS wechseln Sie in das Verzeichnis **ios** und führen Sie `pod install` aus, um sicherzustellen, dass Sie auch die erforderlichen nativen Dependencies installiert haben. - Für Android müssen keine Abhängigkeiten mehr installiert werden. > Wir empfehlen Ihnen, die [offizielle Anleitung zu TypeScript](https://reactnative.dev/docs/typescript#adding-typescript-to-an-existing-project) zu befolgen, um TypeScript zu unterstützen. ### Stripe Initialisierung Um Stripe in Ihrer React Native-App zu initialisieren, umschließen Sie entweder Ihren Zahlungsbildschirm mit der Komponente `StripeProvider` oder verwenden Sie die Initialisierungsmethode `initStripe`. Nur der [veröffentlichbare API-Schlüssel](https://docs.stripe.com/keys.md#obtain-api-keys) in `publishableKey` ist erforderlich. Das folgende Beispiel zeigt, wie Stripe mithilfe der Komponente `StripeProvider` initialisiert wird. ```jsx import { useState, useEffect } from 'react'; import { StripeProvider } from '@stripe/stripe-react-native'; function App() { const [publishableKey, setPublishableKey] = useState(''); const fetchPublishableKey = async () => { const key = await fetchKey(); // fetch key from your server here setPublishableKey(key); }; useEffect(() => { fetchPublishableKey(); }, []); return ( {/* Your app code here */} ); } ``` > Verwenden Sie Ihre API-[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. ## Erstellen Sie ein PaymentIntent [Serverseitig] [Clientseitig] ### Serverseitig Ein [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) ist ein Objekt, das Ihre Absicht, eine Kundenzahlung einzuziehen, repräsentiert und den gesamten Zahlungsvorgang dokumentiert. So erstellen und bestätigen Sie einen `PaymentIntent` auf Ihrem Server: - Geben Sie den einzuziehenden Betrag und die Währung an. - Fügen Sie `swish` zur Liste der [Zahlungsmethoden](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types) für Ihren `PaymentIntent` hinzu. Vergewissern Sie sich, dass Swish im [Dashboard](https://dashboard.stripe.com/settings/payment_methods) aktiviert ist. ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=6000 \ -d currency=sek \ -d "payment_method_types[]=swish" \ --data-urlencode "return_url=payments-example://stripe-redirect" ``` Der zurückgegebene PaymentIntent enthält ein *Client-Geheimnis* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)), das Sie verwenden werden, um den PaymentIntent zu *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). Übermitteln Sie das Client-Geheimnis zurück an den Client, damit Sie es im nächsten Schritt verwenden können. ### Clientseitig Fordern Sie auf dem Client einen PaymentIntent von Ihrem Server an und speichern Sie sein *Client-Geheimnis* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)): ```javascript function PaymentScreen() { const fetchPaymentIntentClientSecret = async () => { const response = await fetch(`${API_URL}/create-payment-intent`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ currency: 'sek', }), }); const {clientSecret} = await response.json(); return clientSecret; }; const handlePayPress = async () => { // See below }; return (