Skip to main content

Transfert des commande des boutiques en ligne vers le serveur 4D

📦 Documentation Flux Commandes WooCommerce → NAS Synology

1️⃣ Vue d’ensemble du flux

  1. Un client passe une commande sur le site e-commerce (WordPress + WooCommerce).
  2. WooCommerce exporte automatiquement la commande automatiquement au format XML via une tâche d’export (HTTP POST).
  3. L’appel est envoyé vers une URL publique HTTPS exposée par Nginx Proxy Manager (NPM).
  4. UnNPM termine le reverseTLS (HTTPS) et reverse-proxy (Nginxla Proxy Manager) redirige cette URLrequête vers unApache serveuren interneHTTP.
  5. UnLe script PHP reçoit,web_order.php :
    • valide et enregistre la commande.requête,
    • Unvalide le XML,
    • enregistre le fichier localement,
    • journalise l’opération,
    • déclenche le script Python.
  6. Le script Python transfère ensuite le fichier vers le NAS Synology, etpuis l’archive le fichier localement.
  7. ToutesLes les étapeslogs sont journaliséesconservés danslocalement unet fichier de logs, puis récupéréesexploités dans Grafana.

CeLe mécanismeflux permetest unentièrement suivifonctionnel, complet, une redondance (log + archive locale),traçable, et undécouplé stockage(proxy final/ surPHP le/ NAS.Python / NAS).


2️⃣ Configuration côté WooCommerce

  • Rubrique utiliséeMenu : WooCommerce > Exporter Commandes
  • OngletSection : Tâches de changement d’état
  • Type de destination : HTTP POST
  • Format : XML

ExempleParamètres de tâche configuréeutilisés

Paramètre Valeur
Nom de la tâche export vers 4D V2
Format d’export XML
Type de destinationDestination HTTP POST
URL cible https://order.tarbouriech.tech/web_order.php

ChaqueÀ foischaque qu’une commande changechangement d’état,état de commande, WooCommerce envoie unle XML via HTTPpar POST vers l’URL définie.endpoint.


3️⃣ Reverse Proxy (Nginx Proxy Manager)Manager

Domaine configuréRôle

  • Exposer une URL HTTPS publique
  • Terminer le TLS
  • Forwarder les requêtes vers Apache en HTTP interne

Configuration effective

  • Domaine : https://order.tarbouriech.tech
  • Scheme : http
  • Forward Host : 192.168.1.17
  • Forward Port : 80
  • Forward Path : (vide)
  • Force SSL : activé
  • Certificat TLS : géré par NPM

Redirection

⚠️ miseApache n’est PAS configuré en place

HTTPS.
⚠️ToutelaHTTPSvolontairementcentraliséedans
URLgestion externe Redirectionest interne
/web_order.php (sur le domaine)http://192.168.1.17/web_orders/web_order.php

✅ Cela permet de garder le serveur interne derrière un proxy et de l’exposer uniquement via le domaine externe.NPM.


4️⃣ TraitementServeur Apache (Debian)

Point fondamental

Sur Debian, Apache utilise par défaut :

/var/www/html/

➡️ Tous les chemins doivent impérativement être alignés sur cette racine.

VirtualHost utilisé

<VirtualHost *:80>
    ServerName order.tarbouriech.tech

    DocumentRoot /var/www/html/web_orders/public

    <Directory /var/www/html/web_orders/public>
        Options -Indexes
        AllowOverride None
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/order_error.log
    CustomLog ${APACHE_LOG_DIR}/order_access.log combined
</VirtualHost>

❌ Aucun wildcard (ServerAlias *.tarbouriech.tech)
❌ Aucune redirection HTTPS côté ServeurApache

:

5️⃣ Script PHP – web_order.php

📂 EmplacementChemin

: 
/var/www/html/web_orders/public/web_order.php

📌 Rôle

