Prestashop – Mise à jour automatique des stocks

Pour la réalisation d’un projet de boutique en ligne je me suis intéressé à Prestashop. Il existe d’autres moteurs de boutique web mais aujourd’hui je vais seulement parler de celui ci.

Ma problématique était de mettre à jour automatiquement les stocks en lignes par rapport aux stocks réels de la boutique physique. La chance que j’ai c’est que l’outil informatique de la boutique physique permet d’exporter un fichier csv des produits et que Prestashop sait traiter ce type de fichier. Seulement tout ça se fait sur la partie administration et manuellement. J’ai donc chercher à automatiser cette partie.

Il existe surement de multiple solutions je vous propose la solution que j’ai trouvé et qui utilise la commande WGET. Ainsi il sera possible de faire un simple script Shell qui sera exécuté par CRON. Voici les détails de ce script :

Configuration du script

Pour faciliter la configuration du script j’ai renseigné des variables au début. Veillez à bien renseigner chacune des variables avec les paramètres de votre site. Le script entier est en téléchargement à la fin de l’article. Il est composé de nombreux commentaires pour vous aider.

Détails des paramètres : Ici je m’identifie avec l’email “cron@prestashop” et le mot de passe “motdepass” qui doit correspondre à un employé enregistré dans prestashop. ”urladminsite” dois contenir l’adresse de la partie administration de presatshop. Je lui dis que je veux aller dans la partir “Import” en renseignant la variable “tab“. Puis que je souhaite importer le fichier “monfichier.csv” (fichier qui dois se trouver dans le répertoire “import” de “adminxxx” de votre prestashop). Pour finir je décris chaque colonne de mon fichier csv à l’aide de type_value[num_colonne]=type_de_colonne.

email=cron@prestashop.com
passwd=motdepass
tab=Import
admintab='Admin'$tab
urladminsite=http://www.prestashop.eu/adminxxx/
csvfile='monfichier.csv'
typevalue='&type_value[0]=id&type_value[1]=name&type_value[2]=no&type_value[3]=quantity'

Identification automatique

Une fois tous ces paramètres renseignés, il faut s’en servir. Pour cela il faut s’identifier au près de notre administartion prestashop, enregistrer le cookie d’identification et récupérer un “token” donnant droit à accéder à la partie que l’on souhaite (ici la partie Import).

Première étape Identification et enregistrement du cookie :

Ici nous envoyons l’email et le mot de passe au script “login.php” de notre boutique. Nous demandons aussi d’enregistrer le cookie dans “cookie.txt“. Vous remarquez que j’enregistre aussi le résultat dans un fichier nommé “login.php“, je m’en sert dans mon script pour détecter les erreurs.

wget --save-cookies=cookie.txt --post-data='email='$email'&passwd='$passwd'&Submit=submit' --keep-session-cookies -q -O login.php $urladminsite'login.php'

Deuxième étape récupération du TOKEN :

Qu’est ce que le “token” ?
Le “token” est en fait un “code” généré par prestashop qui réuni des informations relatives à l’employé et à l’onglet qu’il veut visiter. Il est la pour sécuriser l’accès à votre boutique et vous éviter de faire des choses qui vous serez commandé par quelqu’un d’autre au travers d’un lien. Sans “token“, quelqu’un de mal intentionné pourrait vous envoyer un lien contenant des paramètres pouvant altérer votre base de données. Étant identifié comme administrateur sur votre ordinateur ce code n’aurait aucun mal à être exécuté. Le “token” étant connu que de vous seul et de votre prestashop toutes commandes exempts de ce token sera refusées.

Revenons à notre code. Ici aussi j’utilise la commande WGET, elle est très présente dans ce script. On va charger le cookie enregistré précédemment et attaquer la page d’index (index.php) de notre administration. Très important cette fois ci j’enregistre le résultat dans un fichier “index.php” pour récupérer le token qui nous intéresse.

Dans la deuxième ligne je récupère le token avec les commandes standards GREP et SED. Je ne rentre pas dans les détails mais je vais chercher le token se rapportant à l’onglet que je souhaite (Import).

wget --load-cookies=cookie.txt --keep-session-cookies -q -O index.php $urladminsite'index.php'
token=$(grep 'index.php?tab='$admintab'\&token=' index.php | sed 's/.*token=\(.*\)\">'$tab'.*/\1/g')

