TailoredApps.Shared.Payments.Provider.Stripe¶
Integracja z Stripe Checkout — globalnym operatorem płatności kartą, BLIK (PLN) i Przelewy24. Provider używa Stripe Checkout Session (hosted page).
Instalacja¶
Rejestracja w DI¶
using TailoredApps.Shared.Payments.Provider.Stripe;
builder.Services
.AddPayments()
.RegisterStripeProvider();
Konfiguracja appsettings.json¶
{
"Payments": {
"Providers": {
"Stripe": {
"SecretKey": "sk_test_...",
"WebhookSecret": "whsec_...",
"ReturnUrl": "https://myapp.com/payment/return",
"IsTest": true
}
}
}
}
| Opcja | Opis |
|---|---|
SecretKey |
Klucz API Stripe (sk_live_... lub sk_test_...) |
WebhookSecret |
Sekret endpointu webhooka (whsec_...) |
ReturnUrl |
URL powrotu po zakończeniu Checkout Session |
IsTest |
true = tryb testowy (domyślnie) |
Obsługiwane kanały¶
| Waluta | Kanały |
|---|---|
| PLN | card (Visa, Mastercard, Amex), blik, p24 (Przelewy24) |
| EUR | card, sepa_debit |
| Inne | card |
Przepływ płatności¶
RegisterPayment→ tworzy Stripe Checkout Session- Użytkownik jest przekierowany na
RedirectUrl(hosted Stripe page) - Po płatności Stripe wywołuje webhook z eventami
checkout.session.completed/payment_intent.payment_failed - Provider przetwarza webhook i zwraca
PaymentWebhookResult
Webhook¶
Stripe weryfikuje webhook przez Stripe-Signature w nagłówku. Niezbędny jest dostęp do raw body żądania HTTP.
[HttpPost("webhooks/stripe")]
public async Task<IActionResult> StripeWebhook()
{
using var reader = new StreamReader(Request.Body);
var rawBody = await reader.ReadToEndAsync();
var result = await _payments.HandleWebhookAsync("Stripe", new PaymentWebhookRequest
{
Body = rawBody,
Headers = Request.Headers.ToDictionary(h => h.Key, h => h.Value.ToString())
});
return result == PaymentWebhookResult.Fail ? BadRequest() : Ok();
}
Raw body
Do weryfikacji podpisu Stripe wymagany jest surowy body żądania. Nie używaj [FromBody] z automatyczną deserializacją JSON — zamiast tego czytaj Request.Body bezpośrednio.
🤖 AI Agent Prompt¶
## Stripe Provider — Instrukcja dla agenta AI
Provider key: "Stripe"
Sekcja konfiguracji: "Payments:Providers:Stripe"
Wymagane pola: SecretKey, WebhookSecret, ReturnUrl
Przepływ: RegisterPayment → Checkout Session → redirect → webhook
Webhook: wymaga raw body (nie [FromBody]) + nagłówek Stripe-Signature
Sandbox: IsTest = true, SecretKey = "sk_test_..."
Rejestracja: builder.Services.AddPayments().RegisterStripeProvider();