Weiter zum Inhalt
Konto erstellen oder anmelden
Das Logo der Stripe-Dokumentation
/
KI fragen
Konto erstellenAnmelden
Jetzt starten
Zahlungen
Umsatz
Plattformen und Marktplätze
Geldmanagement
Entwicklerressourcen
APIs und SDKsHilfe
Übersicht
Informationen zu Stripe Payments
Aktualisieren Sie Ihre Integration
Zahlungsanalysefunktionen
Online-Zahlungen
ÜbersichtIhren Use case findenVerwenden Sie Managed Payments
Payment Links verwenden
Vorgefertigte Checkout-Seite verwenden
Erstellen Sie eine benutzerdefinierte Integration mit Elements
In-App-Integration erstellen
    Übersicht
    Zahlungsformular
    Payment Element
    Address Element
    Payment Method Messaging Element
    Ausgehender Link für In-App-Käufe
      Fertige Bezahlseite verwenden
      Payment Links verwenden (Low-Code)
      Eigenen Ablauf erstellen
      Kundenportal nutzen
    Verwalten der Zahlungsmethoden in den Einstellungen
    Zu Confirmation Token migrieren
    Karten in den USA und Kanada
Präsenzzahlungen
Terminal
Zahlungsmethoden
Zahlungsmethoden hinzufügen
Zahlungsmethoden verwalten
Schnellerer Bezahlvorgang mit Link
Zahlungsszenarien
Umgang mit mehreren Währungen
Nutzerdefinierte Zahlungsabläufe
Flexibles Acquiring
Orchestrierung
Mehr als Zahlungen
Unternehmensgründung
Krypto
Agentenbasierter Handel
Financial Connections
Climate
Betrug verstehen
Betrugsprävention von Radar
Zahlungsanfechtungen verwalten
Identitäten verifizieren
Vereinigte Staaten
Deutsch
StartseiteZahlungenBuild an in-app integrationLink out for in-app purchases

Zahlungen für digitale Waren auf iOS mit benutzerdefiniertem Bezahlvorgang akzeptieren

Öffnen Sie Ihren eigenen benutzerdefinierten Bezahlvorgang, um digitale In-App-Waren und Abonnements mit Payment Element zu verkaufen.

Für digitale Produkte, Inhalte und Abos, die in den Vereinigten Staaten oder im Europäischen Wirtschaftsraum (EWR) verkauft werden, kann Ihre iOS-App Apple Pay über Elements akzeptieren.

Wenn Sie eine begrenzte Anzahl von Produkten und Preisen haben, können Sie stattdessen Payment Links verwenden.

In anderen Regionen kann Ihre App Apple Pay für digitale Produkte, Inhalte oder Abos nicht akzeptieren.

In diesem Leitfaden wird beschrieben, wie Sie ein Abo in Ihrer App verkaufen, indem Sie Elements verwenden, um Ihre Kundinnen und Kunden auf Ihre eigene Checkout-Seite weiterzuleiten.

Wenn Sie bereits eine eigene Checkout-Seite verwenden, die Elements nutzt, können Sie direkt zum Schritt Universelle Links einrichten springen.

Hinweis

Sollten Sie als Unternehmen neu bei Stripe sein, ein hohes Zahlungsvolumen verarbeiten und erweiterte Integrationsanforderungen haben, wenden Sie sich an unser Sales-Team

Sie werden Folgendes entwickeln

Dieser Leitfaden bietet Informationen zu den folgenden Vorgehensweisen:

  • Erfassen Sie Zahlungsinformationen mit Ihrer eigenen Zahlungsseite mithilfe von Elements.

  • Modellieren Sie Ihre Abonnements mit Produkten, Preisen und Kundinnen/Kunden.

  • Verwenden Sie Universelle Links, um von Checkout direkt an Ihre App weiterzuleiten.

  • Überwachen Sie Webhooks, um die In-App-Abonnements Ihrer Kundinnen und Kunden zu aktualisieren.

Dieser Leitfaden beschreibt nur den Prozess für den Verkauf digitaler Güter in der App. Wenn Sie eines der folgenden Produkte verkaufen, verwenden Sie stattdessen den Leitfaden für native iOS-Zahlungen:

  • Physische Waren
  • Waren und Dienste zum Verbrauch außerhalb Ihrer App
  • Echtzeit-Dienste von Person zu Person

