Synchronisation Google Sheets Bidirectionnelle — Guide complet
Installer, configurer et exploiter la synchronisation bidirectionnelle Google Sheets ⇄ PrestaShop : compte de service Google, partage de la feuille, colonnes, conflits, cron et dépannage.
Le module DataFirefly Sheet Sync synchronise votre catalogue PrestaShop avec un Google Sheet dans les deux sens : vous éditez le prix, la quantité en stock, le titre et l’état actif de vos produits dans la feuille, et le module les répercute dans PrestaShop ; à l’inverse, toute modification faite en back-office remonte automatiquement dans le Sheet. Ce guide couvre l’installation, la création du compte de service Google, le partage de la feuille, la configuration, le fonctionnement de la synchronisation, le cron et le dépannage.
Prérequis
- PrestaShop 8.0 à 9.x.
- PHP 7.4 à 8.3 avec les extensions cURL et OpenSSL activées.
- Un compte Google et l’accès à la console Google Cloud pour créer un compte de service (gratuit).
- Un accès cron (tâche planifiée serveur ou service de cron externe) pour la synchronisation automatique.
Aucune bibliothèque Composer n’est requise : les appels à l’API Google Sheets sont signés en PHP natif (JWT RS256) à l’aide de cURL et d’OpenSSL, tous deux déjà exigés par PrestaShop.
Installation
- Dans le back-office, ouvrez Modules > Module Manager puis Téléverser un module et déposez le fichier
dfsheetsync.zip. - Une fois installé, ouvrez la page de configuration via le bouton Configurer.
À l’installation, le module crée sa table d’état de synchronisation, enregistre ses valeurs par défaut et génère automatiquement un jeton de cron.
Créer le compte de service Google
Un compte de service est une identité Google que le module utilise pour lire et écrire dans votre feuille, sans OAuth ni écran de consentement.
- Dans la console Google Cloud, créez (ou sélectionnez) un projet.
- Activez l’API Google Sheets pour ce projet (menu API et services > Bibliothèque, recherchez « Google Sheets API », puis Activer).
- Ouvrez API et services > Identifiants, cliquez sur Créer des identifiants > Compte de service, donnez-lui un nom et validez.
- Ouvrez le compte de service créé, onglet Clés, puis Ajouter une clé > Créer une clé > JSON. Un fichier
.jsonest téléchargé : c’est la clé que vous collerez dans le module.
Ce fichier JSON contient une clé privée. Conservez-le en lieu sûr et ne le partagez pas. Vous pourrez toujours en générer un nouveau et révoquer l’ancien depuis la console.
Partager la feuille avec le compte de service
Le fichier JSON contient un champ client_email de la forme nom@projet.iam.gserviceaccount.com. C’est l’adresse à autoriser.
- Ouvrez (ou créez) votre Google Sheet.
- Cliquez sur Partager et ajoutez l’adresse
client_emaildu compte de service avec le rôle Éditeur.
Sans ce partage en Éditeur, l’API renverra une erreur « permission refusée » : le compte de service n’a accès qu’aux feuilles qui lui ont été explicitement partagées.
Configuration
La page de configuration regroupe les réglages suivants :
- JSON du compte de service : collez ici le contenu complet du fichier
.json. Laissez le champ vide pour conserver la clé déjà enregistrée. - ID ou URL du tableur : collez l’identifiant du Sheet ou son URL complète — l’ID est extrait automatiquement.
- Nom de l’onglet : le nom de l’onglet à utiliser dans le tableur (par défaut
Products). Il est rempli avec une ligne d’en-tête au premier passage. - Langue des titres : la langue dans laquelle les titres de produits sont lus et écrits.
- Priorité en cas de conflit : détermine qui l’emporte lorsqu’un produit a été modifié des deux côtés (le Google Sheet, ou PrestaShop).
- N’exporter que les produits actifs : limite la synchronisation aux produits actifs.
Enregistrez, puis vérifiez le panneau de statut : il affiche l’e-mail du compte de service connecté, l’URL de cron, la date de la dernière synchronisation et un lien direct vers le Sheet.
Structure de la feuille
La feuille comporte six colonnes, dont l’en-tête est créé automatiquement au premier passage :
- ID — identifiant du produit PrestaShop. Ne pas modifier.
- Référence — référence produit (lecture seule côté sync).
- Nom — titre du produit dans la langue configurée.
- Prix HT — prix de base hors taxes.
- Quantité — quantité en stock globale.
- Actif — 1 pour actif, 0 pour inactif.
La colonne ID sert à identifier chaque produit : ne la modifiez jamais et ne réordonnez pas manuellement les colonnes. Une ligne dont l’ID ne correspond à aucun produit est simplement ignorée.
Comment fonctionne la synchronisation
Le module mémorise l’empreinte (checksum) du dernier état synchronisé de chaque produit. À chaque passage, il compare l’état courant de la boutique et celui de la feuille à cette empreinte pour déterminer ce qui a changé, et de quel côté :
- Feuille modifiée, boutique inchangée → les valeurs de la feuille sont appliquées au produit.
- Boutique modifiée, feuille inchangée → les valeurs de la boutique sont écrites dans la feuille.
- Les deux modifiés → la règle de priorité configurée tranche (le Sheet gagne, ou la boutique gagne), et l’arbitrage est journalisé.
- Produit absent de la feuille → il est ajouté automatiquement, la boutique faisant référence.
Seules les lignes réellement modifiées sont écrites, dans le bon sens ; les écritures vers Google sont groupées par lots pour respecter les quotas de l’API et rester rapides même sur un gros catalogue.
Synchronisation manuelle et réinitialisation
Deux boutons sont disponibles dans la configuration :
- Synchroniser maintenant : lance immédiatement une synchronisation complète et affiche un rapport (lignes poussées vers le Sheet, produits mis à jour, lignes ajoutées, conflits résolus, lignes ignorées).
- Réinitialiser l’état : vide la table d’état de synchronisation. Au prochain passage, la boutique est considérée comme la source de vérité pour chaque produit. Utile après une réorganisation manuelle de la feuille.
Configuration du cron
Pour une synchronisation automatique, planifiez l’URL de cron affichée dans la configuration, toutes les 5 à 15 minutes :
curl "https://votre-boutique.com/module/dfsheetsync/cron?token=VOTRE_TOKEN"
Le jeton est généré à l’installation et sécurise l’endpoint. L’appel renvoie un rapport JSON de la synchronisation.
Choisissez une fréquence adaptée à votre rythme d’édition. Toutes les 5 minutes convient à une équipe qui édite en continu ; toutes les 15 à 30 minutes suffit pour des mises à jour ponctuelles.
Validation des données
Avant d’écrire dans la boutique, le module valide chaque ligne de la feuille. Une ligne est ignorée et journalisée (sans interrompre le reste de la synchronisation) dans les cas suivants :
- nom de produit vide ou contenant des caractères non autorisés ;
- prix négatif ;
- ID ne correspondant à aucun produit de la boutique.
Le rapport de synchronisation indique le nombre de lignes ignorées, et le détail est consultable dans les journaux PrestaShop.
Champs synchronisés et limites
La version 1.0.0 synchronise, pour chaque produit : le titre (dans la langue configurée), le prix de base hors taxes, la quantité de stock globale et l’état actif/inactif.
Ne sont pas gérés en version 1.0.0 : les déclinaisons (stock et prix par combinaison) et les prix spécifiques. Ils restent pilotés depuis PrestaShop. La synchronisation s’effectue dans le contexte de la boutique courante.
Dépannage
- Erreur « permission refusée » : vérifiez que la feuille est partagée en Éditeur avec l’adresse
client_emaildu compte de service. - Erreur « JSON invalide » : le contenu collé doit être le fichier de clé complet, comprenant au moins
client_emailetprivate_key. - Aucune synchronisation : vérifiez que l’ID du tableur est renseigné et que le cron s’exécute bien, ou lancez une synchronisation manuelle.
- Erreur d’authentification Google : assurez-vous que l’API Google Sheets est activée pour le projet et que l’horloge du serveur est à l’heure (le JWT est horodaté).
- Une ligne n’est pas appliquée : nom vide/invalide ou prix négatif ; corrigez la ligne dans la feuille.
- Un produit revient à l’ancienne valeur : vérifiez la règle de priorité en cas de conflit ; le côté prioritaire écrase l’autre lorsque les deux ont changé.
Désinstallation
La désinstallation supprime la table d’état de synchronisation et la configuration du module (y compris la clé du compte de service et le jeton de cron). Vos produits et votre Google Sheet ne sont pas modifiés. Pour une simple mise à jour, remplacer les fichiers du module suffit : l’état de synchronisation est conservé.