Skip to main content

Introduction

Lors de l’intégration de Stripe dans une application React, vous avez deux options principales : Stripe Checkout et Stripe Elements. Chacune a ses avantages et convient à des cas d’usage différents. Ce guide vous aidera à faire le bon choix.

Vue d’ensemble

| Critère | Stripe Checkout | Stripe Elements |
|---------|-----------------|-----------------|
| Complexité | Simple | Modérée |
| Personnalisation | Limitée | Totale |
| Hébergement | Page Stripe | Votre site |
| Temps d'intégration | ~30 min | ~2-4 heures |
| Maintenance | Stripe gère | Vous gérez |

 

Stripe Checkout

Comment ça fonctionne

Stripe Checkout redirige l’utilisateur vers une page de paiement hébergée par Stripe :
Votre site → Page Stripe → Retour vers votre site

Implémentation React

"`typescript"`

// Créer la session côté serveur
const session = await stripe.checkout.sessions.create({
  mode: 'payment',
  line_items: [{
    price_data: {
      currency: 'eur',
      unit_amount: 5000, // 50€
      product_data: { name: 'Mon produit' },
    },
    quantity: 1,
  }],
  success_url: `${domain}/success?session_id={CHECKOUT_SESSION_ID}`,
  cancel_url: `${domain}/cancel`,
});

// Retourner l'URL au frontend
return { url: session.url };
"`tsx"`

// Côté React - Simple redirection
function CheckoutButton({ amount }: { amount: number }) {
  const handleCheckout = async () => {
    const response = await fetch('/api/create-checkout-session', {
      method: 'POST',
      body: JSON.stringify({ amount }),
    });
    const { url } = await response.json();
    window.location.href = url; // Redirection vers Stripe
  };

  return <button onClick={handleCheckout}>Payer {amount}€</button>;
}

Avantages de Checkout

  • Intégration ultra-rapide : Quelques lignes de code suffisent
  • Conformité PCI automatique : Stripe gère tout
  • Toujours à jour : Nouveaux moyens de paiement ajoutés automatiquement
  • Optimisé mobile : Interface responsive parfaite
  • Multi-langues : Détection automatique de la langue
  • 3D Secure intégré : Authentification forte automatique

Inconvénients de Checkout

  • Redirection : L’utilisateur quitte votre site
  • Personnalisation limitée : Couleurs et logo uniquement
  • Moins de contrôle : Sur le flux utilisateur
  • Branding Stripe visible : Powered by Stripe

Stripe Elements

 

Comment ça fonctionne

Stripe Elements intègre les champs de paiement directement dans votre site :
Tout se passe sur votre site (iframe sécurisé Stripe)

Implémentation React

"`tsx"`

import { PaymentElement, useStripe, useElements } from '@stripe/react-stripe-js';

function PaymentForm({ clientSecret }: { clientSecret: string }) {
  const stripe = useStripe();
  const elements = useElements();
  const [loading, setLoading] = useState(false);

  const handleSubmit = async (e: React.FormEvent) => {
    e.preventDefault();
    if (!stripe || !elements) return;

    setLoading(true);

    const { error } = await stripe.confirmPayment({
      elements,
      confirmParams: {
        return_url: `${window.location.origin}/success`,
      },
    });

    if (error) {
      console.error(error.message);
    }

    setLoading(false);
  };

  return (
    <form onSubmit={handleSubmit}>
      <PaymentElement />
      <button disabled={!stripe || loading}>
        {loading ? 'Traitement...' : 'Payer'}
      </button>
    </form>
  );
}

Avantages de Checkout

  • Intégration ultra-rapide : Quelques lignes de code suffisent
  • Conformité PCI automatique : Stripe gère tout
  • Toujours à jour : Nouveaux moyens de paiement ajoutés automatiquement
  • Optimisé mobile : Interface responsive parfaite
  • Multi-langues : Détection automatique de la langue
  • 3D Secure intégré : Authentification forte automatique

Inconvénients de Checkout

  • Redirection : L’utilisateur quitte votre site
  • Personnalisation limitée : Couleurs et logo uniquement
  • Moins de contrôle : Sur le flux utilisateur
  • Branding Stripe visible : Powered by Stripe

Tableau de décision

Choisissez Stripe Checkout si :

– 🚀 Vous voulez lancer rapidement
– 💼 Vous êtes une petite équipe
– 🎨 La personnalisation n’est pas cruciale
– 🔄 Vous acceptez la redirection
– 🌍 Vous ciblez plusieurs pays (multi-devises)

Choisissez Stripe Elements si :

– 🎯 L’expérience utilisateur est prioritaire
– 🎨 Votre branding doit être cohérent
– 🔧 Vous avez les ressources pour maintenir
– 📱 Vous développez une SPA ou PWA
– 🛒 Vous avez un tunnel de conversion complexe

Comparaison des flux

Flux Checkout

1. Client clique "Payer"
2. → Redirection vers checkout.stripe.com
3. Client entre ses informations
4. Stripe traite le paiement
5. → Redirection vers success_url
6. Webhook confirme le paiement

Flux Elements

1. Client clique "Payer"
2. Formulaire Elements s'affiche (sur votre site)
3. Client entre ses informations
4. confirmPayment() envoie à Stripe
5. Stripe traite le paiement
6. Résultat retourné + webhook

 

Performance et conversion

Selon les études de cas Stripe :
| Métrique | Checkout | Elements |
|----------|----------|----------|
| Taux d'abandon | ~15-20% | ~10-15% |
| Temps de paiement moyen | 45-60s | 30-45s |
| Support mobile | Excellent | Bon (selon implémentation) |

Note : Ces chiffres varient selon le secteur et l’implémentation.

Approche hybride

Vous pouvez utiliser les deux selon le contexte :
"`typescript"`

// Checkout pour les achats simples
if (isSimplePurchase) {
  return <CheckoutButton />;
}

// Elements pour l'expérience premium
if (isPremiumExperience) {
  return <ElementsPaymentForm />;
}
"`

## Cas d'usage concrets

### E-commerce classique → Checkout

"`typescript
// Panier → Checkout → Confirmation
const session = await stripe.checkout.sessions.create({
  mode: 'payment',
  line_items: cart.items.map(item => ({
    price: item.stripePriceId,
    quantity: item.quantity,
  })),
});

 

Application SaaS → Elements

"`tsx"`

// Onboarding fluide avec Elements
<OnboardingFlow>
  <Step1 component={<AccountInfo />} />
  <Step2 component={<PlanSelection />} />
  <Step3 component={<PaymentForm />} /> {/* Elements ici */}
  <Step4 component={<Confirmation />} />
</OnboardingFlow>

Conclusion

Il n’y a pas de « meilleur » choix universel :
Stripe Checkout : Rapidité et simplicité, idéal pour démarrer
Stripe Elements : Contrôle et personnalisation, idéal pour une expérience sur mesure
La bonne nouvelle : vous pouvez toujours migrer de l’un vers l’autre. Commencez par Checkout pour valider votre modèle, puis passez à Elements si nécessaire.

 

📚 Série complète : Maîtriser Stripe avec Node.js et React

Prochaine étape recommandée :

[Chapitre 4 – Les remboursements Stripe](/blog/chapitre-4-remboursements-stripe-nodejs) pour gérer les cas d’annulation et de litige.