Hinzufügen der Stripe-Integration
Stripe ist eine Online-Zahlungsverarbeitungsplattform für Internetunternehmen. Durch die Integration von Stripe kann Ihre Anwendung Transaktionen, Abonnements und Finanzdaten sicher verarbeiten.
Konfigurationsschritte
Abschnitt betitelt „Konfigurationsschritte“Nach der Auswahl von Stripe aus der Integrationsliste erscheint ein Konfigurationsmodal. Sie müssen die folgenden Anmeldeinformationen aus Ihrem Stripe-Dashboard angeben, um die Verbindung herzustellen:
1. Geheimer Schlüssel (Secret Key)
Abschnitt betitelt „1. Geheimer Schlüssel (Secret Key)“- Eingabe: Geben Sie Ihren privaten Stripe Secret Key (beginnt normalerweise mit
sk_) in das Feld Secret Key ein. Dieser Schlüssel ermöglicht dem Backend die Authentifizierung sicherer Anfragen.
2. Veröffentlichbarer Schlüssel (Publishable Key)
Abschnitt betitelt „2. Veröffentlichbarer Schlüssel (Publishable Key)“- Eingabe: Geben Sie Ihren öffentlichen Stripe Publishable Key (beginnt normalerweise mit
pk_) in das Feld Publishable Key ein. Dieser Schlüssel wird für die Frontend-Implementierung verwendet.
3. Umgebung
Abschnitt betitelt „3. Umgebung“- Eingabe: Wählen Sie den entsprechenden Umgebungskontext aus dem Dropdown-Menü (z. B. Test für Entwicklungs-/Sandbox-Modus oder Production für Live-Verarbeitung).
Abschließen der Verbindung
Abschnitt betitelt „Abschließen der Verbindung“Sobald die Schlüssel und die Umgebung konfiguriert sind:
- Überprüfen Sie die Statusleiste (zeigt derzeit Not Connected an).
- Klicken Sie unten rechts auf die schwarze Schaltfläche Add, um die Anmeldeinformationen zu speichern und die Zahlungsintegration zu aktivieren.


