Intégration ERP et Magento 2

Un site Magento 2 n’est que la façade d’une vente, c’est la première étape nécessaire mais elle génère derrière des problématiques de logistique souvent gérées par un ERP.

Il y a plusieurs façons de s’intégrer avec un ERP en fonction de la modernité de son API :

  • Echange de fichiers CSV via un serveur FTP
  • Appels apis
  • Appels d’un software en bash afin d’envoyer les commandes…

De mon expérience la solution d’échanges de fichiers est souvent celle utilisée en particulier par les grosses sociétés qui ont des années de gestion logistiques et qui n’ont pas encore intégré une API…

Comment gérer cette intégration avec Magento 2

Nous pouvons envisager plusieurs solutions avec des coûts de travail différents qui répondent à des objectifs différents.

Une application qui fait le PONT entre Magento et l’erp

Développer une application Tier en PHP, Ruby, Python, Node… qui va faire le ‘PONT’ entre l’erp et magento 2 en utilisant l’API REST de Magento 2.

Cette solution présente en mon sens plusieurs inconvénients :

  • Maintenance dans le temps pas évident en cas de changement de développeurs, d’agence web…
  • Debug plus difficile que du Magento 2 natif
  • Coté performance, cela crée par mal de requêtes Magento 2, ce que l’on essaie en général de réduire pour éviter du rafraîchissement de cache conséquent.

On peut trouver des avantages à celle-ci :

  • Séparation des équipes e-commerce et ERP
  • Indépendance de l’application face à Magento, si un jour on migre sur un shopify nous n’avons qu’à refaire la partie appels API vers Shopify au lieu de Magento
  • Utiliser une stack techno plus moderne que Magento, python, ruby avec des jobs, de la reprise sur erreur…

Il faut garder en tête que c’est une solution complexe et coûteuse qui demandera bien plus de maintenance et de développement que la solution module Magento 2 présentée ci-dessous.

Dans un cas concret que j’ai eu, l’intégration ERP était faite avec une application NodeJs. Suite à la reprise du projet, il a fallu reprendre cette intégration afin de la faire évoluer mais aussi pour migrer le site vers de nouveaux serveurs. Cette application a été écrite de façon un peu empirique avec beaucoup de copier/coller, une complexité énorme qui en résulte que désormais nous craignons de toucher la moindre partie par peur de dégrader le fonctionnement. Nous avons donc migré cette logique dans un Module Magento 2 qui sera maintenable et reprenable à l’avenir par n’importe quel développeur.

Un module Magento 2

Pour moi c’est la solution à privilégier. Dans Magento 2 tout est module donc pourquoi pas faire un module MonSuperClient_Erp qui va être responsable de tous les échanges ERP. Il sera alors facile de greffer une notification email, slack, sms en cas d’erreur lors d’un import…

Souvent j’ajoute des commandes magento type :

bin/magento erp:import_stocks
bin/magento erp:import_prices

Ces tâches sont ensuite configurées sur le serveur afin d’être lancées à la fréquence souhaitée. En général j’évite de me greffer sur les crons Magento car ces tâches pouvant être longue, je préfère utiliser un orchestrateur externe. Ceci dit si on sait qu’elles sont rapides, il est tout à fait faisable de les brancher sur le système de cron de Magento 2.

Avec mon développeur système on les wrap dans un script shell afin qu’elles ne soient pas exécutées si un processus est déjà en cours…Et qui fait une notification slack si une erreur survient, quand on est dans un projet ou on a la chance d’avoir une collaboration efficace avec le développeur système, je trouve qu’il est ingénieux d’allier Magento 2 + Devops.

Conclusion

Il y a plusieurs façons de s’intégrer avec l’erp mais il me semble évident de toujours choisir la plus simple et de ne pas complexifier quelque chose qui est essentiel pour le site, car pas de commandes dans l’erp, pas d’expéditions.

Autant que possible essayez de rester dans Magento, cela permet de ne pas éparpiller les efforts techniques dans plusieurs applications/équipes.