Colas Mérand
01/05/2025
Firebase
Stripe
Développement backend
5 minutes
Dans le monde des applications mobiles modernes, particulièrement celles qui reposent sur un modèle économique d'abonnement ou de commission, l'intégration entre votre base de données et votre système de paiement est absolument critique. Une erreur dans cette liaison peut rapidement transformer une application prometteuse en cauchemar technique et financier.
Un scénario que nous rencontrons fréquemment chez Platane concerne les applications qui utilisent Firebase comme backend et Stripe comme solution de paiement. Prenons l'exemple d'une application de VTC, un secteur en pleine expansion dans les métropoles françaises comme Lyon, Bordeaux ou Nantes.
Voici la situation problématique classique :
customerIdStripe) n'est pas correctement enregistré dans la base de données Firebase (Firestore)Résultat ? Un système de facturation défaillant, des problèmes de résiliation, et potentiellement des pertes financières importantes pour l'entreprise.
Cette erreur d'intégration survient généralement pour plusieurs raisons :
Voici comment résoudre efficacement ce type de problème :
La première étape consiste à examiner l'architecture actuelle pour identifier précisément où se situe la rupture dans la chaîne d'information. Chez Platane, nous commençons toujours par un audit complet du code existant, en particulier :
Voici un exemple simplifié de code corrigé pour une Cloud Function qui assure la liaison entre Stripe et Firebase :
exports.stripeCustomerCreated = functions.https.onRequest(async (req, res) => {
try {
// Vérification de sécurité (webhook secret)
const sig = req.headers['stripe-signature'];
const event = stripe.webhooks.constructEvent(
req.rawBody,
sig,
process.env.STRIPE_WEBHOOK_SECRET
);
// Si c'est un événement de création de client
if (event.type === 'customer.created') {
const customer = event.data.object;
// Récupérer l'ID utilisateur depuis les métadonnées
const userId = customer.metadata.firebaseUserId;
if (!userId) {
console.error('Aucun userId Firebase trouvé dans les métadonnées');
return res.status(400).send('Métadonnées incomplètes');
}
// IMPORTANT: Mise à jour de Firestore avec l'ID Stripe
await admin.firestore()
.collection('chauffeurs')
.doc(userId)
.update({
customerIdStripe: customer.id,
stripeCreatedAt: admin.firestore.FieldValue.serverTimestamp()
});
// Vérification que l'écriture a bien eu lieu
const updatedDoc = await admin.firestore()
.collection('chauffeurs')
.doc(userId)
.get();
if (!updatedDoc.exists || !updatedDoc.data().customerIdStripe) {
throw new Error('Échec de la mise à jour Firestore');
}
console.log(`Chauffeur ${userId} correctement lié à Stripe ${customer.id}`);
return res.status(200).send('Succès');
}
return res.status(200).send('Événement ignoré');
} catch (error) {
console.error('Erreur dans stripeCustomerCreated:', error);
return res.status(500).send(`Erreur: ${error.message}`);
}
});
Une fois la correction implémentée, il est crucial de :
Lors de notre collaboration avec Easop, une plateforme de gestion de stock options que nous avons développée (et qui a été rachetée plusieurs millions d'euros par Remote), nous avons mis en place une architecture qui garantit l'intégrité des données entre Stripe et notre backend.
Voici les principes clés que nous appliquons désormais sur tous nos projets impliquant des paiements :
Toutes les opérations de paiement doivent être idempotentes, c'est-à-dire qu'elles peuvent être répétées sans effet secondaire. Cela permet de gérer les problèmes de réseau ou les timeouts.
Pour les opérations critiques comme l'enregistrement d'un ID client Stripe, nous utilisons un système de file d'attente (comme Firebase Queue ou Cloud Tasks) qui garantit que l'opération sera effectuée, même en cas d'échec temporaire.
Nous mettons en place des jobs périodiques qui vérifient la cohérence entre Stripe et Firebase, et qui corrigent automatiquement les divergences.
Des alertes sont configurées pour détecter les anomalies avant qu'elles n'affectent les utilisateurs.
Pour Astory, une plateforme de location d'œuvres d'art qui génère aujourd'hui plus de 800 000€ de revenus annuels, nous avons développé une architecture similaire. Le système gère des milliers de transactions mensuelles sans aucune perte de données, grâce à une intégration robuste entre NextJS, Firebase et Stripe.
La clé de cette réussite ? Une architecture pensée dès le départ pour être résiliente, avec des mécanismes de fallback à chaque étape critique.
Les problèmes d'intégration entre Firebase et Stripe sont courants mais peuvent être évités avec une expertise appropriée. Que vous développiez une application VTC, une marketplace ou tout autre service nécessitant des paiements récurrents, la robustesse de cette intégration est fondamentale pour votre succès.
Chez Platane, nous avons développé une expertise pointue dans ces intégrations critiques, ayant travaillé sur des projets variés allant des applications de mobilité aux plateformes de e-commerce, en passant par des services SaaS à abonnement.
Vous rencontrez des problèmes similaires avec votre application ? Ou vous souhaitez simplement vous assurer que votre architecture de paiement est solide avant de lancer votre service ?
N'hésitez pas à prendre rendez-vous via notre formulaire de contact. Nos experts en développement backend se feront un plaisir d'échanger sur votre projet et de vous proposer des solutions adaptées à vos besoins spécifiques.
Collaborer avec Platane, c'est bénéficier d'une expertise technique de pointe, d'une approche méthodique et d'un accompagnement sur le long terme pour faire de votre application un succès durable.
Vous préférez discuter de vive voix ? Nous aussi et c'est évidemment sans engagement !
Une question, un besoin de renseignements ? N'hésitez pas à nous contacter.