Importez les données clients (adresses, groupes de clients et abonnements à la newsletter) dans votre boutique XONIC via une interface XML. Prise en charge des numéros de client externes pour l'intégration ERP/gestion commerciale.
Clients
Définition des champs
Les champs obligatoires sont signalés par un crayon. Les définitions des champs se réfèrent à la syntaxe MySQL.
L'identification d'un client existant s'effectue via le numéro de client externe (external) ou le numéro de client interne (id). Si aucune correspondance n'est trouvée, un nouveau client est créé.
Si spécifié et déjà existant → mise à jour. Vide ou 0 → nouveau client avec AUTO_INCREMENT.
Prévalent sur «
id » lors de la mise en correspondance des clients existants.m: masculin (Monsieur)f: féminin (Madame)d: divers
Il est automatiquement enregistré sous forme cryptée lors de l'importation. Si aucun mot de passe n'est indiqué, le mot de passe existant est conservé (en cas de mise à jour) ou aucun n'est défini (pour un nouveau client).
Pour les nouveaux clients ayant activé l'option «
XML_PORT_NEW_CUSTOMER_MAIL=true », un mot de passe est généré automatiquement et envoyé par e-mail de bienvenue.de: Allemand (par défaut)en: anglais
language_id » en interne.Les groupes de clients peuvent être définis/mis à jour dans le bloc «
<groups> » du fichier XML.Si elle n'est pas spécifiée, elle est automatiquement définie sur la première adresse importée.
Si ce champ n'est pas renseigné, la valeur par défaut correspond à la première adresse importée.
1: Abonné (création/mise à jour de l'entrée d'abonné à la newsletter). À partir de la version 4.9.168 de la boutique, uniquement si l'adresse ne fait l'objet d'aucun blocage de newsletter ni d'opposition à la publicité, et uniquement pour les comptes actifs et non bloqués ; un abonnement confirmé conserve sa confirmation et son lien de désabonnement.0: Désabonnement. À partir de la version 4.9.168 de la boutique, l'importation supprime l'abonnement dans la boutique et chez le fournisseur de la newsletter, et enregistre une opposition à la publicité : les importations ultérieures rejettent l'adresse ; une nouvelle inscription n'est possible que via l'e-mail de confirmation. Jusqu'à la version 4.9.167, l'abonnement était uniquement supprimé dans la boutique.- ⚠️ Les e-mails publicitaires issus du marketing et des automatisations (xoMarketing) ne tiennent pas encore compte de l’opposition à la publicité dans la version 4.9 de la boutique ; cette fonctionnalité sera disponible à partir de la version 4.10.
- ⚠️ Si un système de gestion des stocks envoie un e-mail «
0» même pour les abonnements « inconnus », il désabonne ainsi tout abonné de la boutique. Dans ce cas, n’envoyez l’e-mail «newsletter» qu’aux abonnements connus ou omettez-le.
1: Activer le blocage. À partir de la version 4.9.171 de la boutique, l'importation, après le fichier, supprime tous les abonnements du compte, dans la boutique et chez le fournisseur de newsletter ; elle comptabilise les réponses dansnewsletter.locked_removedet les échecs chez le fournisseur dansunsubscribe_failed. Jusqu'à la version 4.9.170, l'importation ne faisait qu'appliquer le blocage, l'abonnement restait actif dans la boutique.- ⚠️ Les e-mails publicitaires issus du marketing et des automatisations (xoMarketing) ne contournent pas encore le blocage dans Shop 4.9 ; cette fonctionnalité sera disponible avec Shop 4.10.
0: cela ne fait que lever le blocage et ne réinscrit personne.
Adresses
Plusieurs adresses peuvent être importées par client. Chaque adresse est spécifiée sous la forme d’un nœud <address> distinct au sein du bloc <addresses>. La première adresse est automatiquement définie comme adresse de livraison et de facturation par défaut.
m, f, d).Est également transféré dans le champ «
customers_company » de la fiche client.DE123456789).DE, AT, CH).Recommandé plutôt que le champ
country.country_code).Est converti en interne en «
country_id ». Si ni « country_code » ni « country » n’est spécifié, c’est le pays par défaut configuré dans la boutique qui s’applique.Groupes de clients
Les groupes de clients peuvent être définis dans le bloc optionnel « <groups> » situé avant les données client. Les groupes existants sont mis à jour à l'aide de leur ID, tandis que les nouveaux groupes sont créés automatiquement.
Champs supplémentaires
Le bloc « <extra_fields> » permet de transmettre des champs supplémentaires sous forme de paires nom-valeur. Les champs suivants font l'objet d'un traitement spécifique :
true: Le client est bloqué (customers_lock = 1)false: le client est actif (customers_lock = 0)
Plusieurs responsables de zone séparés par des points-virgules. Préfixe
S pour l'indicateur de super-utilisateur.Exemple :
EXT-001;SEXT-002;EXT-003Le numéro client externe du responsable de zone est converti en identifiant interne.
Il est converti en identifiant client interne et enregistré en tant que relation d'approbateur.
Remises (discounts)
À partir de la version 4.8.6 de la boutique, un nœud facultatif « <discounts> » peut être transmis au sein de l’élément « <customer> ». Chaque entrée « <discount> » correspond à une ligne de remise dans le champ « Remises » de la gestion des clients (x % sur la catégorie N).
Si la boutique comporte plusieurs comptes clients portant le même numéro de client externe (par exemple, plusieurs interlocuteurs d’une même entreprise), les remises transmises sont automatiquement appliquées, à partir de la version 4.8.8 de la boutique, à tous les comptes associés à ce numéro. Les autres données client (nom, e-mail, adresses) ne sont pas concernées par cette modification.
0 = Niveau principal – associé à subcategories = 1, la remise s'applique à l'ensemble de la gamme.La virgule décimale est autorisée (par ex.
8,5). Les valeurs supérieures à 100 sont limitées à 100, les valeurs inférieures ou égales à 0 sont ignorées.0 / 1, par défaut : 1.0 / 1, par défaut : 0.0 / 1, par défaut : 0.Ne s'applique pas aux prix personnalisés par client – voir la remarque sous le tableau.
0 / 1, par défaut : 0.Pour le nœud « <discounts> » , la sémantique « Remplacer si présent » s’applique :
- Nœud contenant des entrées : l'ensemble des remises du client est remplacé.
- Nœud vide (
<discounts></discounts>): toutes les remises du client sont supprimées. - Nœud absent : les remises restent inchangées – les liaisons existantes n’ont aucune incidence.
Le drapeau d'activation interne du client est automatiquement mis à jour – les remises s'appliquent immédiatement dans la boutique.
Interaction avec les prix personnalisés : par défaut, une remise de catégorie s’applique en plus d’un prix personnalisé (la remise s’applique alors au prix client). À partir de la version 4.8.8 de la boutique, il est possible de désactiver cette fonctionnalité via le paramètre « Remises par catégorie sur les prix personnalisés » dans la configuration de la boutique – le prix personnalisé est alors le prix final et n’est pas concerné par la remise.
Exemple dans l’élément « <customer> » :
<discounts>
<discount>
<category_id>0</category_id>
<value>8,5</value>
</discount>
<discount>
<category_id>22</category_id>
<subcategories>0</subcategories>
<value>15</value>
<special>1</special>
</discount>
</discounts>
Exemple XML
Le fichier XML doit respecter la convention de nommage suivante :Customers(.)*.xml
Emplacement de stockage : /xoport/xml/import/
Lancer l'importation : /xpanel/xoport/import_customers.php (alias à partir de la version 4.8.6 de la boutique : update_customers.php).
<customer_data><customers> — chaque client correspond à un élément <customer>(voir exemple). À partir de la version 4.8.6 de la boutique, <customers> est également accepté directement comme élément racine. Seuls les champs contenus dans le fichier sont enregistrés — les champs de données de base manquants ne sont pas modifiés (importation delta, par exemple uniquement <external> + <discounts>) ; un champ transmis vide efface la valeur correspondante dans la boutique. À partir de la version 4.8.6, la réponse JSON signale également customers.imported / customers.skipped_unknown — imported: 0 indique un élément racine incorrect ou des numéros de client inconnus.<?xml version="1.0" encoding="UTF-8"?>
<customer_data>
<!-- Kundengruppen (optional) -->
<groups>
<group>
<id>1</id>
<name>Standardkunde</name>
</group>
<group>
<id>2</id>
<name>Premium</name>
</group>
</groups>
<!-- Kundendaten -->
<customers>
<customer>
<id></id>
<external>ERP-12345</external>
<group_id>1</group_id>
<language>de</language>
<gender>m</gender>
<firstname>Max</firstname>
<lastname>Mustermann</lastname>
<email_address>max@example.com</email_address>
<telephone>+49 371 123456</telephone>
<newsletter>1</newsletter>
<addresses>
<address>
<gender>m</gender>
<firstname>Max</firstname>
<lastname>Mustermann</lastname>
<company>Meine GmbH</company>
<tax_id>DE123456789</tax_id>
<street_address>Hauptstraße 1</street_address>
<postcode>09247</postcode>
<city>Chemnitz</city>
<country_code>DE</country_code>
<state>Sachsen</state>
</address>
</addresses>
<extra_fields>
<extra_field>
<name>belegsperre</name>
<value>false</value>
</extra_field>
</extra_fields>
<discounts>
<discount>
<category_id>0</category_id>
<value>8,5</value>
</discount>
</discounts>
</customer>
</customers>
</customer_data>
Last updated: 18 octobre 2026