Skip to content

Shop-Import & Connector ​

Transaktionen: SAL16 Aufträge, SAL31 Tracking No. Import
Controller: SalesHeadApiController, SalesImportApiController
Basis: /api/salesHead/connector, /api/salesHead/importOrders, /api/salesImport

Business-Zweck ​

Der Connector-Flow ist reybex' Standardmuster für Shop-, Marktplatz- und Fulfillment-Systeme, die per REST (nicht über OMP-Jobs) Aufträge übergeben und Status zurückmelden. Typische Partner-Rolle:

  1. Import – Shop-Bestellungen als SalesHead (Order) anlegen
  2. Export/Polling – offene Aufträge aus reybex lesen (connectorStatus=0)
  3. Rückmeldung – Tracking, Lieferschein, Rechnung, Abschluss (connectorStatus=1)

Im Gegensatz zum OMP-Modul (Amazon/eBay-Jobs, MarktplaceOrderTransfer) arbeitet der Connector pull-basiert: Das Partnersystem pollt reybex und bestätigt Bearbeitung.

→ Gesamtflow: Order-to-Cash

Kernbegriffe ​

BegriffBedeutung
connectorStatus0 = offen für Connector, 1 = vom Partner bearbeitet/abgeschlossen
marktplaceOrderIdExterne Shop-Bestellnummer – Idempotenz-Schlüssel
marktplaceKanal-Referenz (z. B. Marktplace „Connector“)
saveForConnectorBackend-Methode hinter POST /connector
showForConnectorBackend-Methode hinter GET /connector
SendPacksPackstück mit Tracking (licenseplate, trackingCode)
referencingDocumentsKombi: LS + RE + Tracking in einem Connector-Call
OrderStatusWorkflow-Status (in Bearbeitung / abgeschlossen)

Connector-Lifecycle ​

connectorStatus im Detail ​

WertBedeutungGET /connector
0Offen – Partner soll bearbeitenEnthalten
1Geschlossen – Rückmeldung erfolgtNicht enthalten

Zusätzliche Filter in showForConnector:

  • isDelete = 0
  • blockedDelivery = 0
  • DocType isOrder = 1 (oder FBA-Variante)
  • Positionen ohne Storno-Status (orderItemStatus not in 5, 12)

Architektur – Connector vs. OMP ​

AspektConnectorOMP
ProtokollREST Pull/PushInterne Jobs + Marktplace-Konfig
Typische QuelleEigener Shop, Custom ERPAmazon, eBay, …
StatusfeldconnectorStatusMarktplaceOrderTransfer.processingStatus
Tracking-RückmeldungPOST /connector + sendPacksMarktplace-Action updateOrders
DokuDiese SeiteOMP-Modulübersicht

Phase 1 – Auftrag importieren ​

Variante A: Standard Save (empfohlen) ​

Einzel- oder Batch-Anlage über normales Save – mit Pflichtfeld marktplaceOrderId:

json
POST /api/salesHead/
{
  "docType": { "id": 300001 },
  "customer": { "id": 1000001 },
  "marktplaceOrderId": "SHOP-2026-998877",
  "marktplace": { "id": 400001 },
  "orderDate": "2026-09-10T14:30:00",
  "orderDescription": "Shop #998877",
  "paymcond": { "id": 100001 },
  "currency": { "id": 1 },
  "receiver": {
    "name": "Max Mustermann",
    "street": "Hauptstraße 1",
    "zipcode": "10115",
    "city": "Berlin",
    "country": { "code": "DE" }
  },
  "items": [
    {
      "itemNumber": 1,
      "material": { "matCode": "SKU-RED-M" },
      "quantity": 2,
      "price": 29.99,
      "grossPrice": 35.69,
      "vatKey": { "id": 1 },
      "warehouse": { "id": 500001 }
    }
  ]
}

Response:

json
{
  "id": 1234567890123456,
  "docNumber": "AU-2026-00789",
  "connectorStatus": 0,
  "marktplaceOrderId": "SHOP-2026-998877",
  "totalAmount": 71.38
}

Variante B: importOrders ​

json
POST /api/salesHead/importOrders
{
  "orders": [
    {
      "marktplaceOrderId": "SHOP-2026-998878",
      "customerNo": "K-10001",
      "items": [
        { "matCode": "SKU-BLUE-L", "quantity": 1, "price": 39.99 }
      ]
    }
  ]
}

Hinweis Backend

Der Endpoint validiert u. a. das Vorhandensein eines Marktplace „Connector“. Partner sollten für produktive Importe POST /api/salesHead/ mit vollständigem SalesHead-Objekt bevorzugen und importOrders nur nutzen, wenn vom Projektteam freigegeben.

