Transfert des commande des boutiques en ligne vers le serveur 4D
📦 Documentation Flux Commandes WooCommerce → NAS Synology
1️⃣ Vue d’ensemble du flux
- Un client passe une commande sur le site e-commerce (WordPress + WooCommerce).
- WooCommerce exporte automatiquement la commande
automatiquementau format XML via une tâche d’export (HTTP POST). - L’appel est envoyé vers une URL publique HTTPS exposée par Nginx Proxy Manager (NPM).
UnNPM termine lereverseTLS (HTTPS) et reverse-proxy(NginxlaProxy Manager)redirige cette URLrequête versunApacheserveureninterneHTTP.UnLe script PHPreçoit,web_order.php:- valide
et enregistrelacommande.requête, Unvalide le XML,- enregistre le fichier localement,
- journalise l’opération,
- déclenche le script Python.
- valide
- Le script Python transfère
ensuitele fichier vers le NAS Synology,etpuisl’archive le fichier localement. ToutesLesles étapeslogs sontjournaliséesconservésdanslocalementunetfichier 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
ExempleParamètres de tâche configuréeutilisés
| Paramètre | Valeur |
|---|---|
| Nom de la tâche | export vers 4D V2 |
| Format d’export | XML |
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 placeHTTPS.
| |
✅ 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
- Endpoint
etHTTPvaliderPOSTlespourcommandesWooCommerce
Fonctionnement détaillé
- Vérifie
quelarequêteméthodeestHTTPbien(POSTenuniquement) - Récupère le payload brut
- Vérifie
quelaleprésencecontenuetestla validité du XML - Génère un
XMLnomvalide.unique :order_YYYYMMDD_HHMMSS_HASH.xml
- Enregistre le fichier dans :
/var/www/html/web_orders/private/orders/avec - Écrit un
nom unique : order_YYYYMMDD_HHMMSS_HASH.xml Journalise l’opérationlog dansorders/web_order.log.- Lance le script Python via
send_folder_to_synology.pyexec(). - 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
- Transfert
les commandessécurisé vers le NAS - Archivage
etlocal
Fonctionnement
ConnexionVérifieSSHla+présence de la cléprivéeSSH- Se connecte au NAS via SSH (
id_rsa).clé privée) Parcours tousParcourt les fichiersXML.xmlprésentsdudansdossierorders/.- Pour chaque fichier :
- Transfert
viaSCP vers leNAS.NAS - Renommage
automatique deorder_→commande_. - Déplacement
du fichier local enversorders/archive/.
JournalisationLogcomplètededanschaqueorders/web_order.log.étape
6️7️⃣ NAS Synology
📂 Dossier decible
/volume1/DATAS/4DDocuments/WebOrders/FTP/
📄 Nom des fichiers
Tous les fichiers y sont stockés sous le format : commande_YYYYMMDD_HHMMSS_HASH.xml
commande_YYYYMMDD_HHMMSS_HASH.xml7️8️⃣ Logs et Archivagesupervision
LocalLogs locaux
Fichier :/var/www/html/web_orders/private/orders/web_order.logContient :
- réception des commandes
Contienterreurstoutesdelesvalidation- transferts
:SCP - archivage
étapesréception, validation, transfert, archivage.CentralisationGrafana- Les logs sont
égalementrécupérés par Grafanacollectés pourvisualisation:et- supervision
- alerting
- audit
monitoring.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é parsend_folder_to_synology.py.⚠️ Ancienne version desend_folder_to_synology.py(v1.0) → à supprimer.
👉 À garder uniquement :web_order.phpsend_folder_to_synology.py(la version avec archivage + log complet).
9️⃣
CasGestionparticulier : Deuxième sitemulti-boutiquesUnPourautreun second sitee-commerceest configuré de la même façon mais avec unsuffixe_Opour séparer les commandesWooCommerce :📂Élément Suffixe PHP :web_order.php→web_order_O.php📂Python :send_folder_to_synology.py→send_folder_to_synology_O.py📂Répertoire:Dossier orders/→orders_O/📂Log :web_order.log→web_order_O.logCréer un nouveau dossier serveur :/var/www/html/web_orders_X/Copier les scripts :web_order.php→ renommer enweb_order_X.phpsend_folder_to_synology.py→send_folder_to_synology_X.pyAdapter les chemins :orders_X/pour les fichiers reçusweb_order_X.logpour les logsConfigurer le reverse proxy :Ajouter une règlev Nginx Proxy ManagerExemple(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📝
interneTODO Configurer WooCommerce :Nouvelletâ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’
exportattenteverscôtél’URLPythoncible(anti double exécution) - Rotation de la
boutique.clé SSH - Alerting Grafana sur erreurs critiques
Vérifier🚀
:Améliorations CommandeRemplacertestSCP par SFTP ou API SynologyApparitionIntroduire une queue (RabbitMQ / Redis) pour lisser la charge- Chiffrement applicatif du
fichierXMLsuravantle NAStransfert LogsRetourdisponiblesd’accusélocalementde+réceptionGrafana.signé vers WooCommerce- Le flux est
Scriptsopérationnelactifset:stableweb_order.php+send_folder_to_synology.py. - L’architecture est
Scriptsclairementà supprimer :séparéescp_transfer.py+ anciennes versions. - Les erreurs sont
Logstracées: toujours dansorders/web_order.log+ Grafana. - La solution est
Duplicationscalablefacileet duplicableen ajoutant un suffixe (ex :_O,_X) pour isoler les flux de chaque boutique. corriger un problème,améliorerlasolution,maintenance, oul’auditdéployer une nouvelle boutique en suivantet lesmêmesévolutionsétapes.
Cela➡️permet de distinguer lesLes fluxetsontdetotalementne pas mélanger les fichiers entre les deux boutiques.isolés.
🔟🔄GuideSchémapourduduplication / maintenanceflux
(XML)ÉtapesWooCommercepour|ajouter|uneHTTPnouvellePOSTboutique- &
✅ Conclusion
👉Ce documentpeutsertêtrededonnéréférenceà un technicien (ou à ChatGPT)officielle pour:📦 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 | +---------------------------+