Dodawanie integracji Stripe
Stripe to platforma przetwarzania płatności online zaprojektowana dla firm internetowych. Integracja Stripe pozwala Twojej aplikacji bezpiecznie przetwarzać transakcje, subskrypcje i dane finansowe.
Kroki konfiguracji
Dział zatytułowany „Kroki konfiguracji”Po wybraniu Stripe z listy integracji pojawi się modal konfiguracji. Aby nawiązać połączenie, musisz podać następujące dane uwierzytelniające z pulpitu nawigacyjnego Stripe:
1. Tajny klucz (Secret Key)
Dział zatytułowany „1. Tajny klucz (Secret Key)”- Wprowadź: Wprowadź swój prywatny Tajny klucz Stripe (zazwyczaj zaczyna się od
sk_) w polu Secret Key. Ten klucz umożliwia backendowi uwierzytelnianie bezpiecznych żądań.
2. Klucz publikowalny (Publishable Key)
Dział zatytułowany „2. Klucz publikowalny (Publishable Key)”- Wprowadź: Wprowadź swój publiczny Klucz publikowalny Stripe (zazwyczaj zaczyna się od
pk_) w polu Publishable Key. Ten klucz jest używany do implementacji frontendu.
3. Środowisko (Environment)
Dział zatytułowany „3. Środowisko (Environment)”- Wprowadź: Wybierz odpowiedni kontekst środowiska z menu rozwijanego (np. Test dla trybu deweloperskiego/piaskownicy lub Production dla przetwarzania na żywo).
Finalizowanie połączenia
Dział zatytułowany „Finalizowanie połączenia”Po skonfigurowaniu kluczy i środowiska:
- Sprawdź pasek stanu (obecnie pokazuje Not Connected).
- Kliknij czarny przycisk Add w prawym dolnym rogu, aby zapisać dane uwierzytelniające i włączyć integrację płatności.