Idempotenz mit marktplaceOrderId ​

Regel: Vor jedem Import prüfen, ob bereits ein Auftrag mit gleicher marktplaceOrderId existiert.

bash
curl -G "$BASE_URL/api/salesHead/salesOrders" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "filter=marktplaceOrderId~eq~SHOP-2026-998877"
SituationVerhalten Partner
Kein TrefferNeu anlegen
Treffer, connectorStatus=0Update statt Neuanlage (PATCH/save mit id)
Treffer, connectorStatus=1Kein erneuter Import – ggf. Retoure SAL20

Phase 2 – Offene Aufträge exportieren (Polling) ​

bash
curl -G "$BASE_URL/api/salesHead/connector" \
  -H "Authorization: Bearer $TOKEN"

Optionale Query-Parameter:

ParameterWirkung
vendorNur Aufträge mit Material des Lieferanten (customerNo)
isNotVirtualMaterial=1Keine virtuellen Artikel
status=closedNur salesHead.status=2
isFbaOrSalesOrders=1Orders oder FBA
isInvoiceSend=1E-Rechnung versendet – Spezialfall Rückmeldung

Response-Struktur (vereinfacht):

json
{
  "orders": [
    {
      "id": 1234567890123456,
      "docNumber": "AU-2026-00789",
      "connectorStatus": 0,
      "marktplaceOrderId": "SHOP-2026-998877",
      "customer": { "id": 1000001, "customerNo": "K-10001", "name": "Muster GmbH" },
      "items": [
        {
          "id": 9876543210,
          "material": { "matCode": "SKU-RED-M" },
          "quantity": 2,
          "openQuantity": 2,
          "deliveryStatus": 0
        }
      ]
    }
  ]
}

Polling-Empfehlung: Intervall 1–5 Minuten, max. 100 Aufträge pro Call (Backend-Limit). Bei Leerliste Backoff nutzen.


Phase 3 – Rückmeldung an Connector (saveForConnector) ​

POST /api/salesHead/connector verarbeitet ein Array salesHeads. Pro Eintrag eine der folgenden Aktionen:

3.1 Nur Status „in Bearbeitung“ ​

json
{
  "salesHeads": [
    { "id": 1234567890123456 }
  ]
}

Setzt connectorStatus=1, orderStatus=inProcess (Typ 1).

3.2 Tracking / Packstück melden ​

json
{
  "salesHeads": [
    {
      "id": 1234567890123456,
      "sendPacks": {
        "licenseplate": "00340434161234567890",
        "carrierName": "DHL Paket"
      }
    }
  ]
}
  • Legt SendPacks an (wenn Tracking neu)
  • Setzt isSend=true, Versandart aus Shipping.name
  • connectorStatus=1, orderStatus=completed
  • Optional: MarktplaceOrderTransfer für OMP-Rückkanal

Response:

json
{
  "salesHeads": [
    {
      "id": 1234567890123456,
      "docNumber": "AU-2026-00789",
      "success": true,
      "message": "success",
      "sendPackId": 5555666677778888
    }
  ]
}

3.3 Rechnungsnummer als Connector-Referenz ​

json
{
  "salesHeads": [
    {
      "id": 1234567890123456,
      "invoiceNumber": "RE-EXTERN-12345"
    }
  ]
}

Setzt connectorReferenceNumber – für Shops, die externe Rechnungsnummern führen.

3.4 Kombi: Lieferschein + Rechnung + Tracking (referencingDocuments) ​

Vollständiger O2C-Abschluss in einem Call:

json
{
  "salesHeads": [
    {
      "id": 1234567890123456,
      "referencingDocuments": {
        "deliveryNoteDocTypeName": "Lieferschein Standard",
        "invoiceDocTypeName": "Rechnung Standard",
        "sendPackDocTypeName": "Lieferschein Standard",
        "trackingNumber": "00340434161234567890",
        "carrierName": "DHL Paket"
      }
    }
  ]
}

Pflichtfelder (Backend-Validierung):

  • deliveryNoteDocTypeName – Name des LS-DocTypes (isDelnote=true)
  • invoiceDocTypeName – Name des RE-DocTypes (isInvoice=true)
  • sendPackDocTypeName – muss gleich LS- oder RE-DocType-Name sein
  • trackingNumber, carrierName

Response bei Erfolg:

json
{
  "salesHeads": [
    {
      "id": 1234567890123456,
      "docNumber": "AU-2026-00789",
      "success": true,
      "deliveryNoteId": 1111222233334444,
      "invoiceId": 2222333344445555,
      "sendPackId": 5555666677778888
    }
  ]
}

