Logo VirtuoWorks

Article

Créer un interfaçage WooCommerce et Dailybiz

Les technologies

WooCommerce est une extension open source pour WordPress permettant de créer une boutique en ligne. Il est conçu pour les petites et grandes entreprises en ligne utilisant WordPress.

Dailybiz est un ERP de gestion commerciale.

Kafka.js basé sur Apache Kafka, est un projet à code source ouvert d’agent de messages développé par l’Apache Software Foundation et écrit en Scala. Le projet vise à fournir un système unifié, en temps réel à latence faible pour la manipulation de flux de données. Sa conception est fortement influencée par les journaux de transactions.

NodeJS est une plateforme logicielle libre en JavaScript, orientée vers les applications réseau événementielles hautement concurrentes qui doivent pouvoir monter en charge. Elle utilise la machine virtuelle V8, la librairie libuv pour sa boucle d’évènements, et implémente sous licence MIT les spécifications CommonJS.

dailybiz_logo

kafka.png

woocommerce_logo

Notre objectif

Améliorer la productivité au travail de l’entreprise du client via l’automatisation de la création des devis et comptes clients sur leur ERP de gestion Dailybiz grâce aux informations récupérées depuis leur plateforme de e-commerce WooCommerce.

Notre réalisation entièrement back-end a utilisé la technologie Apache Kafka afin de stocker et faire transiter les informations entre les deux API. NodeJS a été utilisé afin de connecter les deux API ainsi que coder les différentes modifications à apporter sur les données.

Configuration des API

La connexion à Kafka se fait de la façon suivante :

const kafka: Kafka = new Kafka({
  clientId: 'client_id',
  brokers: ['localhost:9092'],
});

Il est possible de créer plusieurs instances de Kafka pour plus de sécurité. Le cas échéant, il conviendra donc d’ajouter des brokers dans le tableau des brokers (ex : localhost:9093, localhost:9094 etc).

On peut ensuite créer des producers et des consumers qui vont, respectivement, récupérer des données depuis une API et envoyer des données dans une API. Ces connecteurs sont basiquement codés ainsi :

const producer = kafka.producer({
  allowAutoTopicCreation: true,
  maxInFlightRequests: 1,
  idempotent: true,
});
const consumer = kafka.consumer({groupId: 'consumer_group'});

Une fois ces connecteurs codés, on peut les utiliser ainsi dans notre code, pour le producer :

const monProducer = async () => {
  try {
    await producer.connect();
    await producer.send({
       topic: 'topic_name',
       messages: [{ value: JSON.stringify(message) }],
     });
  } catch (error: unknown) {
    console.error(error);
  }
};

Et pour le consumer : 

const monConsumer = async () => {
  try {
    await consumer.run();
    await consumer.subscribe({ topic: 'topic_name' });
    await consumer.run({
      eachMessage: async ({ message }) => {
        if (Buffer.isBuffer(message.value)) {
          console.log(JSON.parse(message.value.toString()));
        }
      }
    });
  } catch (error: unknown) {
    console.error(error);
  }
};

Afin de pouvoir récupérer des données depuis WooCommerce, il convient d’en créer une instance de la façon suivante :

const api: WooCommerceRestApi = new WooCommerceRestApi.default({
  url: 'url_du_site_de_ecommerce',
  consumerKey: 'ck_xxxxxxxxxxxxxxxxxxx',
  consumerSecret: 'cs_xxxxxxxxxxxxxxxxxxx',
  version: 'wc/v3',
  queryStringAuth: true,
});

Les données consumerKey et consumerSecret sont accessibles depuis l’espace de gestion WooCommerce.


Avatar

Christophe Ollivier

Orchestrator

Icône linkedIn

Bio à venir.