Retrait en magasin (Store Pickup) — Guide complet
Installer, configurer et exploiter le retrait en magasin : transporteur dédié, choix du point de retrait sur carte interactive (Leaflet/OpenStreetMap, sans clé API), gestion des magasins et suivi de la commande pour PrestaShop 8 et 9.
Présentation
Le module Retrait en magasin (datafireflystorepickup) permet à vos clients de récupérer leur commande dans l’un de vos points de vente plutôt que de se la faire livrer. À l’installation, un transporteur « Retrait en magasin » est créé automatiquement. Au moment du checkout, lorsque le client choisit ce transporteur, une liste de magasins et une carte interactive apparaissent : il sélectionne son point de retrait, et ce choix est enregistré avec la commande.
La carte s’appuie sur Leaflet et OpenStreetMap, sans aucune clé API à fournir. Le module est compatible PrestaShop 8.x et 9.x et repose exclusivement sur les hooks natifs, sans override du cœur.
Installation
- Zippez le dossier
datafireflystorepickup(l’archive doit contenir le dossier lui-même, pas seulement son contenu). - Depuis le back-office, ouvrez Modules > Gestionnaire de modules, puis cliquez sur Installer un module et déposez l’archive ZIP.
- Une fois l’installation terminée, cliquez sur Configurer.
À l’installation, le module réalise automatiquement les opérations suivantes : création du transporteur « Retrait en magasin » (avec ses plages de prix et de poids, toutes les zones et tous les groupes clients), création des tables de données, enregistrement des hooks et initialisation des frais de retrait à 0.
Le transporteur est suivi par sa référence (id_reference) et non par son seul identifiant : vous pouvez le modifier librement dans Transport > Transporteurs (nom, délai, logo, zones) sans casser le lien avec le module.
Configuration
Rendez-vous dans Modules > Retrait en magasin > Configurer. La page réunit les réglages généraux et la gestion des magasins.
Frais de retrait
Le champ Frais de retrait (HT) définit le coût appliqué au transporteur de retrait. Laissez 0 pour un retrait gratuit, ou saisissez un montant hors taxe. Ce tarif s’applique quel que soit le magasin choisi.
Gestion des magasins
La liste des magasins affiche l’ensemble de vos points de retrait avec leur nom, adresse, code postal, ville, téléphone et statut. Depuis cette liste, vous pouvez ajouter, modifier, activer/désactiver ou supprimer un magasin.
Chaque magasin comporte les champs suivants :
- Nom (obligatoire) — libellé affiché au client.
- Adresse (obligatoire) et Code postal.
- Ville (obligatoire).
- Téléphone.
- Horaires — champ libre, par exemple « Lun-Sam 9h-19h ».
- Latitude et Longitude (obligatoires) — position du magasin sur la carte.
- Actif — seuls les magasins actifs sont proposés au checkout.
Pour renseigner les coordonnées, il n’est pas nécessaire de les chercher manuellement : cliquez sur la carte affichée sous le formulaire pour placer le point, ou utilisez le géocodage d’adresse. La latitude et la longitude se remplissent automatiquement. Le géocodage s’appuie sur Nominatim / OpenStreetMap.
Côté client (checkout)
À l’étape de livraison, lorsque le client sélectionne le transporteur « Retrait en magasin », le module affiche sous le transporteur la liste des magasins actifs ainsi qu’une carte interactive où chaque magasin est matérialisé par un marqueur. Le client choisit son point de retrait dans la liste ou directement sur la carte.
La sélection est obligatoire : tant qu’aucun magasin n’est choisi, l’étape de livraison ne peut pas être validée et un message invite le client à sélectionner son magasin. Le choix est enregistré en temps réel (via une requête AJAX) et rattaché au panier.
Si aucun magasin actif n’est disponible, un message d’avertissement s’affiche à la place de la carte.
Suivi de la commande
Une fois la commande validée, le magasin choisi est enregistré comme un instantané rattaché à la commande (nom, adresse, code postal, ville, téléphone et horaires au moment de l’achat). Il reste ainsi consultable même si le magasin est modifié ou supprimé par la suite. Le point de retrait s’affiche automatiquement :
- sur la page de confirmation de commande ;
- dans le détail de la commande de l’espace client ;
- dans la fiche commande du back-office, en colonne latérale.
Structure technique
Cette section s’adresse aux intégrateurs et développeurs souhaitant comprendre le fonctionnement interne du module.
Type de module
La classe principale DataFireflyStorePickup étend CarrierModule. Le tarif du transporteur est renvoyé par getOrderShippingCost() et getOrderShippingCostExternal(), tous deux basés sur la configuration DATAFIREFLY_PICKUP_FEE.
Hooks utilisés
actionFrontControllerSetMedia— charge Leaflet (CSS/JS distants) et les assets front du module sur la page commande.displayCarrierExtraContent— injecte la liste et la carte sous le transporteur de retrait.actionCarrierUpdate— met à jour l’identifiant du transporteur lorsqu’il est modifié en back-office.actionValidateStepComplete— rend la sélection du magasin obligatoire à l’étape de livraison.actionValidateOrder— fige le magasin choisi dans la commande.displayOrderConfirmationetdisplayOrderDetail— affichent le point de retrait côté client.displayAdminOrderSide— affiche le point de retrait dans la fiche commande du back-office.
Reconnaissance du transporteur
La méthode isPickupCarrier() identifie le transporteur de retrait par sa référence (id_reference) autant que par son identifiant courant, car l’ID d’un transporteur PrestaShop change à chaque modification en back-office. Deux clés de configuration sont stockées à cet effet : DATAFIREFLY_PICKUP_CARRIER_ID et DATAFIREFLY_PICKUP_CARRIER_REF.
Tables de données
datafirefly_pickup_store— les magasins (nom, adresse, coordonnées, horaires, statut). Gérée par l’ObjectModelDataFireflyPickupStore.datafirefly_pickup_selection— le magasin choisi par panier (cléid_cart), avant validation de la commande.datafirefly_pickup_order— l’instantané du magasin par commande (cléid_order), conservé après l’achat.
Sélection AJAX
Le contrôleur front ajax (action selectStore) enregistre le magasin sélectionné dans datafirefly_pickup_selection pour le panier courant. À la validation de la commande, cette sélection est copiée dans datafirefly_pickup_order puis la ligne de panier est supprimée.
Désinstallation
La désinstallation marque le transporteur comme supprimé et désactivé, retire les clés de configuration (DATAFIREFLY_PICKUP_CARRIER_ID, DATAFIREFLY_PICKUP_CARRIER_REF, DATAFIREFLY_PICKUP_FEE) et supprime les trois tables du module. Les magasins enregistrés sont donc effacés.
Limites connues
- Le point de retrait n’est pas injecté dans les e-mails de confirmation : il reste visible dans le back-office et l’espace client.
- Le géocodage repose sur Nominatim (OpenStreetMap) — un usage modéré est recommandé pour respecter les conditions d’utilisation du service.
FAQ
Faut-il une clé API pour la carte ?
Non. La carte utilise Leaflet et les tuiles OpenStreetMap, sans clé API ni configuration externe.
Le client peut-il valider sa commande sans choisir de magasin ?
Non. Lorsque le transporteur de retrait est sélectionné, le choix d’un magasin est obligatoire pour passer l’étape de livraison.
Que devient le point de retrait si je supprime un magasin après une commande ?
La commande conserve un instantané du magasin (nom, adresse, horaires…) enregistré au moment de l’achat. Il reste consultable même après suppression du magasin.
Le module est-il compatible PrestaShop 9 ?
Oui, le module est compatible PrestaShop 8.x et 9.x.