Intern: referencingDocuments → Pack anlegen → connectorStatus=1.


Phase 4 – Tracking-Import (SAL31) ​

Für Massen-Updates aus Carrier-CSV (parallel zum Connector):

json
POST /api/salesImport/importFromCSV
{
  "importType": "tracking",
  "delimiter": ";",
  "mapping": {
    "docNumber": 0,
    "trackingNumber": 1,
    "carrierName": 2
  },
  "rows": [
    ["AU-2026-00789", "00340434161234567890", "DHL Paket"]
  ]
}

→ Sales Import API, Umlagerung & Import


Vollständiges Partner-Beispiel (cURL) ​

Schritt 1 – Auftrag anlegen ​

bash
curl -X POST "$BASE_URL/api/salesHead/" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d @order.json

Schritt 2 – Offene Orders pollen ​

bash
curl -G "$BASE_URL/api/salesHead/connector" \
  -H "Authorization: Bearer $TOKEN"

Schritt 3 – Nach Fulfillment abschließen ​

bash
curl -X POST "$BASE_URL/api/salesHead/connector" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "salesHeads": [{
      "id": 1234567890123456,
      "referencingDocuments": {
        "deliveryNoteDocTypeName": "Lieferschein Standard",
        "invoiceDocTypeName": "Rechnung Standard",
        "sendPackDocTypeName": "Lieferschein Standard",
        "trackingNumber": "00340434161234567890",
        "carrierName": "DHL Paket"
      }
    }]
  }'

Partner-Szenarien ​

Szenario 1 – Pure Fulfillment (WMS übernimmt LS/RE) ​

  1. Shop → POST /salesHead/ mit marktplaceOrderId
  2. WMS pollt GET /connector
  3. WMS kommissioniert (INV06)
  4. WMS meldet POST /connector mit referencingDocuments
  5. Shop erhält Tracking aus Response

Szenario 2 – Nur Tracking-Rückmeldung ​

  1. Lieferschein/Rechnung manuell in reybex UI
  2. Partner meldet Tracking: POST /connector mit sendPacks
  3. OMP-Marktplatz erhält ggf. updateOrders-Transfer

Szenario 3 – Drop-Shipping ​

  1. Order-Import wie oben
  2. POST /api/salesItem/createPurchaseRequest für fehlenden Bestand
  3. PUR → WE → dann Connector-Rückmeldung

→ PUR Modulübersicht

Szenario 4 – Teillieferung ​

  1. POST /api/salesHead/splitSales vor Connector-Abschluss
  2. Pro Teillieferung separater referencingDocuments-Call
  3. Restauftrag bleibt connectorStatus=0

Voraussetzungen ​

VoraussetzungModul
Order-DocType + NummernkreisSAL Konfiguration
DocType-Namen exakt für referencingDocumentsSAL (Groß/Kleinschreibung beachten)
Shipping/Carrier-Stamm (carrierName)SMP / Versand
SalesHeadDocRule Order→DelNote→InvoiceSAL
Kunde + Material + PreiseSAL01, BAS02, SAL09
API-Berechtigung SAL16PMS

Auswirkungen im ERP ​

AktionERP-Wirkung
Order-ImportReservierung INV, connectorStatus=0
sendPacksSendPacks, isSend, ggf. MarktplaceTransfer
referencingDocumentsLS + RE + Bestandsabgang + Forderung
connectorStatus=1Auftrag aus Export-Queue
Tracking CSV SAL31Packstücke ohne Connector

Typische Fehlerquellen ​

FehlerUrsacheLösung
salesHead does not existFalsche ID in POST connectorID aus GET /connector
DocType-Name nicht gefundenTippfehler in *DocTypeNameExakten Namen aus SAL-Konfig
sendPackDocTypeName must equal...Falscher Pack-BezugLS oder RE Name verwenden
blocked for deliveryblockedDelivery=trueSperre in SAL16 aufheben
Duplikat-AuftragKeine IdempotenzmarktplaceOrderId prüfen
Pack existiert bereitsGleiches licenseplateIdempotent ignorieren oder neues Tracking
Carrier unbekanntShipping.name fehltVersandart anlegen
Leere GET /connectorAlle connectorStatus=1Normal nach Abschluss

Weiterlesen ​

ThemaLink
Gesamtflow O2COrder-to-Cash
Aufträge DetailAufträge SAL16
SalesHead API—
Folgedokumente—
Tracking Import—
OMP MarktplatzOMP-Modul (interne Projekt-Doku)
StammdatenBAS, Kunden
Lager/VersandINV, Kommissionierung

Nur für reybex-Partner. Nicht für Endkunden bestimmt.