:
    Réceptionner
  • Endpoint etHTTP validerPOST lespour commandesWooCommerce
  • XML.

Fonctionnement détaillé

  1. Vérifie que la requêteméthode estHTTP bien(POST enuniquement)
  2. POST.
  3. Récupère le payload brut
  4. Vérifie quela leprésence contenuet estla validité du XML
  5. Génère un XMLnom valide.unique :
    • order_YYYYMMDD_HHMMSS_HASH.xml
  6. Enregistre le fichier dans :
    /var/www/html/web_orders/private/orders/
    
    avec
  7. Écrit un nom unique : order_YYYYMMDD_HHMMSS_HASH.xml
  8. Journalise l’opérationlog dans orders/web_order.log.
  9. Lance le script Python via send_folder_to_synology.pyexec().
  10. Retourne HTTP 200 à WooCommerce

⚠️ Les contrôles HMAC / User-Agent sont temporairement désactivés.


5️6️⃣ Script Python – send_folder_to_synology.py

📂 EmplacementChemin

: 
/var/www/html/web_orders/private/send_folder_to_synology.py

📌 Rôle

:
    Transférer
  • Transfert les commandessécurisé vers le NAS
  • Synology
  • Archivage etlocal
  • archiver localement.

Fonctionnement

  1. ConnexionVérifie SSHla +présence de la clé privéeSSH
  2. Se connecte au NAS via SSH (id_rsa).clé privée)
  3. Parcours tousParcourt les fichiers .xmlXML présentsdu dansdossier orders/.
  4. Pour chaque fichier :
  • Transfert via SCP vers le NAS.NAS
  • Renommage automatique de order_commande_.
  • Déplacement du fichier local envers orders/archive/.
  1. JournalisationLog complètede danschaque orders/web_order.log.étape

6️7️⃣ NAS Synology

📂 Dossier decible

réception :

/volume1/DATAS/4DDocuments/WebOrders/FTP/

📄 Nom des fichiers

Tous les fichiers y sont stockés sous le format :
commande_YYYYMMDD_HHMMSS_HASH.xml


7️8️⃣ Logs et Archivagesupervision