Voici pour ce qui est de l’identification. Passons maintenant à l’exécution de notre mise à jour csv.

Mise à jour des stocks

On ne change pas une équipe qui gagne. Ici encore j’utilise la commande WGET. Comme pour la commande précédente j’attaque la page “index.php” et je lui envoie le cookie. Petite différence ici, j’ajoute des paramètres qui vont être envoyés par la méthode POST à mon script. Il aura alors l’impression que je lui envoi des données renseignées par un formulaire, ici notre formulaire d’importation. Pour cela j’utilise la commande “post-data” de “wget“.

Les premiers paramètres sont l’onglet et le token précédemment récupéré. Ensuite viennent les paramètres utiles à l’importation. A vous de changer ces paramètres à votre guise suivant le format de votre fichier csv. Les paramètres de type de colonne sont récupéré de la variable “typevalue” renseigné dans la partie configuration en début de script.

wget --load-cookies=cookie.txt --keep-session-cookies --post-data='tab='$admintab'&token='$token'&skip=0&csv='$csvfile'&entity=1&iso_lang=fr&separator=;&multiple_value_separator=,'$typevalue'&import=Import CSV data' -q -O maj.php $urladminsite'index.php'

Voilà j’espère que tout ceci aidera le plus grand nombre. Je vous met le code complet de mon script et un lien pour le télécharger si vous le souhaitez. Vous restera plus qu’a executer ce script au travers de CRON pour avoir une mise à jour régulière. ;)

Le script :

#!/bin/sh

#####################################################################

#                                                                   #

#                    SRIPT DE YANNICK KERMAREC                      #

#                     HTTP://WWW.KERMAREC.COM                       #

#                                                                   #

#####################################################################

####################### PARAMÈTRES PRESTASHOP #######################

email=cron@prestashop.com

passwd=motdepass

tab=Import # Onglet auquel vous voulez accéder

admintab='Admin'$tab # Les script de prestashop vont chercher les onglets avec Admin devant

urladminsite=http://www.prestashop.com/adminxxx/ # L'url de la partie administration de prestashop

csvfile='monfichiert.csv' # Le nom de votre fichier csv se trouvant dans le répertoire 'import' de la partie adminxxx

# Les type de valeur pour chaque colonne de votre CSV :

# /!\ ATTENTION /!\ N'oubliez pas de bien renseigner cette partie car c'est ce qui va être utilisé pour mettre à jour la BD

typevalue='&type_value[0]=id&type_value[1]=name&type_value[2]=no&type_value[3]=quantity'

####################### IDENTIFICATION #######################
# Identification et récupération du cookie
wget --save-cookies=cookie.txt --post-data='email='$email'&passwd='$passwd'&Submit=submit' --keep-session-cookies -q -O login.php $urladminsite'login.php'
if [ -n "$(grep 'error' login.php)" ]
then
  error=$(grep '<li>.*</li>' login.php | sed 's/.*<li>\(.*\)<\/li>/\1/g')
  echo 'ERREUR : '$error
else
  # Si pas d'erreur premier accès à la partie administration
  wget --load-cookies=cookie.txt --keep-session-cookies -q -O index.php $urladminsite'index.php' # Accès à la partie administration
  token=$(grep 'index.php?tab='$admintab'\&token=' index.php | sed 's/.*token=\(.*\)\">'$tab'.*/\1/g') # Extraction du token de la page index.php pour l'onglet qui nous intéresse
fi

####################### IMPORTATION CSV #######################
if [ -n "$(echo $token | grep ^[a-z0-9]*)" ]
then
  echo 'TOKEN : '$token # Affichage du token récupéré
  wget --load-cookies=cookie.txt --keep-session-cookies --post-data='tab='$admintab'&token='$token'&skip=0&csv='$csvfile'&entity=1&iso_lang=fr&separator=;&multiple_value_separator=,'$typevalue'&import=Import CSV data' -q -O maj.php $urladminsite'index.php'
else
  echo 'ERREUR : Pas de token'
fi

Le script : Mise à jour automatique des stocks de prestashop.

Ces articles peuvent vous intéresser :

  1. Prestashop – Mise à jour des commandes Mondial Relay Chargé de maintenir la boutique d’une Parapharmacie j’ai été amené...
  2. Prestashop – Mondial Relay (module) Je vous propose le module mondial relay 1.4 modifié pour...
  3. Galeries et slideshows de photos pour Mootools (14) Partager des photos sur Internet c’est bien mais pour que...
  4. Prestashop – Google Cloud Print Voici mon premier module gratuit pour prestashop qui vous permet...
  5. Mootools 1.2.1 est sorti Petite news rapide pour prévenir de la sortie de la...

