Kunden

Felddefinition

Pflichtfelder sind mit einem Stift markiert. Die Felddefinitionen beziehen sich auf die MySQL Syntax.

Die Identifikation eines bestehenden Kunden erfolgt über die externe Kundennummer (external) oder die interne Kundennummer (id). Wird keine Übereinstimmung gefunden, wird ein neuer Kunde angelegt.

id
int(11)
Interne XONIC Kundennummer.
Wenn angegeben und bereits vorhanden → Update. Leer oder 0 → Neukunde mit AUTO_INCREMENT.
external
varchar(255)
Externe Kundennummer (z.B. aus ERP/WaWi-System wie SelectLine).
Hat Vorrang vor id beim Matching bestehender Kunden.
email_address
varchar(255)
E-Mail-Adresse des Kunden.
gender
char(1)
Geschlecht / Anrede
  • m: männlich (Herr)
  • f: weiblich (Frau)
  • d: divers
firstname
varchar(255)
Vorname des Kunden.
lastname
varchar(255)
Nachname des Kunden.
pseudonym
varchar(255)
Benutzername / Anzeigename des Kunden.
password
varchar(255)
Passwort (Klartext).
Wird beim Import automatisch verschlüsselt gespeichert. Wird kein Passwort angegeben, bleibt das bestehende Passwort erhalten (bei Update) oder es wird keines gesetzt (bei Neukunde).

Bei Neukunden mit aktivierter Option XML_PORT_NEW_CUSTOMER_MAIL=true wird automatisch ein Passwort generiert und per Willkommens-E-Mail versandt.
telephone
varchar(255)
Telefonnummer.
fax
varchar(255)
Faxnummer.
language
varchar(2)
Sprache des Kunden als ISO-2-Code.
  • de: Deutsch (Standard)
  • en: Englisch
Wird automatisch in die interne language_id aufgelöst.
group_id
int(11)
Kundengruppen-ID.
Kundengruppen können im <groups>-Block der XML-Datei definiert/aktualisiert werden.
default_address
int(11)
Standard-Lieferadresse (Adressbuch-ID).
Wird automatisch auf die erste importierte Adresse gesetzt, wenn nicht angegeben.
billing_address
int(11)
Rechnungsadresse (Adressbuch-ID).
Wird automatisch auf die erste importierte Adresse gesetzt, wenn nicht angegeben.
newsletter
tinyint(1)
Newsletter-Abonnement
  • 1: Abonniert (erstellt/aktualisiert Newsletter-Subscriber-Eintrag)
  • 0: Nicht abonniert (löscht vorhandenes Abonnement)

Adressen

Pro Kunde können mehrere Adressen importiert werden. Jede Adresse wird als eigener <address>-Knoten innerhalb des <addresses>-Blocks angegeben. Die erste Adresse wird automatisch als Standard-Liefer- und Rechnungsadresse gesetzt.

gender
char(1)
Anrede der Adresse (m, f, d).
firstname
varchar(255)
Vorname.
lastname
varchar(255)
Nachname.
company
varchar(255)
Firmenname.
Wird zusätzlich in das Feld customers_company des Kundendatensatzes übernommen.
tax_id
varchar(255)
Umsatzsteuer-Identifikationsnummer (z.B. DE123456789).
street_address
varchar(255)
Straße und Hausnummer.
postcode
varchar(10)
Postleitzahl.
city
varchar(255)
Stadt / Ort.
suburb
varchar(255)
Stadtteil / Ortsteil.
country_code
char(2)
ISO 3166-1 Alpha-2 Ländercode (z.B. DE, AT, CH).
Empfohlen gegenüber dem Feld country.
country
varchar(255)
Ländername (Alternative zu country_code).
Wird intern in die country_id aufgelöst. Wenn weder country_code noch country angegeben wird, greift das im Shop konfigurierte Standardland.
state
varchar(255)
Bundesland / Region / Kanton.
zusatz1
varchar(255)
Adresszusatz 1 (frei belegbares Feld, z.B. Etage, Gebäude).
zusatz2
varchar(255)
Adresszusatz 2.
zusatz3
varchar(255)
Adresszusatz 3.

Kundengruppen

Kundengruppen können im optionalen <groups>-Block vor den Kundendaten definiert werden. Bestehende Gruppen werden anhand der ID aktualisiert, neue Gruppen werden automatisch angelegt.

id
int(11)
Gruppen-ID. Leer für automatische Vergabe.
name
varchar(255)
Name der Kundengruppe.

Extra-Felder

Über den <extra_fields>-Block können zusätzliche Felder als Name-Wert-Paare übermittelt werden. Folgende Felder werden speziell verarbeitet:

belegsperre
boolean
Kundenkonto sperren.
  • true: Kunde ist gesperrt (customers_lock = 1)
  • false: Kunde ist aktiv (customers_lock = 0)