Referenz der Stripe-Integrations-API
Abschnitt betitelt „Referenz der Stripe-Integrations-API“Konfigurationsmanagement
Abschnitt betitelt „Konfigurationsmanagement“configureStripe
Abschnitt betitelt „configureStripe“Erstellt eine neue Stripe-Konfiguration für das Projekt und die Umgebung.
Mutation:
mutation ConfigureStripe ( $input: ConfigureStripeInput!) { configureStripe ( input: $input ) { id publishableKey webhookUrl }}Input:
input ConfigureStripeInput { secretKey: String! # Stripe secret key (sk_test_... or sk_live_...) publishableKey: String! # Stripe publishable key (pk_test_... or pk_live_...) environment: StripeEnvironment! # TEST or LIVE webhookSecret: String # Webhook signing secret (optional)}Response:
type ConfigureStripePayload { id: ID! # Configuration ID publishableKey: String! # Publishable key webhookUrl: String! # Generated webhook URL}Example:
{ "input": { "secretKey": "sk_test_...", "publishableKey": "pk_test_...", "environment": "TEST", "webhookSecret": "whsec_..." }}Hinweise:
- Der geheime Schlüssel wird vor der Speicherung mit AES-256-GCM verschlüsselt
- Nur eine Konfiguration pro Projekt/Umgebungs-Kombination
- Gibt einen Fehler zurück, wenn die Konfiguration bereits existiert
updateStripeConfig
Abschnitt betitelt „updateStripeConfig“Aktualisiert eine bestehende Stripe-Konfiguration.
Mutation:
mutation UpdateStripeConfig ( $input: UpdateStripeConfigInput!) { updateStripeConfig ( input: $input ) { id publishableKey webhookUrl }}Input:
input UpdateStripeConfigInput { secretKey: String # Optional publishableKey: String # Optional environment: StripeEnvironment # Optional webhookSecret: String # Optional}Response:
type UpdateStripeConfigPayload { id: ID! publishableKey: String! webhookUrl: String!}Hinweise:
- Alle Felder sind optional
- Nur bereitgestellte Felder werden aktualisiert
- Geheimer Schlüssel wird verschlüsselt, falls angegeben
Kundenmanagement
Abschnitt betitelt „Kundenmanagement“stripe_customer
Abschnitt betitelt „stripe_customer“Ruft einen einzelnen Kunden per ID ab.
Query:
query stripe_customer{ stripe_customer( id: "cus_Ts..." ) { id name email phone description metadata object createdAt }}stripe_customers
Abschnitt betitelt „stripe_customers“Listet Kunden mit Paginierung und optionaler Filterung auf.
Query:
query stripe_customers ( $first: Int, $after: String, $customerId: String) { stripe_customers ( first: $first, after: $after, customerId: $customerId ) { edges { node { id name email phone description createdAt } cursor } pageInfo { hasNextPage hasPreviousPage startCursor endCursor } }}Parameters:
first: Anzahl der zurückzugebenden Elemente (Standard: 10)after: Cursor für PaginierungcustomerId: Suchen nach Kunden-ID (optional)
stripe_createCustomer
Abschnitt betitelt „stripe_createCustomer“Erstellt einen neuen Kunden.
Mutation:
mutation stripe_createCustomer { stripe_createCustomer ( input: { name: "Customer", email: "example@archie.com", phone: "+573001230001", description: "Description Example" metadata: { data1: "Example data1", data2: "Example data2" } } ) { id name email phone description metadata object createdAt }}stripe_updateCustomer
Abschnitt betitelt „stripe_updateCustomer“Aktualisiert einen bestehenden Kunden.
Mutation:
mutation stripe_updateCustomer { stripe_updateCustomer( id: "cus_Ts...", input: { name: "Customer", email: "example@archie.com", phone: "+573001230001", description:"Description Example", metadata: { data1: "Example data1 updated", data2: "Example data2 updated" } } ) { id name email phone description metadata object createdAt }}Hinweise:
- Alle Felder sind optional
- Nur bereitgestellte Felder werden aktualisiert
stripe_deleteCustomer
Abschnitt betitelt „stripe_deleteCustomer“Löscht einen Kunden.
Mutation:
mutation stripe_deleteCustomer { stripe_deleteCustomer ( id: "cus_Ts...")}Response:
- Gibt bei Erfolg
truezurück - Gibt einen Fehler zurück, wenn der Kunde nicht gefunden wird
Zahlungsabsichten (Payment Intents)
Abschnitt betitelt „Zahlungsabsichten (Payment Intents)“stripe_paymentIntent
Abschnitt betitelt „stripe_paymentIntent“Ruft eine einzelne Zahlungsabsicht per ID ab.
Query:
query stripe_paymentIntent { stripe_paymentIntent ( id: "pi_3Su..." ) { id customerId paymentMethodId currency amount status metadata object clientSecret createdAt }}stripe_paymentIntents
Abschnitt betitelt „stripe_paymentIntents“Listet Zahlungsabsichten mit Paginierung und optionaler Filterung auf.
Query:
query stripe_paymentIntents ( $first: Int, $after: String, $customerId: String) { stripe_paymentIntents ( first: $first, after: $after, customerId: $customerId ) { edges { node { id customerId paymentMethodId currency amount status metadata object clientSecret createdAt } cursor } pageInfo { hasPreviousPage hasNextPage startCursor endCursor } }}Parameters:
first: Anzahl der zurückzugebenden Elemente (Standard: 10)after: Cursor für PaginierungcustomerId: Suchen nach Kunden-ID (optional)
stripe_createPaymentIntent
Abschnitt betitelt „stripe_createPaymentIntent“Erstellt eine neue Zahlungsabsicht.
Mutation:
mutation stripe_createPaymentIntent { stripe_createPaymentIntent ( input: { amount: 12.35, currency: "usd", customerId: "cus_Ts...", paymentMethodId: "pm_1Su...", automaticPaymentMethods: true } ) { id customerId paymentMethodId currency amount status metadata object clientSecret createdAt }}Hinweise:
clientSecretwird zur Frontend-Bestätigung zurückgegeben- Verwenden Sie
automaticPaymentMethods: truefür die Integration mit Stripe.js
stripe_updatePaymentIntent
Abschnitt betitelt „stripe_updatePaymentIntent“Aktualisiert eine Zahlungsabsicht vor der Bestätigung.
Mutation:
mutation stripe_updatePaymentIntent{ stripe_updatePaymentIntent( id: "pi_3S...", input: { amount: 36.92, currency: "usd", paymentMethodId: "pm_1Su..." metadata:{ data1: "Example data1" } } ) { id customerId paymentMethodId currency amount status metadata object clientSecret createdAt }}Hinweise:
- Kann nur vor der Bestätigung aktualisiert werden
- Alle Felder sind optional
stripe_confirmPaymentIntent
Abschnitt betitelt „stripe_confirmPaymentIntent“Bestätigt eine Zahlungsabsicht.
Mutation:
mutation stripe_confirmPaymentIntent{ stripe_confirmPaymentIntent( id: "pi_3Su..." input: { paymentMethodId: "pm_1Su...", returnUrl: "http://localhost:3000/successful-payment" } ) { id customerId paymentMethodId currency amount status metadata object clientSecret createdAt }}Hinweise:
- Erforderlich zum Abschluss der Zahlung
- Möglicherweise ist eine 3D-Secure-Authentifizierung erforderlich
- Gibt den aktualisierten Status zurück (succeeded, requires_action usw.)
stripe_cancelPaymentIntent
Abschnitt betitelt „stripe_cancelPaymentIntent“Bricht eine Zahlungsabsicht ab.
Mutation:
mutation stripe_cancelPaymentIntent { stripe_cancelPaymentIntent( id: "pi_3Su..." ) { id customerId paymentMethodId currency amount status metadata object clientSecret createdAt }}Hinweise:
- Kann nur Zahlungsabsichten abbrechen, die nicht erfolgreich waren oder bereits abgebrochen wurden
- Status ändert sich zu “canceled”
Abonnements
Abschnitt betitelt „Abonnements“stripe_subscription
Abschnitt betitelt „stripe_subscription“Ruft ein einzelnes Abonnement per ID ab.
Query:
query stripe_subscription { stripe_subscription(id: "sub_1Su...") { id customerId status currentPeriodStart currentPeriodEnd createdAt cancelAtPeriodEnd metadata object items { data { id priceId quantity } } }}stripe_subscriptions
Abschnitt betitelt „stripe_subscriptions“Listet Abonnements mit Paginierung und optionaler Filterung auf.
Query:
query stripe_subscriptions ( $first: Int, $after: String, $customerId: String) { stripe_subscriptions ( first: $first, after: $after, customerId: $customerId ) { edges { node { id customerId status currentPeriodStart currentPeriodEnd createdAt cancelAtPeriodEnd metadata object items { data { id priceId quantity } } } cursor } pageInfo { hasPreviousPage hasNextPage startCursor endCursor } }}Parameters:
first: Anzahl der zurückzugebenden Elemente (Standard: 10)after: Cursor für PaginierungcustomerId: Suchen nach Kunden-ID (optional)status: Suchen nach Status (optional)
stripe_createSubscription
Abschnitt betitelt „stripe_createSubscription“Erstellt ein neues Abonnement.
Mutation:
mutation stripe_createSubscription { stripe_createSubscription ( input: { customerId: "cus_TsQ...", items: { priceId: "price_1Su...", quantity: 1 }, metadata: { data1: "Example data1" }, trialPeriodDays: 0 } ) { id customerId status currentPeriodStart currentPeriodEnd createdAt cancelAtPeriodEnd metadata object items { data { id priceId quantity } } }}Hinweise:
paymentBehaviorkann “default_incomplete” sein für Abonnements, die eine Zahlungsmethode erfordern- Testzeitraum wird in Tagen angegeben
- Neueste Rechnung und Zahlungsabsicht werden automatisch erweitert
stripe_updateSubscription
Abschnitt betitelt „stripe_updateSubscription“Aktualisiert ein bestehendes Abonnement.
Mutation:
mutation stripe_updateSubscription { stripe_updateSubscription( id: "sub_1Sv..." input: { cancelAtPeriodEnd: false metadata: { data2: "Example data2" } } ) { id customerId status currentPeriodStart currentPeriodEnd createdAt cancelAtPeriodEnd metadata object items { data { id priceId quantity } } }}stripe_cancelSubscription
Abschnitt betitelt „stripe_cancelSubscription“Kündigt ein Abonnement.
Mutation:
mutation stripe_cancelSubscription { stripe_cancelSubscription ( cancelAtPeriodEnd: true, id: "sub_1Sv..." ) { id customerId status currentPeriodStart currentPeriodEnd createdAt cancelAtPeriodEnd metadata object items { data { id priceId quantity } } }}Parameters:
id: Abonnement-ID (erforderlich)cancelAtPeriodEnd: Wenn true, Kündigung zum Periodenende; wenn false, sofortige Kündigung (Standard: false)
Hinweise:
- Sofortige Kündigung: Abonnement endet jetzt
- Kündigung zum Periodenende: Abonnement läuft bis zum Ende der aktuellen Periode
Produkte und Preise
Abschnitt betitelt „Produkte und Preise“stripe_products
Abschnitt betitelt „stripe_products“Listet Produkte mit Paginierung auf.
Query:
query stripe_products ( $first: Int, $after: String) { stripe_products ( first: $first, after: $after ) { edges { node { id name description active metadata object createdAt } cursor } pageInfo { hasPreviousPage hasNextPage startCursor endCursor } }}stripe_createProduct
Abschnitt betitelt „stripe_createProduct“Erstellt ein neues Produkt.
Mutation:
mutation stripe_createProduct { stripe_createProduct ( input: { name: "Product 01", description: "Description product 01", metadata: { data1: "Example data1" } } ) { id name description active metadata object createdAt }}stripe_prices
Abschnitt betitelt „stripe_prices“Listet Preise mit Paginierung und optionaler Filterung auf.
Query:
query stripe_prices ( $first: Int, $after: String, $productId: String) { stripe_prices ( first: $first, after: $after, productId: $productId ) { edges { node { id productId active currency unitAmount object metadata createdAt recurring { interval intervalCount } } cursor } pageInfo { hasPreviousPage hasNextPage startCursor endCursor } }}Parameters:
first: Anzahl der zurückzugebenden Elemente (Standard: 10)after: Cursor für PaginierungproductId: Suchen nach Produkt-ID (optional)
stripe_createPrice
Abschnitt betitelt „stripe_createPrice“Erstellt einen neuen Preis.
Mutation:
mutation stripe_createPrice { stripe_createPrice ( input: { productId: "prod_Tst...", unitAmount: 25.85, currency: "usd", recurring: { interval: "month", intervalCount: 1 }, metadata: { data1: "Example data1" } } ) { id productId currency unitAmount active object createdAt metadata recurring { interval intervalCount } }}Hinweise:
- Lassen Sie
recurringfür Einmalpreise weg intervalmuss eines der folgenden sein: “day”, “week”, “month”, “year”
Rechnungen (Invoices)
Abschnitt betitelt „Rechnungen (Invoices)“stripe_invoice
Abschnitt betitelt „stripe_invoice“Ruft eine einzelne Rechnung per ID ab.
Query:
query stripe_invoice { stripe_invoice ( id: "in_1Su..." ) { id customerId subscriptionId currency amountPaid amountDue status object metadata createdAt lineItems { data { id description currency amount quantity } } }}Hinweise:
- Abonnement-ID wird über API-Erweiterung gefüllt, wenn verfügbar
stripe_invoices
Abschnitt betitelt „stripe_invoices“Listet Rechnungen mit Paginierung und optionaler Filterung auf.
Query:
query stripe_invoices ( $first: Int, $after: String, $customerId: String, $status: String) { stripe_invoices ( first: $first, after: $after, customerId: $customerId, status: $status ) { edges { node { id customerId subscriptionId currency amountPaid amountDue status object metadata createdAt lineItems { data { id description currency amount quantity } } } cursor } pageInfo { hasPreviousPage hasNextPage startCursor endCursor } }}Parameters:
first: Anzahl der zurückzugebenden Elemente (Standard: 10)after: Cursor für PaginierungcustomerId: Suchen nach Kunden-ID (optional)status: Suchen nach Status (optional)
stripe_payInvoice
Abschnitt betitelt „stripe_payInvoice“Bezahlt eine Rechnung programmgesteuert.
Mutation:
mutation stripe_payInvoice { stripe_payInvoice ( id: "in_1Sv..." ) { id customerId subscriptionId currency amountPaid amountDue status object metadata createdAt lineItems { data { id description currency amount quantity } } }}Hinweise:
- Versucht, die Rechnung mit der Standardzahlungsmethode des Kunden zu bezahlen
- Gibt bei Fehlschlagen der Zahlung einen Fehler zurück
- Aktualisiert den Rechnungsstatus bei Erfolg auf “paid”
Rückerstattungen (Refunds)
Abschnitt betitelt „Rückerstattungen (Refunds)“stripe_refunds
Abschnitt betitelt „stripe_refunds“Listet Rückerstattungen mit Paginierung und optionaler Filterung auf.
Query:
query stripe_refunds ( $first: Int, $after: String, $paymentIntentId: String) { stripe_refunds ( first: $first, after: $after, paymentIntentId: $paymentIntentId ) { edges { node { id paymentIntentId reason status currency amount metadata object createdAt } cursor } pageInfo { hasPreviousPage hasNextPage startCursor endCursor } }}Parameters:
first: Anzahl der zurückzugebenden Elemente (Standard: 10)after: Cursor für PaginierungpaymentIntentId: Suchen nach Zahlungsabsichts-ID (optional)
stripe_createRefund
Abschnitt betitelt „stripe_createRefund“Erstellt eine Rückerstattung für eine Zahlungsabsicht.
Mutation:
mutation stripe_createRefund { stripe_createRefund ( input: { paymentIntentId: "pi_3Sv...", amount: 200, reason: "requested_by_customer" } ) { id reason paymentIntentId status currency amount object metadata createdAt }}Hinweise:
- Lassen Sie
amountfür vollständige Rückerstattung weg reasonkann sein: “duplicate”, “fraudulent”, “requested_by_customer”- Rückerstattungsstatus beginnt als “pending” und wird zu “succeeded” oder “failed” aktualisiert
Zahlungsmethoden (Payment Methods)
Abschnitt betitelt „Zahlungsmethoden (Payment Methods)“stripe_paymentMethods
Abschnitt betitelt „stripe_paymentMethods“Listet Zahlungsmethoden mit Paginierung und optionaler Filterung auf.
Query:
query stripe_paymentMethods ( $first: Int, $after: String, $customerId: String) { stripe_paymentMethods( first: $first, after: $after, customerId: $customerId ) { edges { node { id customerId type object metadata createdAt card { brand expMonth expYear last4 } } cursor } pageInfo { hasPreviousPage hasNextPage startCursor endCursor } }}Parameters:
first: Anzahl der zurückzugebenden Elemente (Standard: 10)after: Cursor für PaginierungcustomerId: Suchen nach Kunden-ID (optional)
Hinweise:
- Es werden nur sichere Karteninformationen zurückgegeben (letzte 4, Marke, Ablauf)
- Vollständige Kartennummern werden niemals offengelegt
stripe_attachPaymentMethod
Abschnitt betitelt „stripe_attachPaymentMethod“Fügt einem Kunden eine Zahlungsmethode hinzu.
Mutation:
mutation stripe_attachPaymentMethod { stripe_attachPaymentMethod ( id: "pm_1Sv...", input: { customerId: "cus_Ts4..." } ) { id customerId type card { brand expMonth expYear last4 } metadata object createdAt }}Hinweise:
- Zahlungsmethode muss zuerst erstellt werden (typischerweise über Stripe.js)
- Angehängte Zahlungsmethoden können für Abonnements und Zahlungen verwendet werden
stripe_detachPaymentMethod
Abschnitt betitelt „stripe_detachPaymentMethod“Entfernt eine Zahlungsmethode von einem Kunden.
Mutation:
mutation stripe_detachPaymentMethod { stripe_detachPaymentMethod ( id: "pm_1Sv..." ) { id customerId type card { brand expYear expMonth last4 } metadata object createdAt }}Hinweise:
- Entfernte Zahlungsmethoden können nicht mehr für Zahlungen verwendet werden
- Gibt die Zahlungsmethode zurück, wobei
customerIdauf null gesetzt ist
Webhook-Ereignisse
Abschnitt betitelt „Webhook-Ereignisse“stripe_webhookEvents
Abschnitt betitelt „stripe_webhookEvents“Listet vom Dienst empfangene Webhook-Ereignisse auf.
Query:
query ListWebhookEvents ( $first: Int, $after: String) { stripe_webhookEvents ( first: $first, after: $after ) { edges { node { id type data processed createdAt } cursor } pageInfo { hasNextPage hasPreviousPage endCursor } }}Response:
type StripeWebhookEvent { id: ID! type: String! # Event type (e.g., "payment_intent.succeeded") data: String! # JSON string of event data processed: Boolean! # Whether event has been processed createdAt: Time!}Parameters:
first: Anzahl der zurückzugebenden Elemente (Standard: 10)after: Cursor für Paginierung
Hinweise:
- Ereignisse werden automatisch über den Webhook-Endpunkt empfangen
- Ereignisse werden nach Signaturüberprüfung gespeichert
- Das Feld
dataenthält die vollständige Ereignisnutzlast als JSON-String
Paginierung
Abschnitt betitelt „Paginierung“Alle Listenabfragen unterstützen Paginierung per Cursor unter Verwendung des Relay-Connection-Musters.
PageInfo
Abschnitt betitelt „PageInfo“type PageInfo { hasNextPage: Boolean! hasPreviousPage: Boolean! startCursor: String endCursor: String}Verwendungsbeispiel
Abschnitt betitelt „Verwendungsbeispiel“query ListCustomers ( $first: Int, $after: String) { stripe_customers ( first: $first, after: $after ) { edges { node { id email } cursor } pageInfo { hasNextPage endCursor } }}Paginierungsfluss:
- Anfängliche Anfrage:
first: 10, after: null - Verwenden Sie
pageInfo.endCursoraus der Antwort alsafterin der nächsten Anfrage - Prüfen Sie
hasNextPage, um festzustellen, ob weitere Seiten vorhanden sind
Standardwerte:
first: Standardmäßig 10, wenn nicht angegebenafter: Beginnt von vorne, wenn nicht angegeben
Fehlerbehandlung
Abschnitt betitelt „Fehlerbehandlung“Alle Operationen geben GraphQL-Fehler mit benutzerfreundlichen Meldungen zurück. Fehler werden von Stripe-API-Fehlern zugeordnet, um klares Feedback zu geben.
Häufige Fehlerszenarien
Abschnitt betitelt „Häufige Fehlerszenarien“Konfigurationsfehler:
400: Ungültiges Stripe-Schlüsselformat404: Projekt oder Konfiguration nicht gefunden400: Konfiguration existiert bereits
Kundenfehler:
404: Kunde nicht gefunden400: Ungültige Kundendaten
Zahlungsabsichtsfehler:
404: Zahlungsabsicht nicht gefunden400: Ungültiger Betrag oder Währung402: Zahlung fehlgeschlagen (Karte abgelehnt, unzureichende Deckung usw.)
Abonnementfehler:
404: Abonnement nicht gefunden400: Ungültige Abonnementparameter400: Kann gekündigtes Abonnement nicht aktualisieren
Stripe-Fehlercodes: Gängige Stripe-Fehlercodes werden benutzerfreundlichen Meldungen zugeordnet:
card_declined: “Ihre Karte wurde abgelehnt”insufficient_funds: “Unzureichende Deckung”invalid_number: “Ungültige Kartennummer”expired_card: “Karte ist abgelaufen”incorrect_cvc: “Falscher CVC-Code”
Fehlerantwortformat
Abschnitt betitelt „Fehlerantwortformat“{ "errors": [ { "message": "Customer not found", "extensions": { "code": "NOT_FOUND", "stripeErrorCode": "resource_missing" } } ], "data": null}Datentypen
Abschnitt betitelt „Datentypen“StripeEnvironment
Abschnitt betitelt „StripeEnvironment“enum StripeEnvironment { TEST # Test mode LIVE # Live/production mode}Scalar Map
Abschnitt betitelt „Scalar Map“Der Skalartyp Map stellt eine Schlüssel-Wert-Zuordnung dar, wobei:
- Schlüssel Strings sind
- Werte Strings, Zahlen, Boolesche oder verschachtelte Maps sein können
- Wird für Metadatenfelder verwendet
Beispiel:
{ "metadata": { "order_id": "12345", "user_id": "67890", "premium": true }}Scalar Time
Abschnitt betitelt „Scalar Time“Der Skalartyp Time stellt Zeitstempel im ISO-8601-Format dar.
Beispiel: "2025-11-16T00:28:48.081Z"