Atelier de campagne
Créez une roue, une carte à gratter ou une boîte mystère. Démo locale ou API du marchand, sans service de remise de lots.
- Composant: Roue de la chance / Carte à gratter / Boîtes mystère
- Thème: Minimalisme côtier / Bonbon pop / Arcade rétro / Or de minuit / Papier de fête / Croquis de jardin
Source du résultat
Le tirage local est modifiable et ne sécurise pas la remise des lots. Les offres du code sont publiques. Aucun contrôle de stock, identité ou participations répétées.
Votre serveur gère authentification, probabilités, stock, admissibilité et idempotence. Aucune clé secrète ici. L’aperçu n’appelle jamais votre API.
Guide d’intégration de l’API
Il s’agit d’un contrat d’interface, pas d’un service de tirage Elysia. Implémentez POST /api/draw sur votre serveur avec les mêmes identifiants de campagne et de lots, puis indiquez l’API. Hébergez les fichiers sur HTTPS pour tester les vrais tirages ; l’éditeur les simule uniquement.
Requête · POST application/json
Le widget transmet uniquement version, campaignId et un requestId hexadécimal aléatoire de 32 caractères. Aucun identifiant client, probabilité ou clé API. Le serveur doit identifier le participant ; requestId n’est pas un moyen d’authentification.
{
"version": 1,
"campaignId": "summer-boutique",
"requestId": "0123456789abcdef0123456789abcdef"
}
Succès · 200 application/json
Renvoyez requestId à l’identique. prizeId doit correspondre à un lot configuré, y compris sans gain. Facultatifs : receiptId (≤200 caractères), claim.code (≤300), claim.url (HTTPS, ≤2048). Omettez les champs inutilisés, sans null. Aucune enveloppe data/result ; maximum 16 KiB. Une erreur n’est pas un résultat perdant.
{
"requestId": "0123456789abcdef0123456789abcdef",
"prizeId": "p1",
"receiptId": "draw_2026_001",
"claim": {
"code": "SAMPLE-ONLY",
"url": "https://shop.example/redeem"
}
}
Identifiants des lots:
p1: 10 % de réduction
p2: Livraison offerte
p3: Cadeau mystère
p4: Une prochaine fois
Hébergez de préférence le widget et /api/draw sur la même origine (protocole, hôte, port), avec un proxy inverse si nécessaire. Les chemins sont relatifs au widget, pas à la boutique parente. credentials: same-origin transmet uniquement les cookies de même origine. Aucun en-tête Authorization ou personnalisé configurable. Une autre origine nécessite CORS pour le widget et OPTIONS pour POST + Content-Type ; aucun cookie interorigine n’est transmis. Un HTML statique ne suffit pas pour un tirage authentifié ; les cookies tiers des iframes peuvent être bloqués.
Le serveur authentifie, vérifie Origin/CSRF et l’admissibilité, limite participations et débit, utilise ses propres probabilités et réserve le stock avec le résultat dans une transaction. Persistez l’idempotence par participant + campaignId + requestId pour renvoyer le même résultat. Contrôlez retrait et expiration côté serveur. Les données du navigateur ne prouvent aucun droit ; ne publiez aucun secret.
Refusez les requêtes avec un statut non 2xx (ex. 401/403/409/429/503). Le widget affiche un message générique, pas l’erreur serveur. Délai de 15 secondes ; redirections, JSON invalide, requestId différent, lots inconnus et liens dangereux sont refusés. La reprise manuelle conserve l’ID uniquement sur cette page ; recharger le change, donc les limites doivent être persistantes. Ni reprise automatique ni lot local de secours.
L’aperçu reste actif si les adresses API ou d’hébergement sont incomplètes. Corrigez les champs indiqués pour exporter ; une erreur de lot ou de style conserve le dernier aperçu valide.
Exporter et intégrer
HTML / CSS / JavaScript / JSON. Hébergez les fichiers sur votre site HTTPS, puis collez l’URL. Cet outil ne publie ni n’héberge de campagnes.
Les images facultatives proviennent de leurs hôtes HTTPS. L’éditeur ne stocke ni images ni clés API.
Les secteurs égaux sont visuels ; les probabilités règlent la démo. En mode API, le serveur décide.