TomaszKK 88bd48c1f7 add final app 2 maanden geleden
..
.mvn 88bd48c1f7 add final app 2 maanden geleden
src 88bd48c1f7 add final app 2 maanden geleden
.env.docker 88bd48c1f7 add final app 2 maanden geleden
.gitattributes 88bd48c1f7 add final app 2 maanden geleden
.gitignore 88bd48c1f7 add final app 2 maanden geleden
Dockerfile 88bd48c1f7 add final app 2 maanden geleden
README.md 88bd48c1f7 add final app 2 maanden geleden
mvnw 88bd48c1f7 add final app 2 maanden geleden
mvnw.cmd 88bd48c1f7 add final app 2 maanden geleden
pom.xml 88bd48c1f7 add final app 2 maanden geleden

README.md

Payment Service

Opis architektury

Mikroserwis odpowiedzialny za procesowanie płatności w ekosystemie przy użyciu bramki Stripe. Moduł działa w architekturze asynchronicznej – inicjuje sesję Checkout, weryfikuje kryptograficznie zdarzenia Webhook (potwierdzenia transakcji) z serwerów Stripe, aktualizuje stan lokalnej bazy danych i publikuje zdarzenia domenowe do RabbitMQ.

Stos technologiczny

  • Java 21 / Spring Boot 3.x
  • PostgreSQL (Spring Data JPA / Hibernate)
  • Stripe Java SDK
  • RabbitMQ (Spring AMQP)
  • Stripe CLI (Konteneryzacja dla środowiska deweloperskiego)

Wymagania uruchomieniowe

Do pełnego uruchomienia i testowania serwisu lokalnie (z zamknięciem obwodu Webhook) wymagane są:

  1. Instancja RabbitMQ (domyślnie port 5672).
  2. Instancja bazy PostgreSQL.
  3. Kontener Stripe CLI (działający jako tunel przekierowujący zdarzenia z chmury Stripe na Twój localhost).
  4. Plik konfiguracyjny .env w katalogu podpiętym pod Docker Compose (zawierający klucz testowy Stripe STRIPE_SECRET_KEY).

Zmienne Środowiskowe (Environment Variables)

Serwis wymaga wstrzyknięcia następujących kluczy (np. przez konfigurację Run/Debug w IntelliJ):

  • STRIPE_SECRET_KEY - Prywatny klucz API Stripe (format: sk_test_...)
  • STRIPE_WEBHOOK_SECRET - Klucz do podpisywania i weryfikacji Webhooków lokalnie (format: whsec_...)

Krytyczne dla bezpieczeństwa zespołu: Pliki .env są ignorowane przez Git (.gitignore). Nigdy nie commituj rzeczywistych kluczy do repozytorium. Pobierz je z bezpiecznego kanału komunikacji zespołu.

Endpointy API

1. Generowanie sesji płatności

Zwraca adres URL, na który frontend powinien przekierować użytkownika w celu dokonania wpłaty.

  • URL: /api/payments/create-session
  • Metoda: POST
  • Content-Type: application/json
  • Payload:

    {
    "orderId": "123e4567-e89b-12d3-a456-426614174000",
    "amount": 2137,
    "customerEmail": "klient@mail.com"
    }
    ### 2. Odbiornik Webhook (Stripe Only)
    Endpoint przeznaczony wyłącznie do komunikacji Server-to-Server z infrastrukturą Stripe.
    
    URL: /api/payments/webhook
    
    Metoda: POST
    
    Logika: Weryfikuje nagłówek Stripe-Signature. Przetwarza wyłącznie zdarzenia typu checkout.session.completed wymuszając twardą deserializację.
    
    Komunikacja Asynchroniczna (RabbitMQ)
    Po pomyślnym zaksięgowaniu wpłaty, mikroserwis działa jako Publisher, emitując zdarzenie o zmianie statusu płatności w celu zawiadomienia modułów zamówień (order-service) i powiadomień (notification-service).
    
    Exchange: payment_exchange (TopicExchange)
    
    Routing Key: payment.completed
    
    Format wiadomości (JSON):
    
    

    json

{

"orderId": "UUID",
"status": "PAID",
"amount": 150.50

} ```

Instrukcja testowania End-to-End (Lokalnie)

Uruchom tunel nasłuchujący (Stripe CLI) Wykonaj z poziomu głównego katalogu (tam gdzie docker-compose.yml):

Bash docker-compose up -d stripe-cli Pobierz Webhook Secret Odczytaj logi kontenera, aby zdobyć wygenerowany klucz kryptograficzny tunelu:

Bash docker logs stripe-cli-forwarder Skopiuj ciąg znaków rozpoczynający się od whsec_....

Uruchom aplikację Wklej skopiowany klucz jako zmienną środowiskową STRIPE_WEBHOOK_SECRET w konfiguracji uruchomieniowej Spring Boota i wystartuj serwis.

Wykonaj transakcję próbną

Użyj pliku requests.http w IntelliJ, by strzelić do endpointu /create-session.

Otwórz otrzymany link w przeglądarce.

Użyj numeru testowej karty Stripe: 4242 4242 4242 4242 (dowolna data w przyszłości, dowolny CVC).

Sprawdź konsolę payment-service - log o zaksięgowaniu wpłaty i wypchnięciu wiadomości do RabbitMQ potwierdza poprawność obwodu.