Related posts brought to you by Yet Another Related Posts Plugin.

Tags: , , , , , , , , , , ,

29 Responses to “Prestashop – Mise à jour automatique des stocks”

  1. J-Yves Creusot Says:

    Bonjour,

    j’ai été obligé de faire une petite modif pour que ça fonctionne :

    #token=$(grep ‘index.php?tab=’$admintab’\&token=’ index.php | sed ‘s/.*token=\(.*\)\”>’$tab’.*/\1/g’)

    token=$(grep ‘index.php?tab=’$admintab’\&token=’ index.php | sed ‘s/.*token=\(.*\)\”>.*/\1/g’)

    Mais ça m’a bien aidé quand même, un grand merci pour ce script.

  2. J-Yves Creusot Says:

    Il faut aussi mettre l’onglet importation directement sur l’accueil

  3. Yannnick Says:

    Je n’avais pas eu a mettre l’onglet directement sur l’accueil mais je suis sous Prestashop 1.4. Tu peux aussi ajouter un autre wget qui va aller sur la page “Outils” si tu veux garder ton interface admin propre.

    Personnellement j’ai même ajouté un onglet “Import plus” dans cette page pour avoir un import plus complet avec des options personnelles. ;)

  4. Jmy Says:

    A lire rapidement, je recherche un peu à faire cela, mais j’ai une boutique de vêtements et la quantité est la somme des stocks des attributs/déclinaisons d’un articles (1 chemise XL colori bleu par exemple). Votre système fonctionne-t-il pour cela ?

  5. Yannnick Says:

    Essayez de faire une mise à jour avec un fichier csv dans la partie importation de Prestashop. Si les stocks sont correctement mis à jour, ça devrait fonctionner.

  6. Yannnick Says:

    Pour ceux qui veulent je pense proposer un service de mise à jour automatique.
    - Mise à jour des produits
    - Mise à jour des déclinaisons
    - Mise à jour des catégories

    Contactez moi si vous êtes intéressé. ;)

  7. Didier Alma Says:

    Voila qui m’intéresse beaucoup ! Je cherche actuellement une solution pour synchroniser un logiciel CRM qui exporte une base produit, avec un prestashop. Cela concernerait des champs comme le produit, ses déclinaisons, son prix, etc… Pouvez vous me contacter ?

  8. axel Says:

    Bonjour, le script ne fonctionne pour moi sur mon prestashop v1.4.
    Je le met sur le server et lorsque je tappe via ma console ssh : ./importCSV.sh
    j’ai cette erreur :
    importCSV.sh: line 43: Erreur de syntaxe près du symbole inattendu « fi »
    importCSV.sh: line 43: `fi’

    Quelqu’un saurait-il d’où ca vient?

  9. Overdoze Says:

    Bonjour Yannnick et merci pour ce truc génial.
    je suis novice sur prestashop et en php aussi et je vais faire la mise à jour du mon stock (des produits +déclinaisons) prestashop a partir de mon stock magasin.
    j’ai téléchargé ton script mais je ne sais pas comment l’utiliser sur ma boutique en local? merci de me dire ou il faut mettre se script et comment je fais appel .
    merci d’avance

  10. Overdoze Says:

    j’ai oublié de préciser que je travaille avec la version 1.2.5 du prestashop

  11. Damien Says:

    Bonjour,

    Merci pour le script.
    Petite question , serait-il possible de faire une boucle pour importer tous les fichier *.csv d’un répertoire ?
    Pour faire simple , à chaque modification du stock magasin , celui-cui génére un fichier csv.
    Le Script d’import pour prestashop et dans un crontab toutes les heures et import tous les fichiers *.csv ?

    Cordialement ,

  12. Yannnick Says:

    @Overdoz : c’est un script shell il faut l’exécuter en ligne de commande ou dans un CRON.
    @Damien : Suffit d’ajouter une boucle en shell pour le faire. ;)

  13. florent Says:

    Bonjour,

    Pour ma part je viens de mettre ca en place, et le rapport CRON que je recois m’affiche la totalité du fichier tel qu’il est écrit, alors que j’ai bien renseigné les variables de début et qu’un fichier “monfichier.csv” est présent dans import.

    Des idées ?

  14. Yannnick Says:

    Tu as mis les droits d’exécution sur le script ? chmod -x script

  15. florent Says:

    je les ai passé en 755 avec filezilla oui

  16. Romuald Says:

    Bonjour,

    Super tuto ! et tout fonctionne nickel !

    Ma question est simple: ou trouver le nom des variables à indiquer dans la ligne typevalue

    J’ai besoin de modifier les champs remise de l’onglet prix de la fiche produit avec les dates, montant etc …

    Merci pour votre réponse.

    Cordialement

  17. Yannnick Says:

    @Romuald : Ce sont les champs proposé dans la partie “outils > import” de l’administration de Prestashop. Si tu essayes d’importer un fichier de produits, tu as une liste de champs qui apparaît sur la droite de l’écran.

  18. Julien Says:

    Merci beaucoup Yannick !

    Je cherchais désespérement à faire exactement ce que ton script permet de faire.
    J’ai eu quelques difficultés à mettre le script en place, j’ai compris par la suite que mon PHP appelait le sh qui était dans le dossier admin de mon prestashop, du coup la création des “index.php, login.php…” ne fonctionnait pas. J’ai juste déplacé le sh dans un sous-dossier /cron de mon dossier admin et ça fonctionnait nickel chrome.

    En tous cas c’est de l’excellent boulot et ça m’a fait gagner pas mal de temps de dev sur un projet ;) .

    Chapeau m’sieur !

  19. Yannnick Says:

    Content d’avoir pu t’aider. ;)
    Fais attention aux effets de bord de ce genre de mise à jour.

  20. Julien Says:

    Oui pas de souci, j’ai testé le tout dans tous les sens, ça fonctionne sans problème ! Merci encore.

  21. Lolo Says:

    Bonjour,

    Ce script me parait génial, j’ai simplement un message d’erreur a la fin du script « Pas de token ». Pouvez-vous m’éclairer ?
    Merci beaucoup.

  22. Yannnick Says:

    Je réponds ici aussi pour d’autres personnes qui auraient le problème :

    Le Token :
    Il n’a pas du réussir à récupérer le token après l’identification.
    Chaque page de l’admin a un token qui est généré par rapport à la personne connectée. Pour être sur que ce lien n’est pas un lien envoyé par quelqu’un d’extérieur. C’est une sécurité dans l’admin de Prestashop.

    A vérifier :
    - cURL est installé sur la machine
    - Le couple login, mot de passe est bon
    - La configuration du script est correcte

    A savoir :
    Ce script se connecte à l’administration via cURL, il peut donc être installé n’importe ou et sur n’importe quel serveur ayant un accès web.

  23. Romain Says:

    Bonjour Yannick,
    Merci pour ce script,
    dans ton dernier post tu parles de curl, mais dans ton script, il n’y a pas de trace de curl, mais wget.

    Tu parles également de la colonne “no” ( type_value[2]=no ), a quel colonne du fichier csv correspond t’elle ?

    Je te pose ces questions car j’ai aussi un ERREUR : Pas de token :( que je n’arrive pas à résoudre.

    peut etre que mon problème de token vient du fait que mon fichier csv contient 3 colonnes :
    id;Name*;quantity
    1;toto;5

    au lieu des 4, avec le champ no.

    Je ne sais pas si c’est tres clair mon histoire!!!

  24. Yannnick Says:

    Oui j’ai confondu wget et curl car j’ai refait une version plus complète en php avec curl.
    Le token est une clé générée par sécurité donc rien à voir avec les champs du fichier csv.

  25. Romain Says:

    une version plus complète en php ???
    c’est disponible quelque part ?
    Car je dois t’avouer que tu es le seul à avoir développé ce genre d’outil que je cherche depuis un certain temps .

    Merci à toi

    Cordialement

  26. Yannnick Says:

    C’est une version que j’ai commercialisée c’est pour ça que je ne l’ai pas mise en ligne. Elle n’est compatible qu’avec les version 1.4 et supérieur de Prestashop.

  27. Romain Says:

    elle coûte combien?

  28. Yannnick Says:

    Je m’en sert surtout pour faire des exports personnalisés pour des boites qui me le demandent. Du coup je ne le vend pas tel quel car en plus on ajoute un traitement des données pour se caler au format existant. Exemple : Logiciel de caisse, logiciel de gestion des stocks etc …

  29. Yannnick Says:

    Les identifiants pour l’import Prestashop c’est le nom des Produits et non l’identifiant. Possible que ça ré-importe si le nom n’est pas le même.

Leave a Reply

CV Développeur web - PDF

Expérience professionnelle

2011 à aujourd’hui www.pharma7.fr : Chef de projet

Projet www.pharma7.fr : Chef de projet et développeur (2011)
Mission : Réaliser du boutique en ligne de parapharmacie.
- Utilisation du moteur de boutique Prestashop
- Correction de bugs des modules de Prestashop
- Création et installation de modules Prestashop
Outils utilisés : Linux Debian, apache, mysql, php, javascript, html, xhtml, javascript, css...
Lieu : Sète - Hérault

2005 à aujourd’hui www.livesync.com : Chef de projet

Projet www.livesync.com : Chef de projet et développeur (2005 - aujourd’hui)
Mission : Réaliser un site Internet de type réseau social en web 2.0 (AJAJ/AJAX - LAMP).
Gestion de l’équipe afin de développer les outils suivant :
Webmail, partage de fichiers, carnet d’adresse, agenda, ...
Outils utilisés : Linux Debian, apache, mysql, postscript, perl, javascript, html, javascript, xhtml, java, css...
Lieu : Montpellier - Hérault

2003 à 2005 www.midprod.com : Gérant de la société MidProd

Projet Immobilier : Chef de projet et développeur (2003-2005)
Mission : Réaliser un logiciel multipostes permettant aux agences immobilières de gérer leur parc ainsi qu’un site web dédié (LAMP) à chaque agence généré automatiquement avec les données entrées dans le logiciel.
Outils utilisés : Linux RedHat, apache, mysql, Delphi, html, xhtml, php...
Lieu : Montpellier - Hérault

2002 www.telecharger.com : Analyste programmeur (stage 2 mois)

Projet d’interface pour les clients : Développeur
Mission : Développer une interface web pour les clients de la société telecharger.com.
L’utilisateur doit pouvoir gérer son parc de logiciels, accéder aux statistiques relatives à ses produits.
Il est aussi nécessaire qu’il puisse dialoguer par l’intermédiaire d’une messagerie web.
Côté administration, l’interlocuteur telecharger.com reçoit les messages sur un logiciel connecté au serveur.
Outils utilisés : Delphi, mysql, apache, php, html ...
Lieu : Montpellier - Hérault

2000 www.telecharger.com : Technicien (2 mois)

Projet : Gestion de base de données
Mission : Trouver, ajouter et mettre à jour la base de données principale du site internet.
Gestion du chat IRC.
Outils utilisés : Access, Internet explorer ...
Lieu : Montpellier - Hérault

Formation

2004 - 2007 Ingénieur CNAM (En cours ...) - Montpellier
2002 - 2004 DEST CNAM - Montpellier
2000 - 2002 DUT Informatique - Montpellier
1999 - 2000 1ère année en GEII (Electronique) - Montpellier

Compétences

Anglais - Bulats niveau 2
Pratique scolaire
Bonne connaissance
Excellente pratique

Systèmes d'exploitations
Ubuntu
Debian
WINDOWS 7
WINDOWS NT
WINDOWS 2003
WINDOWS XP
WINDOWS 2k
WINDOWS 98


Languages - Echanges de données
Php
Delphi
Javascript
Perl
Html
XML
Xhtml
Ajax/Ajaj web2.0
Json
Shell
Assembleur
SQL


Système de gestion de base de données
Mysql
PostgreSQL
Access


Réseaux et protocles
FTP
HTTP
NFS
ETHERNET
iMode
SNMP
WIFI
TCP/IP


Logiciels / Divers
Apache
Asterisk
PhotoShop
Visual Studio


Système de gestion de contenu (CMS)
Prestashop
Wordpress

Divers

Permis B
PSE1 (Premiers secours en équipe de niveau 1)
Loisirs actuels : Salsa, WCS, Tango, Informatique, Cinéma ...
Anciens loisirs : Rock, KiteSurf, Natation, Judo, Jujitsu ...


Yannick KERMAREC

Ingénieur recherches et développement
Spécialisé web 2.0

Téléphone : 06 59 68 61 97

Email : yannick at kermarec dot com

Site web : http://www.kermarec.com