PS PrestaShop Intermédio

Order Dispatch: exportação das encomendas para um operador logístico / 3PL

Exportar automaticamente as suas encomendas para o seu operador logístico e reimportar os números de seguimento.

Atualizado Versão do módulo 1.0.0

Pré-requisitos e compatibilidade

O módulo Order Dispatch funciona em PrestaShop 8.0 a 9.x, com PHP 7.2 no mínimo (testado até PHP 8.3), em loja única ou em multiloja.

  • A extensão PHP ftp é necessária para os transportes FTP e para a recolha dos ficheiros de seguimento por FTP.
  • A extensão PHP ssh2 só é necessária se utilizar o modo SFTP. Sem ela, use o FTP simples ou a API HTTP.
  • A extensão curl é necessária para o transporte por API HTTP e para a recolha a partir de um URL de seguimento.
  • Recomenda-se acesso ao crontab do seu servidor (ou um serviço de cron externo) para automatizar as exportações.

Instalação

  1. No back-office, abra Módulos > Gestor de módulos.
  2. Clique em Carregar um módulo e coloque o arquivo dforderdispatch-1.0.0.zip.
  3. Terminada a instalação, clique em Configurar.

Na instalação, o módulo cria a sua tabela de registo, regista o hook actionOrderStatusPostUpdate e gera um token de segurança único para os URL de cron.

A desinstalação elimina a tabela de registo e todas as chaves de configuração do módulo. As encomendas e os números de seguimento já gravados não são afetados.

Escolher o formato de exportação

A escolha do formato depende daquilo que o seu operador logístico ou o seu WMS sabe ler. Estão disponíveis três formatos no campo Formato de exportação.

CSV

Uma linha por linha de encomenda, com o cabeçalho da encomenda repetido em cada linha. É o formato mais comum entre os operadores de preparação. O delimitador escolhe-se entre ponto e vírgula e vírgula.

Colunas geradas, por ordem:

order_id ; reference ; date ; payment ; currency ; total_paid ;
shipping_cost ; carrier ; email ; firstname ; lastname ; company ;
phone ; address1 ; address2 ; postcode ; city ; country_iso ;
delivery_note ; sku ; ean13 ; product_name ; quantity ;
unit_price ; line_weight

Em Portugal, o Excel e o LibreOffice configurados em português exportam e leem CSV com ponto e vírgula. Se o seu operador logístico pedir um ficheiro que abra diretamente numa folha de cálculo, mantenha o ponto e vírgula como delimitador.

Ficheiro plano EDI

Formato com registos separados por barras verticais e fins de linha CRLF. Cada encomenda produz um registo de cabeçalho H seguido de um registo L por linha de encomenda.

H|referencia|data|transportadora|apelido|nome|morada1|morada2|codigo_postal|localidade|pais|telefone|email|peso
L|referencia|sku|ean13|quantidade|designacao

Exemplo concreto:

H|XKBKNABJK|2026-07-05 10:00:00|CTT Expresso|Silva|João|Rua Augusta 100||1100-053|Lisboa|PT|+351912000000|joao@exemplo.pt|1.2
L|XKBKNABJK|SKU-114|1234567890123|2|Sapatilhas de pele premium

Qualquer barra vertical presente num dado (designação de produto, morada) é automaticamente substituída por um espaço, para não partir a estrutura do ficheiro. As quebras de linha nos campos são igualmente neutralizadas.

API JSON

Carga estruturada, adequada aos operadores logísticos que expõem uma API moderna. O lote completo é enviado num único objeto com a data de geração e um conjunto de encomendas, cada uma com o seu cabeçalho, o seu cliente, a sua morada de entrega e as suas linhas.

Escolher o transporte

O campo Transporte determina como o ficheiro gerado chega ao seu prestador.

Descarregamento

Sem envio automático. O botão Exportar agora gera o ficheiro e descarrega-o diretamente no seu navegador. Útil para testar um formato ou para um prestador que recolhe os ficheiros manualmente.

FTP