gebietsleiter
varchar(255)
Zuordnung zu Gebietsleitern.
Mehrere Gebietsleiter durch Semikolon getrennt. Präfix S für Superuser-Flag.
Beispiel: EXT-001;SEXT-002;EXT-003
Die externe Kundennummer des Gebietsleiters wird in die interne ID aufgelöst.
genehmigernr
varchar(255)
Externe Kundennummer des Genehmigers.
Wird in die interne Kunden-ID aufgelöst und als Genehmiger-Beziehung gespeichert.
castrolnr
varchar(255)
Castrol-Kundennummer (branchenspezifisch).

Rabatte (discounts)

Ab Shopversion 4.8.6 kann innerhalb des <customer>-Elements ein optionaler <discounts>-Node übermittelt werden. Jeder <discount>-Eintrag entspricht einer Rabattzeile im Feld Rabatte der Kundenverwaltung (x % auf Kategorie N).

Existieren im Shop mehrere Kundenkonten mit derselben externen Kundennummer (z. B. mehrere Ansprechpartner einer Firma), werden die übermittelten Rabatte ab Shopversion 4.8.8 automatisch auf alle Konten dieser Nummer angewendet. Die übrigen Kundendaten (Name, E-Mail, Adressen) bleiben davon unberührt.

category_id
int(11)
Kategorie-ID, auf die der Rabatt wirkt.
0 = Hauptebene – zusammen mit subcategories = 1 wirkt der Rabatt auf das gesamte Sortiment.
value
decimal
Rabatt in Prozent (Pflichtfeld).
Dezimal-Komma erlaubt (z.B. 8,5). Werte über 100 werden auf 100 begrenzt, Werte kleiner oder gleich 0 werden übersprungen.
subcategories
tinyint(1)
Rabatt gilt auch für Unterkategorien.
0 / 1, Standard: 1.
qpb
tinyint(1)
Rabatt auch auf Staffelpreise.
0 / 1, Standard: 0.
option
tinyint(1)
Rabatt auch auf Merkmal-Aufpreise.
0 / 1, Standard: 0.
special
tinyint(1)
Rabatt auch auf Sonderangebote (Aktionspreise aus der Sonderangebots-Verwaltung).
Bezieht sich nicht auf kundenindividuelle Preise – siehe Hinweis unter der Tabelle.
0 / 1, Standard: 0.

Für den <discounts>-Node gilt die Semantik Ersetzen, wenn vorhanden:

  • Node mit Einträgen vorhanden: Der komplette Rabatt-Bestand des Kunden wird ersetzt.
  • Leerer Node (<discounts></discounts>): Alle Rabatte des Kunden werden entfernt.
  • Node fehlt: Die Rabatte bleiben unangetastet – bestehende Anbindungen ändern nichts.

Das interne Freischalt-Flag des Kunden wird automatisch nachgeführt – die Rabatte wirken sofort im Shop.

Zusammenspiel mit kundenindividuellen Preisen: Standardmäßig wird ein Kategorierabatt zusätzlich auf einen kundenindividuellen Preis angewendet (der Rabatt wirkt dann auf den Kundenpreis). Ab Shopversion 4.8.8 lässt sich das über die Einstellung „Kategorienrabatte auf kundenindividuelle Preise“ in der Shop-Konfiguration abschalten – der kundenindividuelle Preis ist dann der Endpreis und vom Rabatt ausgenommen.

Beispiel innerhalb des <customer>-Elements:

<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>

Beispiel-XML

Die XML Datei muss folgender Namenskonvention entsprechen:
Customers(.)*.xml

Ablageort: /xoport/xml/import/

Import auslösen: /xpanel/xoport/import_customers.php (Alias ab Shopversion 4.8.6: update_customers.php).

Die Datei ist in eine Hülle aus <customer_data><customers> eingebettet — jeder Kunde ist ein <customer>-Element (siehe Beispiel). Ab Shopversion 4.8.6 wird auch <customers> direkt als Wurzelelement akzeptiert. Es werden nur Felder geschrieben, die in der Datei enthalten sind — fehlende Stammdaten-Felder bleiben unangetastet (Delta-Import, z. B. nur <external> + <discounts>); ein leer übermitteltes Feld leert den Wert im Shop. Die JSON-Antwort meldet ab 4.8.6 zusätzlich customers.imported / customers.skipped_unknown — imported: 0 deutet auf ein falsches Wurzelelement oder unbekannte Kundennummern hin.
<?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>

Download XSL-Definition

Letzte Aktualisierung: 23. Juli 2026

Importieren Sie Kundendaten mit Adressen, Kundengruppen und Newsletter-Abonnements per XML-Schnittstelle in Ihren XONIC Shop. Unterstützt externe Kundennummern für ERP/WaWi-Anbindung.