# Winactie-module voor PrestaShop 8 en 9: documentatie

> Overzicht De module dfcontest voegt winacties toe aan je PrestaShop 8- of 9-winkel. Klanten doen automatisch mee bij een bestelling, of gratis via een formulier. De trekking is controleerbaar: elke…

- Pagina: <https://www.datafirefly.com/nl/documentation/dfcontest/>
- Taal: nl
- Bijgewerkt op: 2026-09-24
- Andere talen: [fr](https://www.datafirefly.com/documentation/dfcontest/index.md), [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), [pt](https://www.datafirefly.com/pt/documentation/dfcontest/index.md)
- Index: <https://www.datafirefly.com/nl/documentation/llms.txt>

## Overzicht

De module **dfcontest** voegt winacties toe aan je PrestaShop 8- of 9-winkel. Klanten doen automatisch mee bij een bestelling, of gratis via een formulier. De trekking is controleerbaar: elke bezoeker kan de berekening herhalen en krijgt dezelfde winnaars. De module genereert het reglement, mailt de winnaars en verzamelt hun leveringsadres.

## Installatie

1. Open in de back-office **Modules > Modulebeheer** en klik op **Een module uploaden**.
2. Upload het bestand `dfcontest-x.y.z.zip` en klik op **Installeren**.
3. Het menu **Klanten > Winacties** verschijnt. De algemene instellingen staan op de configuratiepagina van de module.

Om bij te werken upload je gewoon de nieuwe versie: de updatescripts voegen ontbrekende kolommen en instellingen toe zonder je winacties of deelnames aan te raken.

## Configuratie van de module

### Organisator

Vul de officiële bedrijfsnaam, het statutair adres, het registratienummer (KvK, SIRET, CIF, Handelsregister…) en het contact-e-mailadres voor deelnemers in. Deze gegevens worden gebruikt in het gegenereerde reglement en in de e-mails.

### Weergave

- **Namen van winnaars op openbare pagina's**: alleen initialen (J. J.) of voornaam en initiaal (Jan J.).
- **De winactie tonen op de pagina's van geldige producten** en **verdiende deelnames tonen in de winkelwagen**, met het bedrag dat ontbreekt voor de volgende deelname.
- **Accentkleur**: kleur van de afteller, kaders en randen. Laat leeg voor het standaardgroen; knoppen behouden de kleuren van je thema.
- **Deelnamebevestiging per e-mail**: deelnamecode en deellink, verstuurd zodra een deelname via het formulier geldig is.
- **De lopende winactie uitlichten op de startpagina** (hook `displayHome`).

### Fraudebescherming

De optie **Wegwerp-e-mailadressen weigeren** blokkeert de belangrijkste diensten voor tijdelijke e-mailadressen (Yopmail, Mailinator, 10 Minute Mail, Guerrilla Mail en andere). Het veld **Andere geblokkeerde domeinen** neemt één domein per regel; subdomeinen worden ook geblokkeerd.

### Automatische taken (cron)

De configuratiepagina toont een ondertekende cron-URL. Die is alleen nodig voor de automatische piloot (zie verderop). Roep hem elke 5 tot 15 minuten aan, bijvoorbeeld:

```
*/10 * * * * curl -s "https://jouw-winkel.nl/module/dfcontest/cron?token=JOUW_TOKEN" > /dev/null
```

De datum van de laatste run staat onder de URL.

## Een winactie aanmaken

Open **Klanten > Winacties** en daarna **Nieuwe winactie**. Het formulier is verdeeld in tabbladen.

### Algemeen

- **Naam**, **vriendelijke URL**, **beschrijving** en **prijs** (beschrijf elke prijs met zijn winkelwaarde: deze tekst komt in het reglement).
- **Afbeelding**: JPG, PNG of WebP, maximaal 4 MB, aanbevolen breedte 1600 px.
- **Start**, **einde** en **aangekondigde trekkingsdatum**.
- **Uitlichten op de startpagina**: lopen er meerdere winacties, dan wordt de winactie getoond die het eerst eindigt.

### Hoe doe je mee

Schakel deelname via aankoop, via het formulier of beide in. Het **maximum aantal deelnames per deelnemer** telt aankopen, formulier en doorverwijsbonussen samen, per e-mailadres.

### Deelnames via aankoop

- **1 deelname per bestelling** of **1 deelname per bedragstap** (incl. btw, in de standaardvaluta).
- **Minimaal bestelbedrag** en **maximum aantal deelnames per bestelling**.
- **ID's van geldige producten** en **geldige categorieën**: als ze zijn ingevuld, telt alleen het bedrag van deze producten, met kortingen naar verhouding verdeeld. Laat leeg voor de hele catalogus.

Een deelname ontstaat wanneer de bestelling tijdens de looptijd een betaalde status krijgt. Ze wordt verwijderd als de bestelling wordt geannuleerd, terugbetaald of een betalingsfout krijgt, zolang de deelnames niet zijn verzegeld. Een bestelling die over meerdere zendingen is verdeeld, telt als één bestelling.

### Deelnames via formulier

- **Klantaccount verplicht**: het formulier alleen voor ingelogde klanten.
- **Bevestiging per e-mail** (aanbevolen): gasten krijgen een link en hun deelname telt pas na bevestiging.
- **Telefoonnummer**: verborgen, optioneel of verplicht.
- **Vraag**: vrije vraag waarvan het antwoord wordt opgeslagen en geëxporteerd.
- **Aanmeldvakje voor de nieuwsbrief**: standaard niet aangevinkt.
- **Bonusdeelnames per uitgenodigde vriend** en **maximum bonusdeelnames per deelnemer**: schakelt doorverwijzen in (0 schakelt het uit).

### Trekking

- **Aantal winnaars** en **aantal reservewinnaars** (op volgorde getrokken na de winnaars).
- **Eén prijs per persoon**: een deelnemer die een tweede keer wordt getrokken, wordt overgeslagen.
- **Automatische piloot**: verzegeling op de einddatum, trekking op de aangekondigde datum, winnaarsmails (cron-URL vereist).
- **Winnaars vervangen die niet op tijd opeisen**: na afloop van de termijn wordt de winnaar als afgezien gemarkeerd en krijgt de volgende reservewinnaar de e-mail (cron-URL vereist).
- **Dagen om de prijs op te eisen**.

De vingerafdruk van de trekking wordt aangemaakt bij de eerste keer opslaan van de winactie en kan daarna niet meer veranderen. Na de verzegeling zijn datums, deelname-instellingen en aantal winnaars vergrendeld.

### Reglement

Laat je het veld leeg, dan wordt een reglement in 9 artikelen gegenereerd uit de instellingen van de winactie en de organisatorgegevens. Je kunt ook een eigen tekst schrijven met de variabelen `{organizer}`, `{contest_name}`, `{date_start}`, `{date_end}`, `{draw_date}`, `{nb_winners}`, `{prize}`, `{claim_days}`, `{verify_url}`, `{commitment}` en de andere die in het tabblad staan.

Het gegenereerde reglement is een sjabloon. Laat het toetsen aan het recht van elk land waar de winactie openstaat. In Nederland geldt bijvoorbeeld de Gedragscode Promotionele Kansspelen, met onder meer een maximale prijzenwaarde en een verplichte vermelding van de organisator.

## In de winkel

- **/contests**: lijst van lopende, komende en afgelopen winacties.
- **Pagina van de winactie**: afteller, prijzen, manieren om mee te doen, formulier en na deelname de deelnamecode, het aantal deelnames en de deellink. Na de trekking: lijst van winnaars en een melding „Je hebt gewonnen” voor de betrokken bezoeker.
- **/rules**: afdrukbaar reglement. **/draw**: controlepagina.
- **Productpagina en winkelwagen**: melding bij geldige producten en voortgangsbericht.
- **Orderbevestiging**: verdiende deelnames met hun code.
- **Mijn account > Mijn deelnames aan winacties**: geschiedenis, status en knop om de prijs op te eisen voor winnaars.
- **Widget**: op de startpagina, of overal met `{widget name="dfcontest"}` of `{widget name="dfcontest" id_contest=3}`.

## Verloop van de trekking

Het dashboard van de winactie (knop **Bekijken** in de lijst) toont de trekking in 4 stappen.

1. **Vingerafdruk gepubliceerd**: de SHA-256-vingerafdruk van de geheime sleutel is openbaar sinds de winactie is aangemaakt.
2. **Deelnames verzegelen**: beschikbaar na de einddatum. De lijst met geldige deelnames wordt bevroren en de vingerafdruk ervan gepubliceerd. Op hetzelfde moment legt de module zich vast op een toekomstige ronde van [drand](https://drand.love), de openbare willekeur van de League of Entropy, die ongeveer twee minuten later wordt gepubliceerd, of na de aangekondigde trekkingsdatum.
3. **Trekking uitvoeren**: zodra de waarde van de ronde is gepubliceerd, haalt de module die op en trekt eerst de winnaars en daarna de reservewinnaars. Kan je server drand niet bereiken, open dan de getoonde drand-link, kopieer de waarde `randomness` en plak die in het veld.
4. **Winnaars informeren**: elke winnaar krijgt een e-mail in de taal van zijn deelname, met een link om de prijs te aanvaarden en vóór de termijn zijn adres door te geven.

### De prijsuitreiking opvolgen

De winnaarstabel toont per winnaar: opgeëist (met leveringsadres), wacht op antwoord of termijn verstreken. De knop **Opnieuw sturen** verstuurt de e-mail opnieuw en laat de termijn opnieuw ingaan. **Markeren als afgezien** neemt de prijs van de winnaar af en geeft hem aan de eerste beschikbare reservewinnaar; stuur daarna de e-mails opnieuw om die te informeren. Als een winnaar zijn prijs opeist, ontvangt het contact-e-mailadres van de organisator zijn gegevens.

## Controlepagina

De pagina **/draw** publiceert de vingerafdruk van de sleutel, de vingerafdruk van de lijst, de drand-ronde en daarna de sleutel, de openbare waarde, de seed en de winnaars. Een deelnemer kan er zijn code zoeken in de verzegelde lijst en de controle in zijn browser starten, die elke stap nagaat zonder iets naar de winkel te sturen. Het JSON-bewijsbestand is te downloaden vanaf de pagina en vanuit het dashboard.

## Automatische piloot

Voor een winactie met de optie **Automatische piloot** doet elke cronrun het volgende:

- de deelnames verzegelen zodra de einddatum voorbij is;
- de trekking uitvoeren wanneer de aangekondigde datum is bereikt en de drand-waarde is gepubliceerd, en daarna de winnaars mailen;
- als de vervangoptie aan staat, winnaars van wie de termijn zonder claim is verstreken als afgezien markeren en de volgende reservewinnaar informeren.

De cron heeft geen effect op winacties zonder automatische piloot. Hij mag zo vaak draaien als je wilt.

## Exports en persoonsgegevens

- **Winnaars exporteren (CSV)**: positie, code, contactgegevens, bron, getrokken lot, antwoord, datum van de melding, claimstatus en leveringsadres.
- **Deelnames exporteren (CSV)**: alle deelnames met hun status, bron en toestemming voor de nieuwsbrief.
- Met de officiële module **psgdpr** anonimiseert het verwijderen van een klant zijn deelnames en trekt het die van niet-verzegelde winacties in; de AVG-export bevat zijn deelnames en zijn prijsclaim.

## Problemen oplossen

### Een betaalde bestelling heeft geen deelname aangemaakt

PrestaShop slaat de hooks van een module over wanneer het profiel van de medewerker die de status wijzigt die module niet mag zien. In het dashboard van de winactie loopt de knop **Bestellingen controleren** de betaalde bestellingen van de periode door en maakt de ontbrekende deelnames aan.

### Een gast ontvangt de bevestigingsmail niet

Op de pagina van de winactie verschijnt bij een deelname in afwachting de knop **Link opnieuw sturen** (hoogstens één e-mail per twee minuten). Controleer ook de e-mailinstellingen van de winkel.

### De trekking start niet

De waarde van de drand-ronde wordt pas gepubliceerd op het tijdstip dat het dashboard toont. Blijft drand daarna onbereikbaar vanaf de server, plak dan de waarde `randomness` die je van de drand-link hebt gekopieerd.

### De cron doet niets

Controleer of de winactie de optie **Automatische piloot** heeft en of de winkel niet in onderhoudsmodus staat, die ook de cron-URL blokkeert. Bij multistore roep je de cron-URL van elke winkel aan.
