Frais de Douane DDP / DAP : guide complet
Installer, configurer et exploiter le choix DDP / DAP au checkout pour les boutiques européennes expédiant hors UE : droits et TVA d'importation, taux par pays, règles par catégorie ou produit, frais des transporteurs, estimation sur la fiche produit, acceptation DAP, facture et bon de livraison. PrestaShop 1.7, 8 et 9.
Présentation et prérequis
Le module Frais de Douane DDP / DAP s’adresse aux boutiques établies dans l’Union européenne qui expédient hors UE. Dès que l’adresse de livraison sort du territoire douanier de l’UE, un bloc apparaît à l’étape transporteur du checkout : le client règle les droits de douane et la TVA d’importation avec sa commande (DDP) ou au transporteur à la livraison (DAP). Les taux peuvent varier par pays, par catégorie ou par produit, chaque transporteur peut ajouter ses frais d’avance des droits, et une estimation s’affiche dès la fiche produit.
- Un seul paquet pour PrestaShop 1.7.0 à 9.x.
- PHP 5.4 à 8.4, selon ce que demande votre version de PrestaShop.
- Thèmes Classic et Hummingbird, ainsi que leurs thèmes dérivés.
- Multiboutique et multidevise : les frais sont calculés dans la devise du panier.
- Traductions fournies : français, anglais, espagnol, allemand, italien, portugais, néerlandais, polonais.
- Aucun override du cœur : uniquement des hooks natifs.
Le module ne calcule pas les droits réellement exigés par les douanes : il applique votre barème (droits, TVA d’importation, frais, seuils) pour produire une estimation affichée au client. En DDP, c’est ce montant qui est facturé sur la boutique ; vous expédiez ensuite avec un service DDP de votre transporteur, qui vous refacture les droits acquittés.
Installation et mise à jour
- Téléchargez l’archive
dfcustomsduty.zipdepuis votre compte client. - Dans le back-office, ouvrez Modules > Gestionnaire de modules.
- Cliquez sur Installer un module et déposez l’archive.
- Cliquez sur Configurer.
À l’installation, le module enregistre ses hooks, crée ses tables et un produit virtuel masqué « Frais de douane et taxes d’importation (DDP) », hors taxe, illustré et commandable hors stock. Ce produit n’apparaît pas au catalogue et sa fiche redirige vers la page 404 : il sert uniquement de support de facturation en DDP.
Aucun taux n’est configuré après l’installation. Tant que les droits, la TVA d’importation et les frais fixes restent à 0, aucun frais n’est calculé et le bloc de choix ne s’affiche pas. Le bandeau d’état de la configuration vous le rappelle.
Mise à jour depuis la version 1.3.0
Déposez la nouvelle archive puis lancez la mise à jour. Le script porte le stock du produit de frais à un million d’unités : avec un stock à 0, chaque commande DDP passait automatiquement « En attente de réapprovisionnement » et un changement d’état signalait une rupture sur la ligne de frais. Le stock est ensuite remis à niveau à chaque commande DDP. Vos réglages, taux, règles et commandes sont conservés et les montants calculés ne changent pas.
Les commandes DDP passées avant la mise à jour gardent leur historique d’états : si certaines sont restées « En attente de réapprovisionnement », passez-les simplement à l’état voulu.
Mise à jour depuis la version 1.2
Déposez la nouvelle archive puis lancez la mise à jour. Le script crée la table des règles produits, ajoute le montant des frais du transporteur aux commandes et enregistre le hook de la fiche produit. Vos réglages, taux et commandes sont conservés et les montants calculés ne changent pas tant que vous n’ajoutez ni règle ni frais de transporteur.
Sur une boutique mise à jour, l’estimation sur la fiche produit reste désactivée : rien ne change en front tant que vous ne l’activez pas dans Réglages > Estimation sur la fiche produit. Sur une nouvelle installation, elle est active dès que des taux sont configurés.
Mise à jour depuis la version 1.1
Déposez la nouvelle archive par-dessus l’ancienne version puis lancez la mise à jour depuis le gestionnaire de modules. Le script de mise à jour ajoute les nouvelles colonnes, enregistre les nouveaux hooks et illustre le produit de frais. Vos taux et l’historique des commandes sont conservés :
- l’ancien taux par pays devient le taux de droits ;
- la TVA d’importation reste à 0 tant que vous ne la renseignez pas, ce qui conserve les montants calculés jusqu’ici ;
- un seuil pays à 0, qui signifiait « seuil global », devient un champ vide qui hérite du seuil par défaut.
La page de configuration
En tête de page, un bandeau affiche l’état du module et quatre chiffres sur les 30 derniers jours : commandes hors UE, part payée en DDP, droits encaissés en DDP, commandes DAP acceptées au paiement. Juste en dessous, le bandeau d’état liste ce qui empêche le module de fonctionner ou mérite votre attention : aucun taux configuré, produit de frais désactivé (bouton Réparer), pays imposant le DDP sans frais, transporteurs non compatibles DDP desservant ces pays, règles visant un produit ou une catégorie supprimés, base de géolocalisation absente. La configuration est ensuite répartie en cinq onglets : Réglages, Taux par pays, Règles produits, Simulateur, Aide.

