Accueil

Référence développeur · PrestaShop

Websource Panier abandonné pour PrestaShop — référence développeur

Commande de console, URL de cron, contrôleurs publics, hooks, tables, réglages et gabarits du module Websource Panier abandonné.

Version 1.0.0 · PrestaShop 1.7.7 à 9.2, PHP 7.1+ · Mis à jour le 09/10/2026

Guide utilisateur

Cette extension existe aussi pour : WordPress

Hooks utilisés

HookRôle
actionCartSaveMet à jour la dernière activité d'un panier suivi.
actionValidateOrderMarque le panier commandé et attribue la commande à une relance.
actionFrontControllerSetMediaScript de capture de l'e-mail invité, case de consentement, message du panier restauré, déclenchement opportuniste.
registerGDPRConsent, actionDeleteGDPRCustomer, actionExportGDPRDataModule RGPD officiel : suppression et export des paniers suivis et du journal d'un client.
actionObjectShopAddAfterGreffe les hooks pour une nouvelle boutique.

Tâche planifiée

Console :

*/10 * * * * cd /chemin/vers/prestashop && php bin/console websource:cartrecovery:run >/dev/null 2>&1
OptionRôle
--limit=NPlafond d'e-mails de ce passage.
--dry-runSimulation : rien n'est envoyé ni enregistré.
--forceTraite aussi les boutiques où le module est désactivé.

Sortie : Paniers ajoutés au suivi : 0 | envoyées : 0 | capturées (mode capture) : 1 | échecs : 0 | ignorés : 0 | purge : 0.

URL (jeton par boutique, cron_token) :

GET /module/websourcecartrecovery/cron?token=<jeton>
GET /index.php?fc=module&module=websourcecartrecovery&controller=cron&token=<jeton>
{"ok": true, "sent": 0, "captured": 1, "failed": 0, "skipped": 0, "tracked": 0, "locked": false}

Compteurs uniquement, aucune donnée personnelle. Un verrou empêche deux passages simultanés. Autres réponses : {"ok": false, "error": "forbidden"} (jeton incorrect), {"ok": false, "error": "rate_limited"}, {"ok": true, "skipped": "too_soon"}.

Contrôleurs publics

ContrôleurRôle
recover?t=<jeton signé>Restaure le panier (produits, quantités, déclinaisons, codes promo, bon si voucher_auto_apply) puis redirige vers le panier ou la commande (redirect_to). Jeton expiré, falsifié ou épuisé : page neutre.
unsubscribe?t=<jeton signé>Désinscription en un clic ; lien « Me réabonner ».
capturePOST depuis le tunnel de commande : e-mail d'un invité, avec consentement selon consent_mode. Protégé par jeton CSRF et limitation de débit.
trackPixel d'ouverture (si open_pixel).
cronVoir ci-dessus.

Jetons : Token\TokenSigner, HMAC-SHA256 avec WSCR_SECRET, sans donnée personnelle, durée token_ttl_days, token_max_uses utilisations.

Réglages

Clé WSCR_SETTINGS (JSON, par boutique), assainie par Settings\Settings::sanitize() :

ChampDéfautRôle
enabled0Détection et envoi.
modecapturecapture ou live.
delays{1:60, 2:1440, 3:4320}Minutes depuis la dernière activité.
steps_enabled{1:1, 2:1, 3:1}Relances actives.
min_gap_minutes, max_age_days, min_cart_total30, 14, 0Séquence.
batch_size, max_per_hour, pause_ms20, 120, 150Débit.
capture_enabled, consent_mode, consent_text, customers_need_optin1, checkbox, {}, 0Capture et consentement (none ou checkbox).
templates{1:"classic", 2:"promo", 3:"lastchance"}Gabarits : classic, minimal, promo, lastchance, theme.
texts, legal_text{}iso → relance → clé → texte (subject, title, intro, cta, outro).
use_theme_colors, colors, logo_url, from_name1, {brand, accent, text, bg}, vide, videApparence des e-mails.
voucher_enabled, voucher_from_step, voucher_type, voucher_value, voucher_days, voucher_min_amount, voucher_auto_apply0, 2, percent, 10, 7, 0, 1Bon de réduction (percent ou amount).
token_ttl_days, token_max_uses, redirect_to14, 5, cartLien de récupération (cart ou order).
open_pixel, restore_notice, opportunistic0, 1, 0Options.
retention_days, attribution_days90, 7Conservation et attribution.
test_allowlist, cron_tokenvideAdresses de test, jeton de cron.

Autre clé : WSCR_SECRET (secret des jetons).

Tables

TableColonnes
{prefix}websourcecartrecovery_cartid_tracked, id_cart, id_shop, id_lang, id_currency, id_customer, email, firstname, source, consent, consent_at, last_activity, status, id_cart_rule, coupon_code, recovered_order, recovered_amount, recovered_at, date_add, date_upd
{prefix}websourcecartrecovery_logid_log, id_tracked, id_cart, id_shop, id_lang, id_currency, step, email, subject, status, cart_total, snapshot, click_count, restored_cart, id_order, error, file, sent_at, opened_at, clicked_at, converted_at, date_add
{prefix}websourcecartrecovery_optoutid_optout, email_hash, id_shop, source, date_add

Boîte de capture : fichiers var/logs/websourcecartrecovery/<AAAAMMJJ-HHMMSS-xxxxxxxx>.html.

Bons de réduction

Service\VoucherService : règle de panier au code WSCR-…, unique par panier, usage unique, liée au client s'il a un compte, en pourcentage ou en montant dans la devise du panier. Supprimés à la désinstallation.

E-mails

Mail\MailRenderer::render($template, $context, $texts, $palette) produit le HTML (tables, styles intégrés, mode sombre par prefers-color-scheme) et la version texte. Variables de texte : {firstname}, {cart_total}, {cart_url}, {products}, {shop_name}, {coupon_code}, {unsubscribe_url}. Couleurs : Mail\Palette (lues dans websourcethemeconfig par Theme\ThemeColors s'il est installé). Fichiers au format PrestaShop : mails/{fr,en}/cartrecovery_<gabarit>.{html,txt}.

Les adresses de test (@example.invalid, .test…) ne sont jamais envoyées, même en mode live.

Écran d'administration

index.php?controller=AdminModules&configure=websourcecartrecovery&wscr_tab=<onglet> avec dashboard, carts, reminders, settings, templates, cron.

ParamètreRôle
POST wscr_do = save, preview, test_send + wscr_csrfEnregistrement, aperçu sans enregistrer (pv_step, pv_lang, pv_dark), envoi de test (test_email, test_real).
GET wscr_act = send_now, cancel, reactivate + id + csrfActions sur un panier.
GET wscr_act = run_now, regen_token, demo_create, demo_purge, capture_clear + csrfActions de l'onglet cron.
GET wscr_export, wscr_days, wscr_view, p, f_<filtre>Export CSV, période, message capturé, page, filtres.

Classes principales

Websource\CartRecovery\… : Service\Runner (run(), sendNow()), Schedule\Scheduler, Schedule\Eligibility, Service\MessageBuilder, Service\CartRestorer, Service\RestorePlanner, Service\Conversions, Db\Store, Mail\Mailer, Util\Throttle, Util\Retention, Console\RunCommand.

Tests

php tests/run.php (autonome), php tests/integration.php all (instance PrestaShop, adresses @example.invalid uniquement), php tests/build_mail_files.php.