Sincronização multiloja: guia de instalação e configuração
Instalar, ligar duas lojas PrestaShop e configurar a sincronização do catálogo em modo push ou pull, com cron e gestão de conflitos.
Este guia cobre a instalação do módulo Sincronização Multiloja, a ligação entre duas instalações PrestaShop e a configuração completa da sincronização do catálogo.
Pré-requisitos
- Duas instalações PrestaShop 8.0 a 9.x (as bases de dados e os alojamentos podem ser distintos).
- A extensão PHP cURL ativa na loja que comanda a sincronização.
- O webservice ativo na loja remota, com uma chave de acesso dedicada.
O módulo instala-se apenas na loja que comanda a sincronização. A loja remota só precisa de ter o webservice ativo, sem qualquer módulo a instalar.
Instalação do módulo
- No back-office da loja que comanda, abra Módulos > Gestor de módulos.
- Clique em Carregar um módulo e envie o ficheiro
dfmultisync.zip. - Depois de instalado, o módulo acrescenta o menu Parâmetros avançados > DF Multi-Store Sync.
Ativar o webservice na loja remota
Na loja que deve ser ligada:
- Abra Parâmetros avançados > Webservice.
- Coloque Ativar o webservice do PrestaShop em Sim e grave.
- Clique em Adicionar uma nova chave de webservice, gere uma chave e conceda depois as permissões
GET,POST,PUTeDELETEnos seguintes recursos:categories,products,images,combinations,stock_availables,specific_priceselanguages. - Grave e copie a chave gerada.
Sem as permissões DELETE em specific_prices, a sincronização dos preços específicos falha: o módulo substitui o conjunto remoto por eliminação e recriação.
Acrescentar um site remoto
- Vá a DF Multi-Store Sync > Sites remotos e depois a Adicionar um site remoto.
- Preencha um nome, o URL de raiz da loja remota (por exemplo,
https://loja-b.exemplo.com) e a chave de webservice copiada antes. - Grave e clique depois em Testar na lista, para verificar a ligação.
O botão Testar consulta realmente o webservice remoto. Se falhar, verifique o URL (com o protocolo https://), a chave, e se o webservice está mesmo ativo do lado remoto.
Criar um perfil de sincronização
Um perfil descreve o quê sincronizar, em que sentido e como arbitrar os conflitos.
Direção: push ou pull
- Push: a loja atual é a origem e envia os seus dados para o site remoto.
- Pull: o site remoto é a origem, e a loja atual recebe os dados dele.
Entidades
Selecione as entidades a sincronizar. São sempre tratadas por esta ordem, para respeitar as dependências: categorias → produtos → stock → preços específicos.
Opções
- Sincronizar as imagens: em push, as novas imagens locais são enviadas; em pull, as imagens são descarregadas na criação do produto.
- Sincronizar os preços específicos: disponível apenas em push.
- Dimensão do lote: número de entidades tratadas por ciclo (1 a 25). Reduza-a se o servidor remoto for lento.
O módulo sincroniza o catálogo, não a configuração fiscal. Se as duas lojas servem países diferentes (por exemplo, Portugal e França), os grupos de impostos, as zonas e as transportadoras têm de ser configurados em cada uma: um produto sincronizado herda o grupo de impostos correspondente do lado de destino, e um preço enviado é sempre o preço sem IVA. Verifique num produto de teste que o preço com IVA apresentado ao cliente é o esperado antes de sincronizar todo o catálogo.
As categorias e os produtos são sincronizados nos idiomas presentes nas duas lojas. Se a loja remota não tiver o português instalado, os campos correspondentes ficam vazios do lado dela: instale e ative primeiro os mesmos idiomas nas duas instalações.
Estratégias de conflito
Surge um conflito quando as duas lojas alteraram a mesma ficha desde a última sincronização. Estão disponíveis quatro estratégias:
- A origem ganha: a origem sobrepõe-se sistematicamente ao destino.
- O destino ganha: as entidades em conflito são ignoradas.
- A mais recente ganha: comparação das datas de alteração.
- Manual: os conflitos entram numa fila para arbitragem.
A estratégia «a mais recente ganha» compara datas de alteração. Se as duas lojas estiverem em servidores com fusos horários diferentes, confirme que ambas estão em Europe/Lisbon, ou pelo menos que os relógios estão sincronizados: um desvio de uma hora pode fazer ganhar a versão errada.
Lançar uma primeira sincronização
- Abra o Painel do módulo.
- Na linha do perfil, clique em Executar agora.
- A sincronização é feita por lotes: a barra de progresso mostra em direto o número de entidades criadas, atualizadas, ignoradas, em conflito e com erro.
A sincronização trabalha dentro de um orçamento de tempo (25 segundos por predefinição) e retoma automaticamente onde parou. Num catálogo grande, encadeiam-se vários ciclos sem qualquer intervenção.
Automatizar com o cron
- Ative a opção Cron nos perfis em causa.
- Copie o URL de cron apresentado no painel (protegido por um token).
- Acrescente-o ao crontab do seu servidor, por exemplo a cada quinze minutos:
*/15 * * * * wget -q -O /dev/null "https://a-sua-loja.pt/module/dfmultisync/cron?token=O_SEU_TOKEN"
O token do URL de cron é confidencial: autoriza o acionamento das sincronizações. Não o partilhe nem o exponha publicamente.
Resolver os conflitos
Com a estratégia Manual, os conflitos acumulam-se no separador Conflitos. Em cada linha pendente:
- Manter a local: força o envio (push) da versão local.
- Manter a remota: força a receção (pull) da versão remota.
- Ignorar: marca o conflito como tratado, sem transferir nada.
Registos e acompanhamento
O separador Registos conserva o histórico das operações (informação, aviso, erro), filtrável por nível e por data. Os registos são eliminados automaticamente ao fim de 30 dias.
Resolução de problemas
O teste de ligação falha
Confirme que o webservice está ativo do lado remoto, que a chave está correta e que o seu perfil de permissões cobre mesmo os recursos listados atrás. Certifique-se de que o URL inclui https://.
Alguns produtos são ignorados
O módulo emparelha os produtos e as combinações pela referência. Um produto sem referência, ou cuja referência difira entre as duas lojas, não pode ser emparelhado para o stock. Preencha referências coerentes.
Os preços específicos não são sincronizados
A sincronização dos preços específicos é apenas em push e exige a permissão DELETE em specific_prices do lado remoto.
A sincronização parece lenta
Reduza a dimensão do lote do perfil e deixe o cron encadear os ciclos. A primeira passagem é sempre a mais demorada; as seguintes só transferem as entidades efetivamente alteradas.