Preencha o servidor, a porta (21 por predefinição), o utilizador, a palavra-passe e o diretório remoto das encomendas. O modo passivo está ativo por predefinição e serve à maioria dos alojamentos.

O campo da palavra-passe fica vazio na apresentação, por razões de segurança. Deixe-o vazio ao gravar para conservar a palavra-passe já existente.

SFTP

Ative a opção Utilizar SFTP e indique a porta SSH (22, em regra) no campo da porta. As credenciais de FTP servem também para o SFTP. Esta opção exige a extensão PHP ssh2 no servidor.

API HTTP

O lote completo é enviado por POST para o URL do seu prestador, com o corpo do pedido a conter diretamente o ficheiro gerado. O envio é acompanhado de dois cabeçalhos:

  • X-DFOD-KEY: a chave de API que introduziu na configuração.
  • X-DFOD-FILENAME: o nome de ficheiro calculado segundo o seu padrão.

O tipo de conteúdo é adaptado ao formato escolhido (JSON, CSV ou texto simples). Qualquer resposta HTTP fora do intervalo 2xx é considerada uma falha e registada como tal.

Seleção das encomendas e planeamento

Estados de encomenda de origem

Em Estados de encomenda a exportar, selecione um ou mais estados (tipicamente Pagamento aceite e Em preparação). Só são retidas as encomendas que se encontrem num destes estados e que nunca tenham sido exportadas com sucesso.

Mudança de estado após a exportação

O campo Estado após a exportação permite passar automaticamente as encomendas exportadas para um estado de acompanhamento dedicado. Deixe em «Sem alteração» se preferir conservar o estado de origem.

Limite por lote

O campo Número máximo de encomendas por lote limita a dimensão de uma exportação. Em lojas de grande volume, um valor entre 100 e 300 evita ficheiros demasiado pesados e tempos de execução excessivos.

Cron de exportação

O URL de cron, protegido por um token único, é apresentado no topo da página de configuração. Acrescente-o ao seu crontab:

*/15 * * * * curl -s "https://a-sua-loja.pt/module/dforderdispatch/cron?token=O_SEU_TOKEN" > /dev/null

O cron devolve um objeto JSON com o lote gerado, o número de encomendas exportadas, o nome do ficheiro e a mensagem de transporte, o que permite vigiá-lo a partir de uma ferramenta de supervisão.

Modo auto-push

Ative Envio automático na mudança de estado para transmitir cada encomenda individualmente assim que entra num estado exportável, sem esperar pela próxima passagem do cron. Este modo apoia-se nos transportes FTP, SFTP ou API. Não tem efeito com o transporte por Descarregamento.

Os dois modos podem coexistir: o auto-push trata as encomendas à medida que surgem e o cron recupera as que tenham falhado, com a desduplicação a impedir qualquer envio em duplicado.

Nome dos ficheiros gerados

O campo Padrão do nome de ficheiro aceita duas variáveis:

  • {date}: data e hora no formato AAAAMMDD-HHMMSS.
  • {batch}: identificador único do lote, também presente no registo.

A extensão é acrescentada automaticamente conforme o formato: .csv, .txt para o EDI e .json. Os caracteres não alfanuméricos são retirados do nome final.

Reimportação dos números de seguimento

Estão disponíveis três canais, utilizáveis em simultâneo. Em todos os casos, o número recebido é escrito na transportadora da encomenda e no campo de seguimento da encomenda, sendo depois aplicado o estado configurado em Estado após a importação do seguimento (em regra, Enviado).

Canal 1: carregamento manual de CSV

No painel Importação dos seguimentos da página de configuração, selecione um ficheiro CSV e inicie a importação. O mapeamento configura-se nas definições:

  • Delimitador: ponto e vírgula ou vírgula.
  • Índice da coluna da referência: 0 corresponde à primeira coluna.
  • Índice da coluna do seguimento: idem.
  • Linha de cabeçalho: a ativar se a primeira linha contiver os nomes das colunas.

Exemplo de ficheiro esperado com o mapeamento predefinido:

reference;tracking
XKBKNABJK;DW123456789PT
1024;DW987654321PT