Réglages
Fonctionnement au checkout
- Activer le module : interrupteur global.
- Mode présélectionné au checkout : DDP (recommandé, il réduit les colis refusés) ou DAP.
- Afficher le détail du calcul : le client peut déplier la ventilation droits, TVA d’importation et frais.
- Faire accepter le DAP au paiement : ajoute une case obligatoire à l’étape paiement quand le client a choisi le DAP (voir plus bas).
- Afficher une notice dans le panier : prévient le client dès le panier qu’une livraison hors UE entraîne des frais.
Calcul par défaut
Ces valeurs s’appliquent à toutes les destinations hors UE, sauf surcharge par pays.
- Droits de douane (%) : taux moyen de droits pour vos produits.
- TVA / taxe à l’importation (%) : appliquée sur la valeur en douane augmentée des droits.
- Frais fixes de dossier : montant fixe, en devise par défaut de la boutique, hors taxe.
- Seuil de franchise (de minimis) : en dessous de cette valeur de commande, aucun frais. 0 = pas de seuil.
- Inclure les frais de port dans la base de calcul : la valeur en douane (CIF) inclut généralement le transport.
Destinations et transporteurs
- Pays du territoire douanier UE (codes ISO) : par défaut les 27 États membres plus Monaco. Toute livraison vers un autre pays est traitée comme hors UE.
- Pays imposant le DDP (codes ISO) : destinations où le client ne peut pas choisir le DAP. Valeur par défaut :
US. Laissez vide pour désactiver. - Transporteurs compatibles DDP : cochez les transporteurs capables de livrer droits payés. Si rien n’est coché, tous les transporteurs sont considérés comme compatibles.
Estimation sur la fiche produit
- Afficher l’estimation sur la fiche produit : bloc placé sous le bouton d’ajout au panier (voir Sur la fiche produit).
- Utiliser la géolocalisation : quand le visiteur n’a ni adresse ni choix enregistré, le pays est déduit de son adresse IP : en-tête
CF-IPCountrysi la boutique passe par Cloudflare, sinon base GeoLite2 de PrestaShop. - Proposer un sélecteur de pays : le visiteur choisit son pays de livraison. Sans sélecteur, le bloc n’apparaît que si le pays est connu et hors UE.
Frais des transporteurs (avance des droits)
Sous les réglages, un tableau liste vos transporteurs avec trois champs : montant fixe, pourcentage des droits et taxes, minimum. Voir Frais des transporteurs.
Formule de calcul
Les frais sont calculés dans la devise du panier, hors taxe :
valeur en douane = produits HT (hors ligne de frais)
+ transport HT (si l'option est active)
pour chaque ligne du panier (taux de la ligne, voir Règles produits) :
droits = valeur de la ligne × taux de droits
TVA d'importation = (valeur de la ligne + droits) × taux de TVA
frais transporteur = max(minimum, fixe + % × (droits + TVA))
total = droits + TVA d'importation + frais fixes + frais transporteur
Le seuil de franchise est évalué en premier, sur la valeur en douane totale : si elle est inférieure au seuil applicable, aucun frais n’est facturé. Le transport est réparti sur les lignes au prorata de leur valeur. Les frais du transporteur ne s’appliquent que si des droits ou taxes sont dus. Frais fixes, frais du transporteur et seuils, saisis dans la devise par défaut, sont convertis dans la devise du panier.
Exemple pour le Royaume-Uni avec 5 % de droits et 20 % de TVA d’importation : pour 150 € de produits et 20 € de transport, la valeur en douane est de 170 €, les droits de 8,50 €, la TVA d’importation de 35,70 € (20 % de 178,50 €), soit 44,20 € au total.
Les droits réels dépendent du code SH et de l’origine de vos produits. Utilisez un taux moyen représentatif de votre catalogue, et affinez par pays pour vos principales destinations.
Taux par pays
L’onglet Taux par pays surcharge le calcul destination par destination. Le formulaire propose : pays de destination, droits (%), TVA d’importation (%), frais fixes, seuil de franchise et l’option Imposer le DDP pour ce pays.
Un champ laissé vide reprend la valeur du calcul par défaut. Pour le seuil, saisissez 0 si ce pays ne doit avoir aucun seuil.
Le tableau des taux affiche, pour chaque pays, les valeurs propres ou la mention « défaut », l’état du DDP imposé (option du pays ou liste globale), le montant des frais pour 100 unités de votre devise, et les boutons Modifier et Supprimer.

Préréglages de TVA d’importation
Sous le tableau, les préréglages appliquent en un clic la TVA ou GST d’importation standard de 21 pays : Royaume-Uni, Suisse, Liechtenstein, Norvège, Islande, Andorre, Serbie, Turquie, Israël, Émirats arabes unis, Arabie saoudite, États-Unis, Canada, Mexique, Australie, Nouvelle-Zélande, Japon, Corée du Sud, Singapour, Chine, Afrique du Sud. Seule la TVA d’importation est modifiée : vos droits, frais, seuils et DDP imposés restent inchangés. Les pays sans TVA renseignée sont cochés par défaut.
Ces taux sont indicatifs : certains produits relèvent de taux réduits, et le Canada ajoute une taxe provinciale (TVH) selon la province. Vérifiez-les pour votre catalogue.
Règles par catégorie et par produit
L’onglet Règles produits donne un taux de droits et / ou de TVA d’importation propre à une catégorie ou à un produit. Exemple typique : vos articles exonérés de droits vers les États-Unis, ou une catégorie dont le code SH porte un taux différent de votre moyenne.
- Choisissez Une catégorie (la règle couvre aussi ses sous-catégories) ou Un produit (recherche par nom, référence ou ID).
- Choisissez la Destination : un pays, ou Toutes destinations hors UE.
- Saisissez le taux de droits et / ou de TVA. 0 exonère ; un champ vide garde le taux du niveau suivant. Le bouton Exonérer de droits (0 %) remplit le champ des droits.
- Cliquez sur Enregistrer la règle.
Pour chaque ligne du panier, chaque taux est cherché dans cet ordre, et le premier défini l’emporte :
- règle produit pour le pays de livraison ;
- règle produit, toutes destinations hors UE ;
- règle catégorie pour le pays de livraison (la catégorie la plus précise d’abord) ;
- règle catégorie, toutes destinations hors UE ;
- taux du pays, puis taux par défaut.

Exemple : une règle « Droits 0 % » sur la catégorie Affiches pour les États-Unis, et une règle « Droits 12 %, TVA 10 % » sur Vêtements pour toutes destinations. Un panier vers les États-Unis avec un t-shirt et une affiche paie 12 % de droits et 10 % de TVA sur le t-shirt, rien sur l’affiche. Le détail du calcul affiche alors « taux selon les produits ».
Une règle s’applique avant le taux du pays. Une règle catégorie « toutes destinations » remplace donc aussi le taux d’un pays configuré dans Taux par pays. Le seuil de franchise et les frais fixes restent ceux du pays.
Transporteurs compatibles DDP
Tous les transporteurs ne proposent pas de service DDP. Une fois vos transporteurs compatibles déclarés :
- avec un transporteur non compatible, le bloc propose uniquement le DAP et indique quels transporteurs permettent de payer les droits à la commande ;
- vers un pays qui impose le DDP, les transporteurs non compatibles sont désactivés au checkout et le client est basculé sur un transporteur compatible ;
- si aucun transporteur compatible ne dessert la destination, le bouton Continuer est bloqué avec un message, et le bandeau d’état vous le signale.

Le blocage se fait au checkout, dans le navigateur. Pour masquer complètement un transporteur non compatible vers une destination, retirez la zone correspondante dans Livraison > Transporteurs. Le bandeau d’état liste les transporteurs concernés.
Frais des transporteurs
DHL, FedEx, UPS et la plupart des transporteurs express facturent l’avance des droits et taxes : un montant fixe, un pourcentage des sommes avancées, ou les deux avec un minimum. Renseignez ces valeurs par transporteur dans Réglages > Frais des transporteurs (avance des droits).
- Les frais s’ajoutent au calcul pour le transporteur choisi par le client, en DDP (vous les répercutez) comme dans l’estimation DAP (le transporteur les réclamera au client).
- Ils ne s’appliquent que si des droits ou taxes sont dus : une commande entièrement exonérée ne les déclenche pas.
- Ils apparaissent sur une ligne à part dans le détail du calcul, sur la commande et dans le compte client : « Frais du transporteur (avance des droits) ».

Exemple : 2 % des droits et taxes, minimum 12 €. Pour 40 € de droits et taxes, les frais valent 12 € ; pour 900 €, ils valent 18 €.
Imposer le DDP pour certains pays
Un pays impose le DDP s’il figure dans la liste globale ou si son taux pays porte l’option correspondante. Les États-Unis sont dans la liste par défaut : les droits y sont perçus sur tous les envois, quel que soit leur montant. Pour ces destinations, le bloc n’affiche que le DDP, marqué « Obligatoire pour cette destination », avec une explication pour le client.

Si vous imposez le DDP pour un pays sans aucun frais configuré, la commande est enregistrée en DDP sans montant, et aucune mention douane n’apparaît (facture, compte client, back-office). Le bandeau d’état vous signale ce cas.
Simulateur
L’onglet Simulateur calcule les frais pour un pays, un produit (facultatif), un montant de produits, un montant de transport et un transporteur. Il affiche le détail exact que verra le client, indique si le DDP est obligatoire pour ce pays et précise l’origine de chaque taux (règle produit, règle catégorie, valeur du pays ou valeur par défaut). Il signale aussi les cas où le bloc ne s’afficherait pas : commande sous le seuil de franchise ou aucun taux configuré.

Expérience client
Sur la fiche produit
Sous le bouton d’ajout au panier, un bloc indique la destination et les droits et taxes estimés pour l’article, avec les taux appliqués (règles produits comprises). L’estimation porte sur l’article seul : transport, frais de dossier et frais du transporteur n’y sont pas inclus, ce que le bloc précise. Elle se met à jour au changement de déclinaison.

Le pays est déterminé dans cet ordre :
- pays choisi par le visiteur dans le sélecteur (mémorisé dans son navigateur) ;
- adresse de livraison du panier ;
- première adresse du client connecté ;
- géolocalisation, si l’option est active : en-tête Cloudflare, puis base GeoLite2.
Pour un pays de l’UE ou un pays inconnu, le bloc se réduit au lien « Livraison hors Union européenne ? Estimez les droits de douane », qui ouvre le sélecteur. Si l’article seul est sous le seuil de franchise, le bloc l’indique et donne l’estimation au-delà. Un article exonéré affiche qu’aucun droit ni taxe ne s’applique.
La base GeoLite2 n’est pas livrée avec PrestaShop. Pour l’installer, suivez International > Localisation > Géolocalisation : elle se place dans app/Resources/geoip/GeoLite2-City.mmdb. Sans elle (et sans Cloudflare), le pays vient de l’adresse du client ou du sélecteur.
Dans le panier
Si l’adresse du client est déjà connue et hors UE, une notice annonce l’estimation des frais. Pour une destination qui impose le DDP, elle précise que les frais seront ajoutés à l’étape Livraison. En DDP, la ligne « Frais de douane » du panier est illustrée et verrouillée : ni quantité modifiable, ni suppression, ni lien vers une fiche produit.

À l’étape transporteur
Le bloc s’affiche entre la liste des transporteurs et le commentaire de commande, avant le bouton Continuer. Le client voit :
- Payer maintenant avec ma commande (DDP), avec le montant : les frais sont ajoutés à la commande et rien n’est demandé à la réception ;
- Payer à la livraison (DAP), avec l’estimation : le transporteur réclamera les droits, taxes et éventuels frais de dossier ;
- Voir le détail du calcul : valeur en douane, droits, TVA d’importation, frais de dossier, frais du transporteur.
Le changement d’option ne recharge pas la page : le récapitulatif de commande est mis à jour aussitôt. Le bloc se met aussi à jour quand le client change de transporteur.

Acceptation DAP à l’étape paiement
Si l’option est active et que le client a choisi le DAP, une case obligatoire apparaît avec les conditions générales : le client reconnaît que les droits (avec l’estimation) et les éventuels frais du transporteur lui seront réclamés à la livraison. La date d’acceptation est enregistrée et affichée sur la fiche commande. Elle est annulée si le client change de mode ou si le montant estimé change.

Commande, facture et bon de livraison
À la validation, le module enregistre le mode, le montant, la ventilation droits / TVA / frais de dossier / frais du transporteur, le pays, le transporteur et, en DAP, la date d’acceptation.
- Fiche commande du back-office : badge DDP ou DAP, montant, ventilation, destination, transporteur, date d’acceptation DAP, et une alerte si une commande DDP part avec un transporteur non déclaré compatible.
- Compte client : rappel de ce qui a été réglé ou reste dû, avec la ventilation.
- Facture PDF : mention Incoterm DDP (droits réglés à la commande) ou DAP (droits à la charge du destinataire, avec l’estimation communiquée).
- Bon de livraison PDF : consigne « EXPÉDITION EN DDP » ou « EXPÉDITION EN DAP » pour le préparateur, avec la destination.



Traductions
Tous les libellés (checkout, panier, compte client, back-office, PDF) sont fournis en français, anglais, espagnol, allemand, italien, portugais, néerlandais et polonais. Vous pouvez ajuster n’importe quel texte dans International > Traductions > Traductions des modules.
FAQ et dépannage
Le bloc de choix ne s’affiche pas
Consultez d’abord le bandeau d’état. Vérifiez ensuite que l’adresse de livraison est hors du territoire UE configuré, qu’un taux produit un montant supérieur à 0 et que la commande dépasse le seuil de franchise. Le simulateur vous indique ce que verra le client pour un pays et un montant donnés.
L’estimation n’apparaît pas sur la fiche produit
Vérifiez que l’option est active dans Réglages et qu’au moins un taux est configuré. Sans sélecteur de pays, le bloc n’apparaît que si le pays du visiteur est connu et hors UE. Un thème très personnalisé doit appeler le hook displayProductAdditionalInfo sur la fiche produit, comme Classic et Hummingbird.
Un produit exonéré est encore taxé
Vérifiez l’ordre de priorité : une règle produit l’emporte sur une règle catégorie, et une règle pour le pays l’emporte sur une règle « toutes destinations ». Le simulateur, avec le produit sélectionné, indique l’origine de chaque taux.
Un bon de réduction s’applique-t-il aux frais ?
PrestaShop traite la ligne de frais comme un produit : un bon en pourcentage sur toute la commande réduit aussi les frais, et la ligne compte dans les minimums de commande. Le montant enregistré sur la commande est le montant net réellement encaissé.
Le port gratuit au montant change-t-il le calcul ?
Si la ligne de frais fait franchir le seuil de port gratuit, le transport reste compté dans la valeur en douane (dernier coût connu pour ce transporteur), afin que les frais restent stables.
Le montant semble incorrect en multidevise
Frais fixes et seuils sont saisis dans la devise par défaut puis convertis selon vos taux de change. Vérifiez que ces taux sont à jour.
Dois-je expédier différemment en DDP ?
Oui : choisissez un service DDP auprès de votre transporteur ou transitaire. Le bon de livraison le rappelle au préparateur. Le module gère la collecte et l’information, pas la déclaration en douane.
Que se passe-t-il à la désinstallation ?
La désinstallation supprime les hooks, la configuration, les tables du module et le produit de frais. Aucune donnée résiduelle n’est laissée en base.