Le blog des décideurs du digital sur toutes les tendances tech, architecture, organisation et produit

Partenariat Stripe x Theodo: Comment créer une brique de paiement résiliente et configurable pour les marketplaces ?

Capture d’écran du 2020-07-10 15-44-16

 

Cet article a été publié en juillet 2020. Nous le re publions aujourd'hui alors que Theodo, première entreprise française à avoir été membre du “Partner program” en 2019, renforce sa collaboration avec Stripe et annonce faire partie du "Stripe Partner Ecosystem".  

Les acteurs

Stripe est une entreprise qui propose une infrastructure économique pour le web au travers d'outils puissants et flexibles facilitant le développement du commerce en ligne.

Des plateformes et marketplaces comme Uber, Airbnb, Shopify, ManoMano ou Doctolib utilisent Stripe Connect pour recevoir des paiements et les redistribuer à des tierces parties.

Mirakl est une entreprise qui propose des solutions logicielles pour gérer les flux logistiques et opérationnels au sein d’une marketplace. Elle accompagne les entreprises dans toutes les étapes de la mise en place et du développement de leur marketplace.

La synergie est donc évidente entre ces deux solutions. Seul manquait un connecteur pour faciliter l’intégration aux utilisateurs de Stripe et Mirakl.

L'objectif

En 2019, c'est dans le but de créer un connecteur entre Mirakl et Stripe, que ces derniers ont fait appel à Theodo, première entreprise française à participer au “Partner program” de Stripe. Le défi: fournir un package clé en main, documenté, sécurisé, résilient et configurable. Il devra  redistribuer les fonds en provenance d’un paiement unique par l’acheteur entre l’opérateur de la marketplace et les différents vendeurs impliqués dans la vente, le tout de manière automatisée, sécurisée et conforme aux réglementations française et internationale.

Toute la chaîne allant du paiement au reversement étant critique dans la vie d’une marketplace, il est indispensable qu'aucune donnée ne soit perdue et qu'en cas d'échec d'une opération, une ou plusieurs nouvelles tentatives soit effectuées. Dans le même esprit, en cas d'indisponibilité totale d'un des services, il est nécessaire de notifier l'opérateur immédiatement.

L'hétérogénéité des services

La singularité de ce projet réside dans la grande variété des services avec lesquelles le connecteur se doit d'interagir:

  • D'un côté l'API Stripe, sa documentation éprouvée et ses webhooks permettant d'être notifié en direct des événements déclenchés sur/par Stripe.
  • D'une autre, l'API de Mirakl, conçue pour une marketplace.
  • Enfin, le service de messagerie qui permet de notifier l’opérateur de la marketplace lorsque des actions manuelles sont nécessaires.

Le flux

Pour répondre à l'ensemble de ces contraintes techniques et fonctionnelles, la solution adoptée peut être décrite comme suit:

Capture d’écran du 2020-07-09 13-39-02

 

  • (1) Le client réalise un achat sur la marketplace. Mirakl ajoute cette commande pas encore confirmée (car non payée) dans sa base de donnée. L’opérateur collecte le paiement de la part de l’acheteur et marque la commande comme étant payée au sein de Mirakl.
  • (2) Pour assurer une synchronisation entre Mirakl et Stripe, le connecteur va régulièrement chercher les nouvelles commandes payées chez Mirakl.
  • (3) Lorsqu'une nouvelle commande est trouvée, le serveur envoi à Stripe les ordres de  transfert d'argent vers le ou les comptes Stripe des différents vendeurs.
  • (4) En alignement avec le cycle de facturation de Mirakl, le connecteur récupère les factures liées au paiement des frais d’abonnements et au reversement des fonds de chaque vendeur.
  • (5) Le connecteur initie le virement depuis le compte Stripe du marchand vers son compte bancaire externe.
  • (6) Pour des besoins de traçabilité, toutes les informations relatives à ces opérations (type, date, montant, statut, ...) sont stockées dans des fichiers consultables par les opérateurs en cas de besoin. En cas d'échec d'une des opérations, un message est envoyé à l'opérateur pour le notifier rapidement.

Tous les appels obéissent à une politique de "retry". Autrement dit si un échec survient la première fois (connexion perdue, service indisponible, ...), une nouvelle tentative sera effectuée. La fréquence et le nombre de tentatives sont configurables par l'opérateur.

Les avantages

Le connecteur répond ainsi à toutes les contraintes auxquelles il est soumis :

  • Facile d'installation: Le connecteur est installable via Docker ce qui automatise grandement l'installation. De plus, il est agnostique à la stack du client.
  • Configurable: Une installation manuelle reste cependant possible pour une intégration à une infrastructure potentiellement déjà existante et plus complexe.
  • Sécurisé: L'utilisation du framework Symfony, à l'écosystème mature, assure une grande stabilité et une forte maintenabilité.
  • Traçable: Les échanges entre le connecteur et les différents services sont intégralement stockés dans des fichiers de logs.
  • Résilient: Le système de "retry" garantit un plus haut taux de succès des transactions.
  • Conforme: Le connecteur est conforme à la réglementation relative aux flux financiers en Europe (DSP2).    

L'intégralité du code de l'application est consultable sur GitHub. La documentation est quant à elle consultable sur le site de Stripe.