LocalLogs locaux

  • Fichier : 
    /var/www/html/web_orders/private/orders/web_order.log
    

    Contient :

    • réception des commandes
    • Contienterreurs toutesde lesvalidation
    • étapes
    • transferts :SCP
    • réception, validation, transfert, archivage.
    • archivage

    Centralisation Grafana

    • Les logs sont également récupérés par Grafanacollectés pour visualisation: et
        monitoring.
      • supervision
      • alerting
      • audit

      8️⃣ Scripts présents et utilité

      Scripts utiles

      • web_order.php → réception XML côté serveur.
      • send_folder_to_synology.py (version 1.4) → transfert + archivage.

      Scripts obsolètes

      • ⚠️ scp_transfer.py → doublon, car remplacé par send_folder_to_synology.py.
      • ⚠️ Ancienne version de send_folder_to_synology.py (v1.0) → à supprimer.

      👉 À garder uniquement :

      • web_order.php
      • send_folder_to_synology.py (la version avec archivage + log complet).

      9️⃣ CasGestion particulier : Deuxième sitemulti-boutiques

      UnPour autreun second site e-commerce est configuré de la même façon mais avec un suffixe _O pour séparer les commandesWooCommerce :

      • 📂
      • : web_order.php →
      • 📂
      • : send_folder_to_synology.py →
      • 📂
      • Répertoire:orders/ →
      • 📂
      • : web_order.log →
        ÉlémentSuffixe
        PHP web_order_O.php
        Python send_folder_to_synology_O.py
        Dossier orders_O/
        Log web_order_O.log

        Cela➡️ permet de distinguer lesLes flux etsont detotalement ne pas mélanger les fichiers entre les deux boutiques.isolés.


        🔟🔄 GuideSchéma pourdu duplication / maintenanceflux

        Étapes
        WooCommerce
            pour|
            ajouter| uneHTTP nouvellePOST boutique

        (XML)
        1. Créer un nouveau dossier serveur : /var/www/html/web_orders_X/
        2. Copier les scripts :
        • web_order.php → renommer en web_order_X.php
        • send_folder_to_synology.py → send_folder_to_synology_X.py
        1. Adapter les chemins :
        • orders_X/ pour les fichiers reçus
        • web_order_X.log pour les logs
        1. Configurer le reverse proxy :
        • Ajouter une règlev Nginx Proxy Manager
        • Exemple(HTTPS) | | HTTP interne v Apache (Debian) | | web_order.php v Stockage local + logs | v send_folder_to_synology.py | v NAS Synology

          🧪 Tests de validation

          curl -X POST -H "Content-Type: application/xml"      --data '<test>ok</test>'      https://order.tarbouriech.tech/web_order.php
          

          ➡️ Réponse attendue : https://order2.tarbouriech.tech/web_order_X.phpHTTP 200


          serveur

          📝 interne

        • TODO
        (sécurité
          &
        1. Configurer WooCommerce :
        robustesse)
        • Nouvelle tâcheRéactiver la signature HMAC (token partagé)
        •  Ajouter un mécanisme anti-replay (timestamp + nonce)
        •  Désactiver les sessions PHP pour cet endpoint
        •  Validation XML par XSD
        •  Lock / file d’exportattente verscôté l’URLPython cible(anti double exécution)
        •  Rotation de la boutique.clé SSH
        •  Alerting Grafana sur erreurs critiques

        1. Vérifier

          🚀 :

        2. Améliorations
        possibles
        • CommandeRemplacer testSCP par SFTP ou API Synology
        • ApparitionIntroduire une queue (RabbitMQ / Redis) pour lisser la charge
        • Chiffrement applicatif du fichierXML suravant le NAStransfert
        • LogsRetour disponiblesd’accusé localementde +réception Grafana.signé vers WooCommerce

        ✅ Conclusion

        • Le flux est Scriptsopérationnel actifset :stable web_order.php + send_folder_to_synology.py.
        • L’architecture est Scriptsclairement à supprimer :séparée scp_transfer.py + anciennes versions.
        • Les erreurs sont Logstracées : toujours dans orders/web_order.log + Grafana.
        • La solution est Duplicationscalable facileet duplicable en ajoutant un suffixe (ex : _O, _X) pour isoler les flux de chaque boutique.

        👉 Ce document peutsert êtrede donnéréférence à un technicien (ou à ChatGPT)officielle pour :

        • corriger un problème,
        • améliorer la solution,
        • maintenance,
        • oul’audit déployer une nouvelle boutique en suivantet les mêmesévolutions étapes.

        📦 Documentation Flux Commandes WooCommerce → NAS Synology

        ...futures.


        🔄 Schéma du flux (Vue d’ensemble)

        +------------------+
        |  Client          |
        |  Passe commande  |
        +--------+---------+
                 |
                 v
        +---------------------------+
        | WooCommerce (WordPress)   |
        | Export XML via HTTP POST  |
        +------------+--------------+
                     |
                     v
        +---------------------------+
        | Reverse Proxy (Nginx PM)  |
        | Expose URL publique       |
        +------------+--------------+
                     |
                     v
        +---------------------------+
        | Serveur interne (PHP)     |
        | - web_order.php           |
        | - Valide XML              |
        | - Stocke en local         |
        | - Log local + Grafana     |
        +------------+--------------+
                     |
                     v
        +---------------------------+
        | Script Python             |
        | - SCP → NAS Synology      |
        | - Renommage fichier       |
        | - Archivage local         |
        +------------+--------------+
                     |
                     v
        +---------------------------+
        | NAS Synology              |
        | /volume1/DATAS/.../FTP/   |
        | Stockage final XML        |
        +---------------------------+