Stripe einrichten
Serverseitig

Registrieren Sie sich zunächst für ein Stripe-Konto.

Fügen Sie dann die Stripe API-Bibliothek Ihrem Backend hinzu:

Command Line
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
# Available as a gem sudo gem install stripe
Gemfile
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
# If you use bundler, you can add this line to your Gemfile gem 'stripe'

Installieren Sie als Nächstes die Stripe CLI. Die CLI bietet die erforderlichen Webhook-Tests und kann zum Erstellen Ihrer Produkte und Preise ausgeführt werden.

Command Line
Homebrew
Aus Quelle installieren
No results
# Install Homebrew to run this command: https://brew.sh/ brew install stripe/stripe-cli/stripe # Connect the CLI to your dashboard stripe login

Weitere Installationsoptionen finden Sie unter Mit der Stripe-CLI loslegen.

Produkte und Preise erstellen

Erstellen Sie Ihre Produkte und ihre Preise im Dashboard oder mit der Stripe CLI. Dieses Beispiel verwendet ein Produkt und einen Preis, um ein Abo-Produkt mit einem monatlichen Preis von 9,99 USD darzustellen.

  1. Navigieren Sie zur Seite Produkt hinzufügen und erstellen Sie ein Abonnementprodukt mit einem monatlichen Preis von 9,99 USD.

  2. Zeichnen Sie nach Erstellung des Preises die Preis-ID auf, sodass diese in nachfolgenden Schritten verwendet werden kann. Preis-IDs sehen in etwa wie folgt aus: price_G0FvDp6vZvdwRZ.

  3. Klicken Sie als Nächstes auf In Live-Modus kopieren, um Ihr Produkt aus einer Testumgebung in den Live-Modus zu klonen.

Kundinnen/Kunden erstellen
Serverseitig

Jedes Mal, wenn Ihre Kundin/Ihre Kunde Ihre Bezahlseite aufruft, erstellen Sie ein Customer-Objekt für ihn/sie, sofern noch keines existiert.

Ihr Server muss Folgendes verarbeiten:

  • Kundenerstellung (falls es noch keine/n passende/n Stripe-Kunden/-Kundin gibt)
  • Die Abonnementerstellung befindet sich im Status incomplete.
  • Das Client-Geheimnis des PaymentIntent an das Frontend zurückgeben.
  • Webhook-Verarbeitung, damit Sie den Abonnementstatus Ihrer Kundinnen/Kunden in Ihrer eigenen Datenbank aktualisieren können.
Node.js
No results
// Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys const stripe = require('stripe')(
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
); // This assumes your app has an existing user database, which we'll call `myUserDB`. const user = myUserDB.getUser("jennyrosen"); if (!user.stripeCustomerID) { const customer = await stripe.customers.create({ name: user.name, email: user.email, }); // Set the user's Stripe Customer ID for later retrieval. user.stripeCustomerID = customer.id; }

Warnung

Speichern Sie eine Zuweisung auf Ihrem Server zwischen dem Benutzerkonto und der Stripe-Kunden-ID. Ohne eine solche Verbindung zur Zuordnung einer Kundin/eines Kunden zu einem Kauf, können Ihre Kundinnen und Kunden ihre Käufe nicht erhalten.

Ändert ein Kunde/eine Kundin seine/ihre E-Mail-Adresse auf der Checkout-Seite, aktualisiert sich das Kundenobjekt mit der neuen E-Mail-Adresse.

Abonnement erstellen
Serverseitig

Beim Erstellen eines Abonnements zur Verwendung des Payment Element übergeben Sie üblicherweise payment_behavior: 'default_incomplete'. Hierdurch wird Stripe angewiesen, ein Abonnement mit dem Status incomplete zu erstellen und einen Payment Intent für die erste Zahlung zu generieren.

Hinweis

Speichern Sie die subscription.id in Ihrer Datenbank, um zukünftige Abonnementereignisse wie Kündigungen, Upgrades und Downgrades zu verwalten.

