Une PME africaine qui vend des produits ou services à des clients UE/UK/US passe par Stripe — c'est l'évidence. Mais depuis l'entrée en vigueur de la PSD2 + SCA (Strong Customer Authentication) en Europe, 3DS2 est obligatoire sur la majorité des paiements EU. Mal configuré, c'est 12-18 % de paniers en échec côté SCA.
TL;DR
- SCA obligatoire pour paiements > 30 EUR depuis client UE en 2026.
- 3DS2 nécessaire = passer par
PaymentIntents+stripe-js+ Confirm Card Payment.- PME africaines : incorporer en France/IE/CI via Atlas ou structure légale.
- Taux d'échec SCA bien configuré : 2-4 % vs 12-18 % mal configuré.
Pourquoi SCA pour vous Africain qui vendez en Europe
PSD2 (Payment Services Directive 2) impose à toute transaction électronique vers un client UE :
- Authentification "forte" : 2 facteurs parmi connaissance / possession / inhérence
- 3DS2 (3D Secure 2) est l'implémentation standard
- Exemptions existent : low-value (<30 EUR), low-risk (algo banque), TRA (Transaction Risk Analysis)
Le commerçant non-UE qui vend à un client UE → SCA appliquée par la banque émettrice du client.
Étape 1 — incorporer dans un pays Stripe
Stripe ne supporte PAS l'incorporation Sénégal directement (pas dans le programme Stripe Atlas). Solutions :
| Option | Pays | Coût setup | Annuel | Notes |
|---|---|---|---|---|
| Stripe Atlas | Delaware US | $500 | $100/an + impôts | Le plus rapide |
| LLC France | France | 1500 € | 300-800 €/an | UE, langue FR |
| Société CI | Côte d'Ivoire | ~600K FCFA | ~200K/an | Stripe via Paystack CI |
| LTD UK | Royaume-Uni | 200 £ | 100-400 £/an | Hors UE depuis Brexit |
| LLC Estonie | Estonie | 300 € | 200 €/an + impôts | E-residency option |
Le choix dépend de votre marché cible et de votre fiscalité globale. Discuter avec un fiscaliste avant.
Étape 2 — implémentation PaymentIntents
`ts
// app/api/checkout/route.ts
import Stripe from 'stripe';
const stripe = new Stripe(process.env.STRIPE_SECRET!, { apiVersion: '2024-12-18.acacia' });
export async function POST(req: Request) {
const { items } = await req.json();
const total = items.reduce((sum: number, i: any) => sum + i.unitPrice * i.qty, 0);
const intent = await stripe.paymentIntents.create({
amount: total, // en cents EUR
currency: 'eur',
payment_method_types: ['card'],
automatic_payment_methods: { enabled: true },
metadata: {
order_id: 'ord_abc123',
country: 'sn', // origine commerçant
},
});
return Response.json({ clientSecret: intent.client_secret });
}
`
Étape 3 — frontend Confirm Card Payment
`tsx
// app/checkout/page.tsx
'use client';
import { Elements, useStripe, useElements, PaymentElement } from '@stripe/react-stripe-js';
import { loadStripe } from '@stripe/stripe-js';
const stripePromise = loadStripe(process.env.NEXT_PUBLIC_STRIPE_PUBLIC!);
function CheckoutForm({ clientSecret }: { clientSecret: string }) {
const stripe = useStripe();
const elements = useElements();
async function handleSubmit(e: React.FormEvent) {
e.preventDefault();
if (!stripe || !elements) return;
const { error } = await stripe.confirmPayment({
elements,
confirmParams: {
return_url: 'https://kolonell.com/checkout/success',
},
});
if (error) console.error('[Stripe] payment failed:', error);
}
return (
);
}
export default function CheckoutPage({ clientSecret }: { clientSecret: string }) {
return (
);
}
`
Étape 4 — webhook Stripe (essentiel)
`ts
// app/api/webhooks/stripe/route.ts
import Stripe from 'stripe';
import { headers } from 'next/headers';
Besoin d'un site web professionnel ?
Kolonell crée des sites web qui attirent des clients, optimisés pour le marché sénégalais. Devis gratuit en 2 minutes.
const stripe = new Stripe(process.env.STRIPE_SECRET!);
const webhookSecret = process.env.STRIPE_WEBHOOK_SECRET!;
export async function POST(req: Request) {
const body = await req.text();
const sig = (await headers()).get('stripe-signature')!;
let event: Stripe.Event;
try {
event = stripe.webhooks.constructEvent(body, sig, webhookSecret);
} catch (err) {
return new Response('Invalid signature', { status: 401 });
}
switch (event.type) {
case 'payment_intent.succeeded':
await markOrderPaid((event.data.object as Stripe.PaymentIntent).metadata.order_id);
break;
case 'payment_intent.payment_failed':
await flagOrderFailed((event.data.object as Stripe.PaymentIntent).metadata.order_id);
break;
case 'charge.refunded':
await markOrderRefunded((event.data.object as Stripe.Charge).metadata.order_id);
break;
}
return Response.json({ received: true });
}
`
Optimisations SCA pour réduire les échecs
1. Activer Radar (anti-fraude)
Stripe Radar évalue le risque et propose une exemption SCA TRA pour les paiements low-risk. Réduit jusqu'à 50 % des challenges 3DS.
2. Off-session pour les abonnements
`ts
const intent = await stripe.paymentIntents.create({
amount: 9900,
currency: 'eur',
customer: 'cus_xxx',
payment_method: 'pm_xxx',
off_session: true,
confirm: true,
});
`
3. Données client riches
Plus vous fournissez de signaux (shipping, billing, email, phone), plus l'algo Stripe optimise.
`ts
const intent = await stripe.paymentIntents.create({
amount: 4500,
currency: 'eur',
payment_method_types: ['card'],
receipt_email: 'client@example.com',
shipping: {
name: 'Aïssatou Diop',
phone: '+33612345678',
address: { line1: '15 rue de Rivoli', city: 'Paris', postal_code: '75001', country: 'FR' },
},
});
`
4. Retry intelligent
En cas d'échec 3DS, Stripe propose des "smart retries" — réessayer après 24-48h sur certains codes d'erreur. À configurer dans dashboard.
Coûts Stripe vs autres options
| Option | Fees % | Fees fixe | Total sur 100 EUR |
|---|---|---|---|
| Stripe (cartes EU) | 1.4 % | 0.25 EUR | 1.65 EUR |
| Stripe (cartes hors EU) | 2.9 % | 0.25 EUR | 3.15 EUR |
| PayPal | 2.9 % | 0.35 EUR | 3.25 EUR |
| Adyen (entreprise) | 0.6-1.0 % | 0.10-0.25 EUR | ~0.80 EUR |
| Mollie (UE) | 1.8 % | 0.25 EUR | 2.05 EUR |
Pour PME : Stripe ou Mollie. Pour scale : Adyen.
Cas réel — SaaS B2B Sénégal → UE
Profil : SaaS RH, 200 clients UE, ARR 480 000 EUR.
| Phase | Setup | Échec SCA | Fees |
|---|---|---|---|
| Mois 1 (mauvaise impl) | Stripe Charges legacy | 16 % | 14 200 EUR/mois fees |
| Mois 4 (refonte PaymentIntents + Radar) | PaymentIntents + automatic | 3,2 % | 14 100 EUR/mois fees |
Gain : ~6 200 EUR/mois récupérés grâce à la baisse des échecs SCA. ROI investissement refonte ~2 semaines.
FAQ
Q : Stripe Atlas convient à un fondateur sénégalais ?
R : Oui légalement, mais attention à votre fiscalité Sénégal — vous devez déclarer la holding US chez DGI Sénégal sous certains seuils.
Q : Peut-on accepter Stripe en USD pour client africain ?
R : Oui, mais le client paie des frais de change élevés côté banque. Préférer XOF/NGN/KES local + Stripe pour clients UE/US uniquement.
Q : Délai reversement Stripe ?
R : T+2 ouvré pour cartes EU, T+7 ouvré au démarrage (réserve 30 % les 6 premiers mois). Réserve dégressive ensuite.
Conclusion
Vendre en Europe depuis l'Afrique avec Stripe est techniquement maîtrisable mais demande rigueur sur SCA + 3DS2. Bien configuré : 2-4 % d'échec, fees gérables. Mal configuré : 12-18 % d'échec et fees plus impôts mal optimisés. L'investissement initial 1-2 semaines paie en quelques mois.
Mohamed Bah
Fondateur, Kolonell
Passionné par le digital et l'entrepreneuriat en Afrique, Mohamed accompagne les entreprises sénégalaises dans leur transformation digitale depuis 2020. Fondateur de Kolonell, il croit que chaque PME mérite une présence en ligne professionnelle et accessible.