Referencja API integracji Stripe
Dział zatytułowany „Referencja API integracji Stripe”Zarządzanie konfiguracją
Dział zatytułowany „Zarządzanie konfiguracją”configureStripe
Dział zatytułowany „configureStripe”Tworzy nową konfigurację Stripe dla projektu i środowiska.
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_..." }}Uwagi:
- Tajny klucz jest szyfrowany za pomocą AES-256-GCM przed zapisaniem
- Tylko jedna konfiguracja na kombinację projekt/środowisko
- Zwraca błąd, jeśli konfiguracja już istnieje
updateStripeConfig
Dział zatytułowany „updateStripeConfig”Aktualizuje istniejącą konfigurację Stripe.
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!}Uwagi:
- Wszystkie pola są opcjonalne
- Aktualizowane są tylko podane pola
- Tajny klucz jest szyfrowany, jeśli zostanie podany
Zarządzanie klientami (Customer Management)
Dział zatytułowany „Zarządzanie klientami (Customer Management)”stripe_customer
Dział zatytułowany „stripe_customer”Pobiera pojedynczego klienta po ID.
Query:
query stripe_customer{ stripe_customer( id: "cus_Ts..." ) { id name email phone description metadata object createdAt }}stripe_customers
Dział zatytułowany „stripe_customers”Wyświetla listę klientów z stronicowaniem i opcjonalnym filtrowaniem.
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: Liczba zwracanych elementów (domyślnie: 10)after: Kursor do stronicowaniacustomerId: Filtrowanie po ID klienta (opcjonalne)
stripe_createCustomer
Dział zatytułowany „stripe_createCustomer”Tworzy nowego klienta.
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
Dział zatytułowany „stripe_updateCustomer”Aktualizuje istniejącego klienta.
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 }}Uwagi:
- Wszystkie pola są opcjonalne
- Aktualizowane są tylko podane pola
stripe_deleteCustomer
Dział zatytułowany „stripe_deleteCustomer”Usuwa klienta.
Mutation:
mutation stripe_deleteCustomer { stripe_deleteCustomer ( id: "cus_Ts...")}Response:
- Zwraca
truew przypadku sukcesu - Zwraca błąd, jeśli klient nie zostanie znalezion
Intencje płatności (Payment Intents)
Dział zatytułowany „Intencje płatności (Payment Intents)”stripe_paymentIntent
Dział zatytułowany „stripe_paymentIntent”Pobiera pojedynczą intencję płatności po ID.
Query:
query stripe_paymentIntent { stripe_paymentIntent ( id: "pi_3Su..." ) { id customerId paymentMethodId currency amount status metadata object clientSecret createdAt }}stripe_paymentIntents
Dział zatytułowany „stripe_paymentIntents”Wyświetla listę intencji płatności z stronicowaniem i opcjonalnym filtrowaniem.
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: Liczba zwracanych elementów (domyślnie: 10)after: Kursor do stronicowaniacustomerId: Filtrowanie po ID klienta (opcjonalne)
stripe_createPaymentIntent
Dział zatytułowany „stripe_createPaymentIntent”Tworzy nową intencję płatności.
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 }}Uwagi:
clientSecretjest zwracany do potwierdzenia we frontendzie- Użyj
automaticPaymentMethods: truedo integracji ze Stripe.js
stripe_updatePaymentIntent
Dział zatytułowany „stripe_updatePaymentIntent”Aktualizuje intencję płatności przed potwierdzeniem.
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 }}Uwagi:
- Można aktualizować tylko przed potwierdzeniem
- Wszystkie pola są opcjonalne
stripe_confirmPaymentIntent
Dział zatytułowany „stripe_confirmPaymentIntent”Potwierdza intencję płatności.
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 }}Uwagi:
- Wymagane do sfinalizowania płatności
- Może wymagać uwierzytelnienia 3D Secure
- Zwraca zaktualizowany status (succeeded, requires_action, itp.)
stripe_cancelPaymentIntent
Dział zatytułowany „stripe_cancelPaymentIntent”Anuluje intencję płatności.
Mutation:
mutation stripe_cancelPaymentIntent { stripe_cancelPaymentIntent( id: "pi_3Su..." ) { id customerId paymentMethodId currency amount status metadata object clientSecret createdAt }}Uwagi:
- Można anulować tylko intencje płatności, które nie zakończyły się sukcesem lub nie zostały jeszcze anulowane
- Status zmienia się na “canceled”
Subskrypcje
Dział zatytułowany „Subskrypcje”stripe_subscription
Dział zatytułowany „stripe_subscription”Pobiera pojedynczą subskrypcję po ID.
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
Dział zatytułowany „stripe_subscriptions”Wyświetla listę subskrypcji z stronicowaniem i opcjonalnym filtrowaniem.
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: Liczba zwracanych elementów (domyślnie: 10)after: Kursor do stronicowaniacustomerId: Filtrowanie po ID klienta (opcjonalne)status: Filtrowanie po statusie (opcjonalne)
stripe_createSubscription
Dział zatytułowany „stripe_createSubscription”Tworzy nową subskrypcję.
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 } } }}Uwagi:
paymentBehaviormoże wynosić “default_incomplete” dla subskrypcji wymagających metody płatności- Okres próbny podawany jest w dniach
- Najnowsza faktura i intencja płatności są automatycznie rozwijane
stripe_updateSubscription
Dział zatytułowany „stripe_updateSubscription”Aktualizuje istniejącą subskrypcję.
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
Dział zatytułowany „stripe_cancelSubscription”Anuluje subskrypcję.
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: ID subskrypcji (wymagane)cancelAtPeriodEnd: Jeśli true, anuluje na koniec okresu; jeśli false, anuluje natychmiast (domyślnie: false)
Uwagi:
- Natychmiastowe anulowanie: Subskrypcja kończy się teraz
- Anulowanie na koniec okresu: Subskrypcja trwa do końca bieżącego okresu
Produkty i Ceny
Dział zatytułowany „Produkty i Ceny”stripe_products
Dział zatytułowany „stripe_products”Wyświetla listę produktów z stronicowaniem.
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
Dział zatytułowany „stripe_createProduct”Tworzy nowy 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
Dział zatytułowany „stripe_prices”Wyświetla listę cen z stronicowaniem i opcjonalnym filtrowaniem.
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: Liczba zwracanych elementów (domyślnie: 10)after: Kursor do stronicowaniaproductId: Filtrowanie po ID produktu (opcjonalne)
stripe_createPrice
Dział zatytułowany „stripe_createPrice”Tworzy nową cenę.
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 } }}Uwagi:
- Pomiń
recurringdla cen jednorazowych intervalmusi być jednym z: “day”, “week”, “month”, “year”
Faktury (Invoices)
Dział zatytułowany „Faktury (Invoices)”stripe_invoice
Dział zatytułowany „stripe_invoice”Pobiera pojedynczą fakturę po ID.
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 } } }}Uwagi:
- ID subskrypcji jest wypełniane przez rozszerzenie API, jeśli jest dostępne
stripe_invoices
Dział zatytułowany „stripe_invoices”Wyświetla listę faktur z stronicowaniem i opcjonalnym filtrowaniem.
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: Liczba zwracanych elementów (domyślnie: 10)after: Kursor do stronicowaniacustomerId: Filtrowanie po ID klienta (opcjonalne)status: Filtrowanie po statusie (opcjonalne)
stripe_payInvoice
Dział zatytułowany „stripe_payInvoice”Opłaca fakturę programowo.
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 } } }}Uwagi:
- Próbuje opłacić fakturę przy użyciu domyślnej metody płatności klienta
- Zwraca błąd, jeśli płatność się nie powiedzie
- Aktualizuje status faktury na “paid” w przypadku sukcesu
Zwroty (Refunds)
Dział zatytułowany „Zwroty (Refunds)”stripe_refunds
Dział zatytułowany „stripe_refunds”Wyświetla listę zwrotów z stronicowaniem i opcjonalnym filtrowaniem.
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: Liczba zwracanych elementów (domyślnie: 10)after: Kursor do stronicowaniapaymentIntentId: Filtrowanie po ID intencji płatności (opcjonalne)
stripe_createRefund
Dział zatytułowany „stripe_createRefund”Tworzy zwrot dla intencji płatności.
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 }}Uwagi:
- Pomiń
amountdla pełnego zwrotu reasonmoże być: “duplicate”, “fraudulent”, “requested_by_customer”- Status zwrotu zaczyna się jako “pending” i zmienia się na “succeeded” lub “failed”
Metody płatności (Payment Methods)
Dział zatytułowany „Metody płatności (Payment Methods)”stripe_paymentMethods
Dział zatytułowany „stripe_paymentMethods”Wyświetla listę metod płatności z stronicowaniem i opcjonalnym filtrowaniem.
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: Liczba zwracanych elementów (domyślnie: 10)after: Kursor do stronicowaniacustomerId: Filtrowanie po ID klienta (opcjonalne)
Uwagi:
- Zwracane są tylko bezpieczne informacje o karcie (ostatnie 4 cyfry, marka, ważność)
- Pełne numery kart nigdy nie są ujawniane
stripe_attachPaymentMethod
Dział zatytułowany „stripe_attachPaymentMethod”Dołącza metodę płatności do klienta.
Mutation:
mutation stripe_attachPaymentMethod { stripe_attachPaymentMethod ( id: "pm_1Sv...", input: { customerId: "cus_Ts4..." } ) { id customerId type card { brand expMonth expYear last4 } metadata object createdAt }}Uwagi:
- Metoda płatności musi być najpierw utworzona (zazwyczaj przez Stripe.js)
- Dołączone metody płatności mogą być używane do subskrypcji i płatności
stripe_detachPaymentMethod
Dział zatytułowany „stripe_detachPaymentMethod”Odłącza metodę płatności od klienta.
Mutation:
mutation stripe_detachPaymentMethod { stripe_detachPaymentMethod ( id: "pm_1Sv..." ) { id customerId type card { brand expYear expMonth last4 } metadata object createdAt }}Uwagi:
- Odłączone metody płatności nie mogą być już używane do płatności
- Zwraca metodę płatności z
customerIdustawionym na null
Zdarzenia Webhook
Dział zatytułowany „Zdarzenia Webhook”stripe_webhookEvents
Dział zatytułowany „stripe_webhookEvents”Wyświetla listę zdarzeń webhook otrzymanych przez usługę.
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: Liczba zwracanych elementów (domyślnie: 10)after: Kursor do stronicowania
Uwagi:
- Zdarzenia są odbierane automatycznie przez punkt końcowy webhook
- Zdarzenia są przechowywane po weryfikacji podpisu
- Pole
datazawiera pełny ładunek zdarzenia jako ciąg JSON
Stronicowanie
Dział zatytułowany „Stronicowanie”Wszystkie zapytania list obsługują stronicowanie oparte na kursorze przy użyciu wzorca połączenia Relay.
PageInfo
Dział zatytułowany „PageInfo”type PageInfo { hasNextPage: Boolean! hasPreviousPage: Boolean! startCursor: String endCursor: String}Przykład użycia
Dział zatytułowany „Przykład użycia”query ListCustomers ( $first: Int, $after: String) { stripe_customers ( first: $first, after: $after ) { edges { node { id email } cursor } pageInfo { hasNextPage endCursor } }}Przepływ stronicowania:
- Początkowe żądanie:
first: 10, after: null - Użyj
pageInfo.endCursorz odpowiedzi jakoafterw następnym żądaniu - Sprawdź
hasNextPage, aby określić, czy jest więcej stron
Wartości domyślne:
first: Domyślnie 10, jeśli nie podanoafter: Zaczyna od początku, jeśli nie podano
Obsługa błędów
Dział zatytułowany „Obsługa błędów”Wszystkie operacje zwracają błędy GraphQL z przyjaznymi dla użytkownika komunikatami. Błędy są mapowane z błędów API Stripe, aby zapewnić jasne informacje zwrotne.
Typowe scenariusze błędów
Dział zatytułowany „Typowe scenariusze błędów”Błędy konfiguracji:
400: Nieprawidłowy format klucza Stripe404: Nie znaleziono projektu lub konfiguracji400: Konfiguracja już istnieje
Błędy klienta:
404: Nie znaleziono klienta400: Nieprawidłowe dane klienta
Błędy intencji płatności:
404: Nie znaleziono intencji płatności400: Nieprawidłowa kwota lub waluta402: Płatność nie powiodła się (karta odrzucona, brak środków, itp.)
Błędy subskrypcji:
404: Nie znaleziono subskrypcji400: Nieprawidłowe parametry subskrypcji400: Nie można zaktualizować anulowanej subskrypcji
Kody błędów Stripe: Typowe kody błędów Stripe są mapowane na przyjazne komunikaty:
card_declined: “Twoja karta została odrzucona”insufficient_funds: “Niewystarczające środki”invalid_number: “Nieprawidłowy numer karty”expired_card: “Karta wygasła”incorrect_cvc: “Nieprawidłowy kod CVC”
Format odpowiedzi błędu
Dział zatytułowany „Format odpowiedzi błędu”{ "errors": [ { "message": "Customer not found", "extensions": { "code": "NOT_FOUND", "stripeErrorCode": "resource_missing" } } ], "data": null}Typy danych
Dział zatytułowany „Typy danych”StripeEnvironment
Dział zatytułowany „StripeEnvironment”enum StripeEnvironment { TEST # Test mode LIVE # Live/production mode}Scalar Map
Dział zatytułowany „Scalar Map”Skalarny typ Map reprezentuje mapowanie klucz-wartość, gdzie:
- Klucze to ciągi znaków
- Wartości mogą być ciągami znaków, liczbami, wartościami logicznymi lub zagnieżdżonymi mapami
- Używane dla pól metadanych
Przykład:
{ "metadata": { "order_id": "12345", "user_id": "67890", "premium": true }}Scalar Time
Dział zatytułowany „Scalar Time”Skalarny typ Time reprezentuje znaczniki czasu w formacie ISO 8601.
Przykład: "2025-11-16T00:28:48.081Z"