Node.js
No results
// This example sets up an endpoint using the Express framework. const express = require('express'); const app = express(); const stripe = require('stripe')(
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
) app.post('/create-subscription', async (req, res) => { const { priceId, customerId } = req.body; // Create the subscription // setting payment_behavior to "default_incomplete" ensures we get a Payment Intent // that we can confirm on the client using the Payment Element const subscription = await stripe.subscriptions.create({ customer: customerId, items: [{ price: priceId }], payment_behavior: 'default_incomplete', expand: ['latest_invoice.payment_intent'], }); // Make sure you associate the subscription ID with the user in your database! myUserDB.addUserSubscription("jennyrosen", subscription.id); // Get the Payment Intent client secret const paymentIntent = subscription.latest_invoice.payment_intent; const clientSecret = paymentIntent.client_secret; return res.json({ subscriptionId: subscription.id, clientSecret: clientSecret, }); }); app.post('/login', async (req, res) => { // This assumes your app has an existing user database, which we'll call `myUserDB`. const token = myUserDB.login(req.body.login_details) res.json({token: token}) }); app.listen(4242, () => console.log(`Listening on port ${4242}!`));

Hinweis

Apple Pay ist standardmäßig aktiviert und wird automatisch im Payment Element angezeigt, wenn ein Kunde/eine Kundin ein unterstütztes Gerät verwendet und mindestens eine Karte in der Wallet-App gespeichert hat. Mit der Eigenschaft payment_method_types können Sie zusätzliche Zahlungsmethoden akzeptieren. Weitere Details finden Sie in der Übersicht über die Zahlungsmethoden.

Universelle Links einrichten

Universelle Links ermöglichen es Ihrer Bezahlseite einen Deep Link zu Ihrer App zu erstellen. So konfigurieren Sie einen universellen Link:

  • Fügen Sie Ihrer Domain eine apple-app-site-association-Datei hinzu.
  • Fügen Sie Ihrer App eine Berechtigung für die zugewiesenen Domains (“Associated Domains”) hinzu.
  • Fügen Sie eine Fallbackseite für Ihre Checkout-Umleitungs-URL hinzu.

Definieren Sie die zugewiesenen Domains

Fügen Sie Ihrer Domain eine Datei unter .well-known/apple-app-site-association hinzu, um die URLs zu definieren, die Ihre App verarbeitet. Stellen Sie Ihrer App-ID die Team-ID voran, die Sie auf der Mitgliedschafts-Seite des Apple Developer Portals finden.

.well-known/apple-app-site-association
{ "applinks": { "apps": [], "details": [ { "appIDs": [ "A28BC3DEF9.com.example.MyApp1", "A28BC3DEF9.com.example.MyApp1-Debug" ], "components": [ { "/": "/checkout_redirect*", "comment": "Matches any URL whose path starts with /checkout_redirect" } ] } ] } }

Sie müssen der Datei den MIME-Typ application/json hinzufügen. Mit curl -I bestätigen Sie den Inhaltstyp.

Command Line
curl -I https://example.com/.well-known/apple-app-site-association

Auf der Seite Zugewiesene Domains unterstützen von Apple finden Sie weitere Einzelheiten hierzu.

Fügen Sie Ihrer App eine Berechtigung für die zugewiesenen Domains (“Associated Domains”) hinzu.

  1. Öffnen Sie den Bereich Signierung & Kapazitäten der Zielanwendung Ihrer App.
  2. Klicken Sie auf + Funktion und wählen Sie dann Zugewiesene Domains aus.
  3. Fügen Sie der Liste der zugewiesenen Domains einen Eintrag für applinks:example.com hinzu.

Weitere Informationen zu universellen Links finden Sie auf der Seite Universelle Links von Apple.

Obgleich iOS Links an die in Ihrer apple-app-site-association-Datei definierten URLs abruft, kann es zu Situationen kommen, in denen die Umleitung Ihre App nicht öffnen kann.

Erstellen Sie eine Fallback-Seite auf Ihren success- und cancel-URLs. Sie können zum Beispiel eine /checkout_redirect/success-Seite und eine /checkout_redirect/cancel-Seite haben.

Checkout in Safari öffnen
Clientseitig

Fügen Sie Ihrer App eine Checkout-Schaltfläche hinzu. Mit dieser Schaltfläche wird Ihre nutzerdefinierte Bezahlseite in Safari geöffnet.

CheckoutView.swift
import Foundation import SwiftUI import StoreKit struct BuySubscriptionsView: View { @EnvironmentObject var myBackend: MyBackend @State var paymentComplete = false var body: some View { // Check if payments are blocked by Parental Controls on this device. if !SKPaymentQueue.canMakePayments() { Text("Payments are disabled on this device.") } else { if paymentComplete { Text("Payment complete!") } else { Button { UIApplication.shared.open("https://example.com/checkout", options: [:], completionHandler: nil) } label: { Text("Subscribe") }.onOpenURL { url in // Handle the universal link from Checkout. if url.absoluteString.contains("success") { // The payment was completed. Show a success // page and fetch the latest customer entitlements // from your server. paymentComplete = true } } } } } }

Zu Ihrer App zurückleiten
Serverseitig

Stellen Sie bei Verwendung von Elements sicher, dass Sie Nutzer/innen nach einer erfolgreichen Zahlungsbestätigung (über den registrierten universellen Link) zurück zu Ihrer App leiten.

Item 1
No results
stripe.confirmPayment({ elements, confirmParams: { // Return URL where the customer should be redirected after the PaymentIntent is confirmed. return_url: 'https://example.com/checkout_redirect/success', }, }) .then(function(result) { if (result.error) { // Inform the customer that there was an error. } });

Umgang mit Bestellabwicklung
Serverseitig

Wenn der/die Nutzer/in die erste Zahlung abschließt oder wenn nachfolgende wiederkehrende Zahlungen erfolgen, sendet Stripe beispielsweise folgende Ereignisse:

  • invoice.payment_succeeded
  • customer.subscription.updated
  • invoice.payment_failed

Überwachen Sie diese Ereignisse in Ihrem Webhook-Endpoint. Zum Beispiel:

Node.js
No results
app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => { const sig = req.headers['stripe-signature']; let event; try { event = stripe.webhooks.constructEvent(req.body, sig, process.env.STRIPE_WEBHOOK_SECRET); } catch (err) { console.error('Webhook signature verification failed.', err.message); return res.sendStatus(400); } switch (event.type) { case 'invoice.payment_succeeded': { const invoice = event.data.object; // Mark subscription as active in your database // For example, invoice.subscription -> "sub_abc123" console.log('Payment succeeded'); break; } case 'invoice.payment_failed': { const invoice = event.data.object; console.log('Payment failed - notify the user to update their payment methods'); break; } case 'customer.subscription.updated': { const subscription = event.data.object; // For example, handle pause, cancellation, or other changes console.log(`Subscription updated: ${subscription.id}`); break; } default: console.log(`Unhandled event type ${event.type}`); } res.json({ received: true }); });

Um Ihre Integration zu testen, können Sie Ereignisse im Dashboard überwachen oder die Stripe CLI verwenden. Richten Sie bei der Entwicklung in der Produktion einen Webhook-Endpoint ein und abonnieren Sie die entsprechenden Ereignistypen. Wenn Sie Ihren STRIPE_WEBHOOK_SECRET-Schlüssel nicht kennen, klicken Sie auf den Webhook im Dashboard, um ihn anzuzeigen.

Tests

So testen Sie, ob Ihre Checkout-Schaltfläche funktioniert:

  1. Klicken Sie auf die Schaltfläche zum Bezahlen, die Sie zu Ihrem Bezahlvorgang mit dem Payment Element von Stripe weiterleitet.
  2. Geben Sie die Testnummer , einen dreistelligen CVC, ein Ablaufdatum und eine gültige Postleitzahl.
  3. Tippen Sie auf Bezahlen.
  4. Der Webhook invoice.payment_succeeded wird ausgelöst und Stripe benachrichtigt Ihren Server über die Transaktion.
  5. Sie werden zu Ihrer App zurückgeleitet.

Wenn Ihre Integration nicht funktioniert, sehen Sie sich die zusätzlichen Testressourcen an.

OptionalZusätzliche Testressourcen

Sie können mehrere Testkarten verwenden, um sicherzustellen, dass Ihre Integration bereit für den Einsatz in einer Produktionsumgebung ist. Verwenden Sie sie mit einer beliebigen Prüfziffer (CVC), einer Postleitzahl und einem Ablaufdatum in der Zukunft.

Die NummerBeschreibung
Zahlung ist erfolgreich und wird sofort verarbeitet.
Für eine erfolgreiche Zahlung muss die 3D Secure 2-Authentifizierung durchgeführt werden.
Zahlung schlägt immer mit dem Ablehnungscode insufficient_funds fehl.

Eine vollständige Liste der Testkarten finden Sie im Leitfaden Testbetrieb.

Universelle Links testen

Wenn Ihr universeller Link nicht von Ihrer Bezahlseite auf Ihre App weiterleitet, prüfen Sie die SharedWebCredentials-Logs auf Fehler.

  1. Fügen Sie der Zugewiesenen Domain einen Debugging-Parameter hinzu.

    1. Öffnen Sie den Bereich Signierung & Kapazitäten der Zielanwendung Ihrer App.
    2. Fügen Sie dem Eintrag für Ihre zugewiesene Domain die Kennzeichnung ?mode=developer hinzu. (Example: applinks:example.com?mode=developer)
  2. Wechseln Sie in den Entwicklermodus.

    1. Führen Sie eine App aus Xcode auf Ihrem Gerät aus und aktivieren Sie das Entwicklermenü.
    2. Öffnen Sie auf Ihrem iPhone die Einstellungen, tippen Sie auf Entwickler und aktivieren Sie Entwicklung Zugewiesene Domains.
  3. Löschen Sie Ihre App und installieren Sie sie neu. Dadurch wird iOS die Datei apple-app-site-association erneut herunterladen.

  4. Schließen Sie den Bezahlvorgang in Ihrer App ab.

  5. Checkout leitet Sie an Ihre App weiter. Falls nicht, führen Sie eine Systemdiagnose durch.

  6. Drücken Sie gleichzeitig die Volumentasten (+ und -) und die Einschalttaste für 1 Sekunde, danach loslassen. Sie fühlen eine kurze Vibration, es wird aber kein visuelles Signal angezeigt.

  7. Warten Sie 5 Minuten, gehen Sie dann zu Einstellungen > Datenschutz > Analyse und Verbesserung > Analysedaten und scrollen Sie zur letzten Systemdiagnosedatei in der Liste.

  8. Tippen Sie die Taste Teilen, um per AirDrop die Datei auf Ihrem Computer zu speichern.

  9. Öffnen Sie das Systemdiagnosearchiv und dann swcutil_show.txt.

  10. Durchsuchen Sie diese Datei nach der ID Ihrer App. Sie sehen einen Bereich mit Debugging-Informationen für Ihre App, einschließlich etwaiger Fehlermeldungen.

Service: applinks App ID: Y28TH9SHX7.com.stripe.FruitStore App Version: 1.0 App PI: <LSPersistentIdentifier 0x115e1a390> { v = 0, t = 0x8, u = 0xc98, db = E335D78F-D49E-4F19-A150-F657E50DEDAE, {length = 8, bytes = 0x980c000000000000} } Domain: example.com?mode=developer User Approval: unspecified Site/Fmwk Approval: unspecified Flags: developer Last Checked: 2021-09-23 18:16:58 +0000 Next Check: 2021-09-23 21:21:34 +0000 Error: Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set. around line 1, column 0." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set. around line 1, column 0., NSJSONSerializationErrorIndex=0} Retries: 1

Siehe auch

  • Rabatte hinzufügen
  • Steuern einziehen
  • Steuer-IDs erfassen
  • Ihr Branding anpassen
  • Bestätigungsseite anpassen
War diese Seite hilfreich?
JaNein
  • Benötigen Sie Hilfe? Kontaktieren Sie den Kundensupport.
  • Schauen Sie sich unser Änderungsprotokoll an.
  • Fragen? Sales-Team kontaktieren.
  • LLM? Lesen Sie llms.txt.
  • Unterstützt von Markdoc