A coluna da referência aceita indistintamente a referência de encomenda do PrestaShop ou o identificador numérico da encomenda.

Canal 2: recolha automática (cron pull)

Podem ser indicadas duas origens, tratadas uma a seguir à outra em cada execução:

  • Diretório FTP dos seguimentos: o módulo lista os ficheiros .csv e .txt da pasta, importa-os e pode eliminá-los em seguida, se a opção correspondente estiver ativa. As credenciais de FTP são as da secção de transporte.
  • URL de recolha: um endereço HTTP ou HTTPS que devolva diretamente um CSV de seguimentos.

Acrescente o URL de pull ao seu crontab, por exemplo de hora a hora:

0 * * * * curl -s "https://a-sua-loja.pt/module/dforderdispatch/tracking?token=O_SEU_TOKEN&mode=pull" > /dev/null

Canal 3: webhook enviado pelo operador logístico

Comunique ao seu prestador o URL de push apresentado na configuração. Basta-lhe enviar um pedido POST com um corpo JSON:

POST /module/dforderdispatch/tracking?token=O_SEU_TOKEN&mode=push
Content-Type: application/json

[
  {"reference": "XKBKNABJK", "tracking": "DW123456789PT"},
  {"reference": "1024", "tracking": "DW987654321PT"}
]

Também é aceite um objeto envolvente da forma {"items": [ ... ]}. A resposta é um relatório JSON com o número de encomendas atualizadas, ignoradas e com erro, e o detalhe linha a linha.

Registo e supervisão

O fundo da página de configuração mostra as cinquenta últimas operações, tanto exportações como importações, cada uma com a data, a encomenda em causa, o identificador do lote, o sentido, o formato, o transporte, o estado e a mensagem devolvida.

A desduplicação apoia-se neste registo: uma encomenda com uma entrada de exportação no estado «sent» nunca mais será incluída num lote seguinte. Para forçar uma reexportação, elimine a linha correspondente na tabela de registo do módulo.

Resolução de problemas

A exportação não devolve qualquer encomenda

Confirme que estão mesmo selecionados estados nas definições e que existem encomendas nesses estados. Verifique depois que essas encomendas não foram já exportadas com sucesso num lote anterior.

O cron devolve um erro de token

O token apresentado na configuração tem de ser usado tal e qual no URL, sem espaços nem caracteres acrescentados. Copie-o diretamente da página de configuração.

A transferência FTP falha

Verifique o servidor, a porta e as credenciais, e confirme que o diretório remoto existe e permite escrita. Se o seu alojamento bloquear as ligações de saída, poderá ser necessário o modo passivo ou a abertura do fluxo.

O SFTP está indisponível

A mensagem que indica que a extensão ssh2 não está disponível significa que não está instalada no servidor. Peça a sua ativação ao seu alojamento, ou passe para o FTP simples ou para a API HTTP.

Um número de seguimento é recusado

Os números de seguimento são validados segundo as regras do PrestaShop. Um número com caracteres não autorizados é rejeitado e registado como erro, sem bloquear o resto da importação.

Perguntas frequentes

Posso exportar para vários prestadores?

O módulo gere um fluxo de saída configurado de cada vez. Para alimentar dois prestadores distintos, a prática mais simples é distinguir as encomendas por estados diferentes e tratar cada fluxo em separado.

As encomendas em multiloja são suportadas?

Sim, o módulo funciona em contexto multiloja. As definições de configuração seguem o contexto PrestaShop em que foram gravadas.

O que acontece se o prestador estiver inacessível?

A falha é registada com a respetiva mensagem de erro e as encomendas em causa não são marcadas como enviadas. Serão, por isso, automaticamente retomadas na próxima passagem do cron, sem qualquer intervenção da sua parte.

A mudança de estado despoleta os e-mails para o cliente?

Sim. O módulo usa o mecanismo padrão de mudança de estado do PrestaShop. As notificações associadas ao estado de destino, nomeadamente o e-mail de expedição com o número de seguimento, são portanto enviadas normalmente.

Esta página foi útil?

Ainda com dúvidas? Contacte o suporte