# dfsavecart: guardar o carrinho por ligação mágica

> Apresentação O dfsavecart acrescenta uma funcionalidade « Guardar para mais tarde » à página do carrinho da sua loja PrestaShop 8 ou 9. O visitante, autenticado ou convidado, introduz o…

- Página: <https://www.datafirefly.com/pt/documentation/dfsavecart/>
- Idioma: pt
- Atualizado em: 2026-09-02
- Outros idiomas: [fr](https://www.datafirefly.com/documentation/dfsavecart/index.md), [en](https://www.datafirefly.com/en/documentation/dfsavecart/index.md), [es](https://www.datafirefly.com/es/documentation/dfsavecart/index.md), [de](https://www.datafirefly.com/de/documentation/dfsavecart/index.md), [it](https://www.datafirefly.com/it/documentation/dfsavecart/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfsavecart/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfsavecart/index.md)
- Índice: <https://www.datafirefly.com/pt/documentation/llms.txt>

## Apresentação

O dfsavecart acrescenta uma funcionalidade « Guardar para mais tarde » à página do carrinho da sua loja PrestaShop 8 ou 9. O visitante, autenticado ou convidado, introduz o seu endereço de e-mail e recebe uma ligação segura (« ligação mágica ») que restaura o seu carrinho exato, mesmos produtos, mesmas quantidades, em qualquer dispositivo, a qualquer momento durante o período de validade configurado.

O módulo não é intrusivo: não afeta o funil de encomenda, nem o checkout, nem os outros módulos. Funciona com o sistema de e-mail nativo do PrestaShop (e portanto com o seu SMTP existente).

Os modelos de e-mail são fornecidos em francês, inglês, espanhol e alemão. Numa loja em português, crie a pasta `modules/dfsavecart/mails/pt/` (ou, de preferência, a pasta mails do seu tema) com `savecart.html` e `savecart.txt` traduzidos, caso contrário o cliente recebe o e-mail em inglês. As cadeias do bloco do carrinho traduzem-se em Internacional → Traduções.

## Pré-requisitos

- PrestaShop 8.0.x a 9.x
- PHP 8.1 ou superior
- MySQL 5.7+ ou MariaDB 10.3+
- Um envio de e-mail funcional (Parâmetros avançados > E-mail: teste o envio antes de instalar o módulo)

## Instalação

1. Descarregue o ficheiro `dfsavecart.zip` a partir da sua conta DataFirefly.
2. No back-office PrestaShop, vá a **Módulos > Gestor de módulos**.
3. Clique em **Carregar um módulo** e selecione o ZIP.
4. O PrestaShop instala o módulo automaticamente: a tabela `ps_df_savecart` é criada e os hooks são registados.
5. Clique em **Configurar** para aceder às definições.

Não é instalado nenhum override de classe nem de controlador: a desinstalação é limpa e sem resíduos (a tabela e as configurações são eliminadas).

## Configuração

Todas as definições estão numa única página: **Módulos > Gestor de módulos > dfsavecart > Configurar**.

### Definições principais

- **Ativar o módulo**: interruptor geral. Desativado, o bloco desaparece do front-office sem desinstalar.
- **Posição do botão**: _Rodapé do carrinho_ (recomendado, hook `displayShoppingCartFooter`), _No carrinho_ (hook `displayShoppingCart`) ou _Ambos_. A escolha depende do seu tema: teste a renderização na página do carrinho depois da alteração.
- **Duração de validade da ligação**: de 1 a 365 dias, 30 por defeito. Depois disso, a ligação expira e a entrada é purgada.

### Segurança e antispam

- **Limite por e-mail / dia**: número máximo de envios para um mesmo endereço em 24 h deslizantes (10 por defeito). Coloque 0 para desativar. O contador assenta num hash com salt do e-mail: o endereço não é guardado em claro para esta função.
- **Ligação de utilização única**: se ativado, a ligação torna-se inválida depois do primeiro restauro. Útil para carrinhos de caráter confidencial (B2B, orçamentos).

### Comportamento do restauro

- **Esvaziar o carrinho atual antes do restauro**: ativado por defeito. Se desativado, os produtos da ligação são acrescentados ao carrinho em curso (acumulação).

### RGPD e e-mail

- **Pedir um consentimento RGPD**: mostra uma caixa de seleção obrigatória antes do envio (ativado por defeito, recomendado).
- **Enviar em cópia oculta ao comerciante**: acrescenta o e-mail de contacto da loja em BCC em cada envio, para acompanhamento interno.
- **Assunto do e-mail (por idioma)**: personalizável para cada idioma ativo da loja. Variáveis disponíveis: `{shop_name}` e `{firstname}`.

## Funcionamento do lado do cliente

1. O cliente adiciona produtos ao seu carrinho e abre a página do carrinho.
2. Vê o bloco « Guardar este carrinho para mais tarde » com um campo de e-mail (pré-preenchido se estiver autenticado).
3. Introduz o seu e-mail, marca o consentimento se pedido e clica em **Enviar a ligação**.
4. Recebe um e-mail com um resumo do carrinho (produtos, quantidades, total estimado), a data de expiração e um botão **Restaurar o meu carrinho**.
5. Um clique no botão restaura o carrinho exato e redireciona para a página do carrinho, com uma mensagem de confirmação.

### Casos particulares no restauro

- **Produto desativado ou eliminado**: a linha é ignorada e o cliente é informado por uma mensagem que lista os produtos indisponíveis.
- **Stock insuficiente**: a quantidade é ajustada ao máximo disponível, com uma mensagem a assinalar o ajuste.
- **Ligação expirada ou já usada** (modo de utilização única): aparece uma página de erro sóbria, com ligações para o carrinho atual e para a página inicial.
- **Idioma e moeda**: são restaurados os do carrinho de origem.

## E-mails

Os modelos HTML e de texto são fornecidos em **francês, inglês, espanhol e alemão** em `modules/dfsavecart/mails/{iso}/savecart.html` e `savecart.txt`. O idioma usado é o do carrinho no momento da gravação.

Variáveis disponíveis nos modelos: `{firstname}`, `{shop_name}`, `{restore_link}`, `{cart_items_html}`, `{cart_items_txt}`, `{cart_total}`, `{expiry_date}`.

Para personalizar os modelos de forma duradoura, duplique-os na pasta mails do seu tema em vez de modificar os do módulo: seriam apagados na atualização.

## Segurança

- **Token de 256 bits**: gerado por `random_bytes(32)`, o gerador criptograficamente seguro do PHP. 64 caracteres hexadecimais no URL.
- **Armazenamento em hash**: só a impressão SHA-256 do token é guardada na base de dados. Em caso de comprometimento da base de dados, nenhuma ligação pode ser reconstruída.
- **CSRF**: o endpoint AJAX de gravação verifica o token de sessão do PrestaShop.
- **Validação estrita**: o formato do token é verificado do lado do servidor (`[a-f0-9]{64}`) antes de qualquer pedido à base de dados.

## RGPD

- Consentimento explícito configurável antes do envio do e-mail.
- Para a limitação antispam, o e-mail não é conservado em claro: só é usado um hash com salt (com a chave secreta da loja).
- Os registos expirados são eliminados automaticamente (purga): ver secção seguinte.
- Nenhum dado é transmitido a um serviço de terceiros: tudo fica na sua base de dados PrestaShop.
- Em caso de pedido de apagamento de um cliente, elimine as suas linhas na tabela `ps_df_savecart` (coluna `email`).

## Purga das ligações expiradas

Três opções, da mais simples à mais automatizada:

1. **Botão manual**: na página de configuração do módulo, « Purgar as entradas expiradas ».
2. **Módulo CronJobs**: instale o módulo gratuito CronJobs do PrestaShop: o hook `actionCronJob` do módulo é chamado automaticamente e desencadeia a purga.
3. **Crontab do sistema**: agende uma chamada regular ao cron da sua loja segundo a configuração do seu servidor.

## Estatísticas

A página de configuração mostra quatro contadores em tempo real: **total registados**, **ativos** (não expirados), **expirados** (à espera de purga) e **restaurados** (ligações usadas pelo menos uma vez). O rácio restaurados / total dá-lhe a taxa de conversão da funcionalidade.

## Multiloja

O módulo é compatível com multiloja: cada gravação memoriza o identificador da loja de origem, usado no restauro. A configuração é feita por contexto de loja padrão do PrestaShop.

## Resolução de problemas

### O e-mail não chega

- Verifique o envio de e-mail global da loja: **Parâmetros avançados > E-mail > Testar o envio**.
- Verifique a pasta de spam do destinatário.
- Consulte os registos: **Parâmetros avançados > Registos** (os erros do módulo têm o prefixo `[dfsavecart]`).

### O bloco não aparece na página do carrinho

- Verifique que o módulo está ativado na sua configuração.
- Verifique que o carrinho contém pelo menos um produto (o bloco é ocultado com o carrinho vazio).
- Verifique a posição escolhida: alguns temas não implementam o hook `displayShoppingCartFooter`; passe então a « No carrinho » ou « Ambos ».
- Limpe a cache: **Parâmetros avançados > Desempenho > Limpar a cache**.

### Mensagem « Token de segurança inválido »

- A página do carrinho ficou aberta demasiado tempo e a sessão expirou: atualize a página e tente de novo.

### Mensagem « Demasiados pedidos para este endereço »

- O limite antispam diário foi atingido para este e-mail. Aumente o limite na configuração ou espere 24 h.

## Desinstalação

A desinstalação elimina a tabela `ps_df_savecart` (todos os carrinhos guardados são perdidos) e o conjunto das chaves de configuração. Não fica nenhum resíduo na base de dados nem nos ficheiros.
