// Exemplu rapid: Redirect simplu către Stripe Checkout (backend Node.js)
const stripe = require('stripe')('sk_test_123');
async function createCheckoutSession(customerId, priceId) {
const session = await stripe.checkout.sessions.create({
customer: customerId,
payment_method_types: ['card'],
line_items: [{
price: priceId,
quantity: 1,
}],
mode: 'subscription',
tax_id_collection: {
enabled: true, // Colectează CUI pentru firmele din RO
},
success_url: 'https://saas.ro/success?session_id={CHECKOUT_SESSION_ID}',
cancel_url: 'https://saas.ro/billing',
});
return session.url; // Redirecționezi userul direct pe acest URL
}Am integrat ambele variante pe diverse SaaS-uri românești – de la MVP-uri la platforme cu peste 5.000 de clienți plătitori. Ultima oară, la un proiect B2B, am vrut să fiu șmecher și am ales Elements ca să nu trimit userul de pe site-ul meu. Am pierdut 4 zile doar testând cazurile de 3D Secure pe bănci din România (BT și BCR au uneori niște fluxuri de te ia capul pe mobil) când puteam să rezolv totul în 2 ore cu Checkout.
Hai să vedem unde merită să te complici și unde nu, mai ales că în România avem specificul nostru cu facturarea și ANAF-ul.
Stripe Checkout: MVP rapid și zero bătăi de cap cu 3D Secure
Stripe Checkout este pagina lor găzduită. Îi trimiți un API call, primești un URL, redirecționezi userul, iar el plătește acolo.
De ce îmi place:
- Zero mentenanță pe UX: Stripe optimizează constant pagina aia. Dacă apare Apple Pay sau Google Pay în browserul userului, butoanele apar singure. Pe mobil se mișcă impecabil.
- SCA și 3D Secure out-of-the-box: În Europa, reglementările sunt stricte. Checkout se ocupă de toate ferestrele modale de autorizare cerute de bănci.
- Localizare automată: Traducerea în română și monedele locale sunt rezolvate nativ.
Trade-off-ul sincer: Pierzi brandingul. Utilizatorul pleacă de pe domeniul tău (chiar dacă poți pune logo-ul tău acolo). La un SaaS mic, conversia poate scădea cu 1-2% din cauza neîncrederii când se schimbă URL-ul, dar am economisit peste 30% din timpul de build inițial.
Stripe Elements: Control total, dar ai grijă la detalii
Elements îți oferă componente UI pre-construite (câmpuri de card, inputuri) pe care le montezi direct în formularul tău de checkout din React, Vue sau vanilla JS. Userul nu părăsește site-ul.
De ce ai alege asta:
- Flux de checkout complet integrat: Poți cere datele de facturare, detalii despre companie și cardul pe aceeași pagină.
- UX premium: Sentimentul de platformă enterprise.
Unde devine nasol: Trebuie să scrii tu logica de erori. Dacă cardul e expirat, dacă nu are fonduri, dacă pică conexiunea – tu trebuie să prinzi eroarea în JS și să o afișezi frumos. La un proiect cu 1.200 de useri, am avut zeci de tichete de suport în prima lună doar pentru că scriptul nostru nu explica clar de ce a eșuat plata pe Elements, în timp ce pe Checkout Stripe le zice exact ce au de făcut.
Specificul RO: Cum facem cu CUI-ul și facturarea?
Pentru un SaaS B2B din România, marea problemă e colectarea CUI-ului (CIF) ca să poți emite factura fiscală românească (și să o trimiți în e-Factura via SmartBill/FGO).
În Stripe Checkout, poți activa opțiunea tax_id_collection. Stripe va cere codul fiscal al firmei și îl va valida prin VIES. Problema? Nu validează mereu corect firmele neînregistrate în scopuri de TVA din România direct în formular. Uneori clienții români se blochează acolo.
În Stripe Elements, tu controlezi inputurile. Poți pune un câmp simplu de „CUI”, apelezi în spate un API rapid (de exemplu, cel de la ANAF sau un serviciu terț de validare firme) și pre-completezi adresa fiscală. Abia apoi trimiți datele curate către Stripe. Pentru B2B curat în România, Elements bate Checkout la capitolul ăsta.
Verdictul meu după 10 ani de dev
Dacă ești la început, mergi pe Checkout. Nu îți pierde o săptămână scriind formulare de plată custom când nici nu știi dacă vei avea 10 clienți plătitori.
Treci la Elements doar când ai validat produsul, ai buget de dev și vrei să optimizezi la sânge rata de conversie sau ai nevoie de un flux complex de onboarding B2B unde colectezi CUI-ul înainte de plată.
Voi ce folosiți acum pe proiectele voastre? V-ați lovit de probleme cu 3D Secure la băncile noastre?