# Jeu concours et tirage au sort pour PrestaShop 8 et 9 : documentation

> Présentation Le module dfcontest ajoute des jeux concours à votre boutique PrestaShop 8 ou 9. Les clients participent automatiquement en passant commande, ou gratuitement par un formulaire. Le tirage au…

- Page: <https://www.datafirefly.com/documentation/dfcontest/>
- Langue: fr
- Mis à jour le: 2026-09-24
- Autres langues: [en](https://www.datafirefly.com/en/documentation/dfcontest/index.md), [es](https://www.datafirefly.com/es/documentation/dfcontest/index.md), [de](https://www.datafirefly.com/de/documentation/dfcontest/index.md), [it](https://www.datafirefly.com/it/documentation/dfcontest/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfcontest/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfcontest/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfcontest/index.md)
- Index: <https://www.datafirefly.com/documentation/llms.txt>

## Présentation

Le module **dfcontest** ajoute des jeux concours à votre boutique PrestaShop 8 ou 9. Les clients participent automatiquement en passant commande, ou gratuitement par un formulaire. Le tirage au sort est vérifiable : n'importe quel visiteur peut refaire le calcul et retrouver les mêmes gagnants. Le module génère le règlement, envoie les emails aux gagnants et recueille leur adresse de livraison.

## Installation

1. Dans le back-office, ouvrez **Modules > Gestionnaire de modules** et cliquez sur **Téléverser un module**.
2. Envoyez le fichier `dfcontest-x.y.z.zip`, puis cliquez sur **Installer**.
3. Le menu **Clients > Jeux concours** apparaît. La configuration générale se trouve sur la page du module.

Pour une mise à jour, téléversez simplement la nouvelle version : les scripts de mise à jour ajoutent les colonnes et les réglages manquants sans toucher à vos jeux ni à vos participations.

## Configuration du module

### Organisateur

Renseignez la raison sociale, l'adresse du siège, le numéro d'immatriculation (SIRET, CIF, Handelsregister, KvK…) et l'email de contact des participants. Ces informations alimentent le règlement généré et les emails.

### Affichage

- **Nom des gagnants sur les pages publiques** : initiales seules (J. D.) ou prénom et initiale (Jean D.).
- **Afficher le jeu sur les fiches des produits éligibles** et **afficher les participations obtenues dans le panier**, avec le montant qui manque pour la participation suivante.
- **Couleur d'accent** : teinte du compte à rebours, des encadrés et des bordures. Laissez vide pour le vert par défaut ; les boutons gardent les couleurs de votre thème.
- **Reçu de participation par email** : code de participation et lien de partage envoyés dès qu'une participation par formulaire est valide.
- **Mettre en avant le jeu en cours sur la page d'accueil** (hook `displayHome`).

### Protection contre la fraude

L'option **Refuser les adresses email jetables** bloque les principaux services d'emails temporaires (Yopmail, Mailinator, 10 Minute Mail, Guerrilla Mail et d'autres). Le champ **Autres domaines bloqués** accepte un domaine par ligne ; les sous-domaines sont bloqués aussi.

### Tâches automatiques (cron)

La page de configuration affiche une URL cron signée. Elle n'est nécessaire que pour le pilote automatique (voir plus bas). Appelez-la toutes les 5 à 15 minutes, par exemple :

```
*/10 * * * * curl -s "https://votre-boutique.fr/module/dfcontest/cron?token=VOTRE_JETON" > /dev/null
```

La date du dernier passage est affichée sous l'URL.

## Créer un jeu

Ouvrez **Clients > Jeux concours** puis **Nouveau jeu**. Le formulaire est découpé en onglets.

### Général

- **Nom**, **URL simplifiée**, **description** et **lot** (décrivez chaque lot et sa valeur commerciale : ce texte est repris dans le règlement).
- **Image** : JPG, PNG ou WebP, 4 Mo maximum, 1600 px de large conseillés.
- **Début**, **fin** et **date de tirage annoncée**.
- **Mettre en avant sur la page d'accueil** : si plusieurs jeux sont en cours, celui qui se termine en premier est affiché.

### Comment participer

Activez la participation par achat, par formulaire, ou les deux. Le **maximum de participations par participant** compte ensemble les achats, le formulaire et les bonus de parrainage, par adresse email.

### Participations par achat

- **1 participation par commande** ou **1 participation par tranche de montant** (TTC, dans la devise par défaut).
- **Montant minimum de commande** et **participations maximum par commande**.
- **ID des produits éligibles** et **catégories éligibles** : si vous en indiquez, seul le montant de ces produits compte, remises réparties au prorata. Laissez vide pour tout le catalogue.

Une participation est créée quand la commande passe à un statut payé pendant la période du jeu. Elle est retirée si la commande est annulée, remboursée ou en erreur de paiement, tant que les participations ne sont pas scellées. Une commande scindée en plusieurs livraisons compte comme une seule commande.

### Participations par formulaire

- **Compte client obligatoire** : réserve le formulaire aux clients connectés.
- **Confirmation par email** (recommandé) : les invités reçoivent un lien et leur participation ne compte qu'une fois confirmée.
- **Numéro de téléphone** : masqué, facultatif ou obligatoire.
- **Question** : question libre dont la réponse est enregistrée et exportée.
- **Case d'inscription à la newsletter** : décochée par défaut.
- **Participations bonus par ami invité** et **participations bonus maximum par participant** : active le parrainage (0 le désactive).

### Tirage

- **Nombre de gagnants** et **nombre de suppléants** (tirés dans l'ordre après les gagnants).
- **Un seul lot par personne** : un participant tiré une seconde fois est ignoré.
- **Pilote automatique** : scellement à la date de fin, tirage à la date annoncée, emails aux gagnants (URL cron requise).
- **Remplacer les gagnants qui ne réclament pas à temps** : à la fin du délai, le gagnant est déclaré désisté et le suppléant suivant reçoit l'email (URL cron requise).
- **Délai pour réclamer le lot**, en jours.

L'empreinte du tirage est créée au premier enregistrement du jeu et ne peut plus changer. Après le scellement, les dates, les réglages de participation et le nombre de gagnants sont verrouillés.

### Règlement

Laissé vide, le règlement est généré en 9 articles à partir des réglages du jeu et des informations organisateur. Vous pouvez saisir votre propre texte avec les variables `{organizer}`, `{contest_name}`, `{date_start}`, `{date_end}`, `{draw_date}`, `{nb_winners}`, `{prize}`, `{claim_days}`, `{verify_url}`, `{commitment}` et les autres listées dans l'onglet.

Le règlement généré est un modèle. Faites-le vérifier au regard du droit de chaque pays où le jeu est ouvert, notamment sur l'obligation d'une participation sans achat.

## Côté boutique

- **/contests** : liste des jeux en cours, à venir et terminés.
- **Page du jeu** : compte à rebours, lots, modes de participation, formulaire, puis code de participation, nombre de participations et lien de partage une fois inscrit. Après le tirage : liste des gagnants et bandeau « Vous avez gagné » pour le visiteur concerné.
- **/rules** : règlement imprimable. **/draw** : page de vérification.
- **Fiche produit et panier** : bandeau sur les produits éligibles et message de progression.
- **Confirmation de commande** : participations obtenues avec leur code.
- **Mon compte > Mes participations aux jeux** : historique, statut et bouton de réclamation du lot pour les gagnants.
- **Widget** : affiché sur l'accueil, ou n'importe où avec `{widget name="dfcontest"}` ou `{widget name="dfcontest" id_contest=3}`.

## Déroulé du tirage

Le tableau de bord du jeu (bouton **Voir** dans la liste) présente le tirage en 4 étapes.

1. **Empreinte publiée** : l'empreinte SHA-256 de la clé secrète est publique depuis la création du jeu.
2. **Sceller les participations** : disponible après la date de fin. La liste des participations valides est figée et son empreinte publiée. Au même moment, le module s'engage sur un round futur de [drand](https://drand.love), l'aléa public de la League of Entropy, publié environ deux minutes plus tard, ou après la date de tirage annoncée.
3. **Lancer le tirage** : dès que la valeur du round est publiée, le module la récupère et tire les gagnants puis les suppléants. Si votre serveur ne peut pas joindre drand, ouvrez le lien drand affiché, copiez la valeur `randomness` et collez-la dans le champ prévu.
4. **Prévenir les gagnants** : chaque gagnant reçoit un email dans la langue de sa participation, avec un lien pour accepter le lot et indiquer son adresse avant la fin du délai.

### Suivre la remise des lots

Le tableau des gagnants indique pour chacun : réclamé (avec l'adresse de livraison), en attente de réponse ou délai dépassé. Le bouton **Renvoyer** renvoie l'email et relance le délai. **Déclarer désisté** retire le lot au gagnant et le passe au premier suppléant disponible ; renvoyez ensuite les emails pour le prévenir. Quand un gagnant réclame son lot, l'email de contact de l'organisateur reçoit ses coordonnées.

## Page de vérification

La page **/draw** publie l'empreinte de la clé, l'empreinte de la liste, le round drand, puis la clé, la valeur publique, la graine et les gagnants. Un participant peut y chercher son code dans la liste scellée et lancer la vérification dans son navigateur, qui contrôle chaque étape sans rien envoyer à la boutique. Le fichier de preuve JSON est téléchargeable depuis la page et depuis le tableau de bord.

## Pilote automatique

Pour un jeu avec l'option **Pilote automatique**, chaque passage du cron :

- scelle les participations une fois la date de fin passée ;
- lance le tirage quand la date annoncée est atteinte et que la valeur drand est publiée, puis envoie les emails aux gagnants ;
- si l'option de remplacement est active, déclare désistés les gagnants dont le délai est dépassé sans réclamation et prévient le suppléant suivant.

Le cron est sans effet sur les jeux sans pilote automatique. Il peut tourner aussi souvent que vous le souhaitez.

## Exports et données personnelles

- **Exporter les gagnants (CSV)** : rang, code, coordonnées, source, ticket tiré, réponse, date de notification, statut de réclamation et adresse de livraison.
- **Exporter les participations (CSV)** : toutes les participations avec leur statut, leur source et l'accord newsletter.
- Avec le module officiel **psgdpr**, la suppression d'un client anonymise ses participations et retire celles des jeux non scellés ; l'export RGPD inclut ses participations et sa réclamation de lot.

## Dépannage

### Une commande payée n'a pas créé de participation

PrestaShop ignore les hooks d'un module quand le profil de l'employé qui change le statut n'a pas le droit de voir ce module. Dans le tableau de bord du jeu, le bouton **Vérifier les commandes** parcourt les commandes payées de la période et crée les participations manquantes.

### Un invité ne reçoit pas l'email de confirmation

Sur la page du jeu, le bouton **Renvoyer le lien** apparaît pour une participation en attente (un envoi toutes les deux minutes au maximum). Vérifiez aussi la configuration des emails de la boutique.

### Le tirage refuse de démarrer

La valeur du round drand n'est publiée qu'à l'heure indiquée dans le tableau de bord. Après cette heure, si drand reste injoignable depuis le serveur, collez la valeur `randomness` copiée depuis le lien drand.

### Le cron ne fait rien

Vérifiez que le jeu a l'option **Pilote automatique** et que la boutique n'est pas en mode maintenance, qui bloque aussi l'URL cron. En multiboutique, appelez l'URL cron de chaque boutique.
