Stripe + BLIK + Przelewy24 dla małych firm — co mi zajęło 6h, a tobie zaoszczędzi tydzień
Setup płatności online dla agroturystyki, sklepu z miodem, kursu — od konta po pierwszy webhook. Konkretne walls które uderzają (BLIK over Stripe, faktury VAT, retencja danych), z linkami do dokumentacji.

Dostawałem przez ostatnie pół roku 5 razy to samo pytanie: „chcę przyjmować BLIK na stronie, jak to ugryźć". Klient prowadzi agroturystykę / pasiekę / kurs jogi i wie tylko że Stripe jest amerykański, a Przelewy24 polski, a BLIK ma być wszędzie. Tu rozkład tego co realnie wybrałem dla 4 ostatnich klientów i dlaczego.
Trzy pytania zanim wybierzesz dostawcę
- Sprzedajesz w PLN czy w EUR/USD? Jeśli głównie PL, Przelewy24 albo Stripe-z-BLIK. Jeśli mix UE, Stripe wygrywa.
- Faktury wystawiasz sam czy chcesz żeby system robił? Stripe nie wystawia faktur PL-zgodnych, Przelewy24 i Tpay tak.
- Ile transakcji miesięcznie? < 50/mc, BLIK manual link wystarczy. > 50, automation + webhook + DB.
Stripe — kiedy wybierać
Plus:
- Najlepszy DX (developer experience): docs jak z innej planety, SDK dla wszystkiego
- Webhooks działają jak prąd, niezawodne, retries, signature verification
- Dashboard po angielsku ale logiczny, raporty PDF
- Subscriptions, refunds, dispute management, wszystko out-of-the-box
- BLIK od września 2024 jest oficjalnie supportowany jako payment method
Minus:
- Faktury PL-zgodne nie istnieją, Stripe wystawia receipt, nie fakturę. Trzeba zrobić integrację z fakturownią/iFirmą/wFirmą lub Resend + template.
- 2.9% + 0.30 EUR / transakcja, drożej niż polskie bramki dla małych transakcji
- Wypłaty na konto PL co 7 dni (default), można skrócić do 2 dni
Setup BLIK on Stripe:
// app/api/checkout/route.ts
import Stripe from "stripe";
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
export async function POST(req: Request) {
const { items } = await req.json();
const session = await stripe.checkout.sessions.create({
mode: "payment",
payment_method_types: ["card", "blik", "p24"], // BLIK + Przelewy24 + karty
currency: "pln",
line_items: items.map((i) => ({
price_data: {
currency: "pln",
product_data: { name: i.name },
unit_amount: i.priceCents,
},
quantity: i.qty,
})),
success_url: `${process.env.SITE_URL}/dziekujemy?session={CHECKOUT_SESSION_ID}`,
cancel_url: `${process.env.SITE_URL}/koszyk`,
});
return Response.json({ url: session.url });
}Tyle. Stripe Checkout pokazuje w PLN BLIK kod do wpisania, P24 redirect do banku, karty Visa/Mastercard. Mobile-first.
Przelewy24 (P24) — kiedy
Plus:
- Faktury VAT generowane automatycznie po stronie P24
- Stawki 1.4-1.9% (zamiast 2.9% Stripe)
- Polski support (telefon, email po polsku)
- BLIK natywnie, Apple/Google Pay, wszystkie polskie banki przez pay-by-link
Minus:
- DX gorszy od Stripe (REST API, dokumentacja w 50% po polsku, w 50% PL/EN mix)
- Webhooks działają, ale signature verification mniej intuitive
- Subscriptions wymagają osobnego module
Setup webhook w Next.js:
// app/api/p24/webhook/route.ts
import { createHmac } from "crypto";
export async function POST(req: Request) {
const body = await req.text();
const sign = req.headers.get("x-p24-signature");
// P24 signs sha384 of (sessionId|orderId|amount|currency|crc)
const expected = createHmac("sha384", process.env.P24_CRC!)
.update(body)
.digest("hex");
if (sign !== expected) return new Response("invalid sig", { status: 401 });
const data = JSON.parse(body);
if (data.statusCode === 1) {
// payment confirmed → mark order paid in DB
await markPaid(data.orderId);
}
return new Response("ok");
}P24 ma sandbox za free, można testować end-to-end bez prawdziwych pieniędzy.
Co wybrałem dla 4 ostatnich klientów
| Klient | Wybór | Dlaczego |
|---|---|---|
| Pasieka (e-commerce miód) | P24 | Faktury VAT auto, klient nie chciał integracji z fakturownią |
| Demo agroturystyka | Stripe + BLIK | Klient targetuje też turystów z UE, EUR potrzebny |
| Sala weselna (zaliczki) | Stripe | Subskrypcje (zaliczka + dopłata), Stripe robi to elegancko |
| Klinika kosmetologiczna | P24 + manual BLIK link | Mała ilość transakcji, prostszy setup |
Pułapki, które realnie uderzają
1. „BLIK przez Stripe wymaga PL business entity." Tak, do października 2024 trzeba było polskiego NIP-u. Od końca 2024 to już nie jest wymagane (international Stripe akceptuje BLIK), ale wielu deweloperów ma stare info. Sprawdź stripe.com/docs/payments/blik.
2. „Faktury VAT z polskimi danymi nabywcy." Stripe nie zbiera NIP-u nabywcy domyślnie. Musisz custom field w Checkout albo własny formularz przed redirect. P24 ma to wbudowane.
3. „RODO i payment data." Nie przechowuj pełnych numerów kart (Stripe i P24 nigdy ich nie wysyłają w webhookach, ale czasem widzę programistów którzy logują request body bez maskowania). Trzymaj tylko last4 i brand.
4. „Refunds i podatek." Refund w Stripe = -X PLN w kasie. Ale jeśli już wystawiłeś fakturę VAT, musisz wystawić korektę. Jeśli używasz fakturowni z auto-syncem do Stripe webhooków, większość tego za ciebie zrobi.
5. „Stripe deklaracja celna." Wypłata Stripe → twoje konto PL = transfer wewnątrzunijny (Stripe Payments Europe SAS, Irlandia). Bez deklaracji celnych. Ale w PIT-cie wypłaty z Stripe to przychód, wpisuj na bieżąco.
Koszty real-world (4 klienci, 6 miesięcy)
Średnie koszty per klient za 6 miesięcy:
Pasieka (P24): 43 transakcji/mc × 89 zł avg = 3 827 zł obrót
× 1.6% = 61 zł/mc opłat
= 1.6% effective
Sala weselna (Stripe): 8 zaliczek/mc × 1500 zł = 12 000 zł
× 2.9% + 8×1.20 EUR = ~365 zł/mc
= 3.0% effective (drożej, ale subskrypcje wartość warta)P24 ma ~2x niższe opłaty na małych transakcjach. Stripe tańszy gdy transakcja > 500 zł (bo flat 1.20 EUR rozkłada się).
Decision tree w 30 sekund
- Sprzedajesz produkty fizyczne / usługi w PLN, średnia transakcja < 200 zł, liczba > 30/mc: P24
- Sprzedajesz subskrypcje, kursy, mix waluty: Stripe
- Sprzedajesz okazjonalnie (< 10/mc), klient pyta o BLIK: manual BLIK link generated z bankowości + przelew tradycyjny w stopce. Bez bramki.
- Targetujesz UE / global: Stripe, ale zintegruj fakturownię
- Małe firmy z mocnym brandem PL (lokalność istotna): P24 (klient widzi „Przelewy24" przy płatności i ufa)
Co jeszcze warto wiedzieć
- Tpay istnieje, ale zostawiam za nawias, DX gorszy od P24, ceny porównywalne, marketshare mniejszy.
- Autopay (Blue Media), używany w transporcie publicznym i parkingach, dla normalnego e-commerce raczej przegrywa z P24.
- Revolut Business ma checkout link generator, ale bez BLIK-a, nie traktuję jako alternatywę dla Stripe/P24.
- PayU, działa, polski, ale DX z 2010 roku. Tylko jeśli masz już PayU dla innych projektów i nie chce ci się migrować.
Setup tego całego jest prostszy niż wygląda. Dla pojedynczego klienta to ~6h dewelopera (Stripe full integration z fakturownią) lub ~2h (P24 podstawowy). Dla siebie zrobiłem moduł reusable który dorzucam do każdego nowego e-commerce.
Jeśli chcesz to wdrożyć dla swojej firmy, napisz. Robię też audyt istniejącego setupu (czy nic się nie sypie, czy faktury się wystawiają, czy webhooks dochodzą).