dfsavecart: guardar o carrinho por ligação mágica
Instalação, configuração e utilização do módulo de guardar o carrinho por ligação mágica para PrestaShop 8 e 9.
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
- Descarregue o ficheiro
dfsavecart.zipa partir da sua conta DataFirefly. - No back-office PrestaShop, vá a Módulos > Gestor de módulos.
- Clique em Carregar um módulo e selecione o ZIP.
- O PrestaShop instala o módulo automaticamente: a tabela
ps_df_savecarté criada e os hooks são registados. - 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 (hookdisplayShoppingCart) 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
- O cliente adiciona produtos ao seu carrinho e abre a página do carrinho.
- Vê o bloco « Guardar este carrinho para mais tarde » com um campo de e-mail (pré-preenchido se estiver autenticado).
- Introduz o seu e-mail, marca o consentimento se pedido e clica em Enviar a ligação.
- 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.
- 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(colunaemail).
Purga das ligações expiradas
Três opções, da mais simples à mais automatizada:
- Botão manual: na página de configuração do módulo, « Purgar as entradas expiradas ».
- Módulo CronJobs: instale o módulo gratuito CronJobs do PrestaShop: o hook
actionCronJobdo módulo é chamado automaticamente e desencadeia a purga. - 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.