# Spryker

> **Spryker** – Ausgang in Spryker Cloud Commerce / Commerce OS. Benötigtes Addon: `connector_spryker`.

## Überblick

Spryker ist eine Enterprise-Commerce-Plattform mit der Glue-REST-API für externe Integrationen. Mit dieser Integration legt Orderport Bestellungen aus anderen Quellen (z. B. cXML, EDIFACT, Shopware) direkt als Spryker-Order über die Glue API an.

Die Integration unterstützt **nur den Ausgang** – Spryker sendet derzeit keine Bestellungen zurück an Orderport.

## Kompatibilität

### Unterstützte Versionen

| Bereich | Version |
|---|---|
| Spryker | Cloud Commerce / Commerce OS mit aktueller Glue-API |
| Endpoint | `POST /checkout` |
| Content-Type | `application/vnd.api+json` (JSON:API) |
| Auth | OAuth 2.0 Password Grant |

### Bekannte Einschränkungen

- **Kein Rückkanal.** Bestell-Updates, Fulfillment- oder Zahlstatus-Änderungen werden nicht an Orderport zurückgemeldet.
- **OAuth Password Grant.** Spryker bietet für die Glue-API aktuell nur den `password`-Grant-Type an; dieser ist eng mit einem Benutzerkonto verknüpft. Client-Credentials werden nicht unterstützt.
- **Kein Katalog-Sync.** Produkt-Verfügbarkeit wird nicht vorab geprüft – nicht existierende Produkte führen beim Checkout zu Fehlern.
- **Mehrere Shops/Stores** werden über eine eigene Pipeline je Store abgebildet.
- **Gutscheine, Rabatte, Mengenstaffeln** werden aktuell nicht übersetzt.

## Authentifizierung

- **Auth-Typ im Transport**: `oauth_password`
- Benötigte Felder: `username`, `password`, `token_url` (typisch `{Glue-URL}/token`)
- Orderport holt den Access Token bei jedem Job und hält ihn im Cache, bis er abläuft.

## Einrichten in Orderport

### Pipeline anlegen

1. **Pipelines → Neue Pipeline → Simple Wizard**, Ziel: **Spryker**
2. Quelle wählen
3. Spryker-Zugangsdaten eingeben: Glue-URL, Benutzername, Passwort (gespeichert verschlüsselt)
4. **Verbindung testen** – Orderport holt Payment- und Shipment-Methoden aus der Glue API und lädt sie in Dropdowns
5. Zahlungsart, Versandart, Store, Währung, Anrede auswählen
6. Auto-Mapping für das JSON:API-Schema übernehmen

### Credential

Spryker-Seite: Orderport authentifiziert sich am Spryker Glue API – keine Orderport-Credential nötig. Der Transport-Config enthält die verschlüsselten Zugangsdaten.

## Einrichten in Spryker

### API-Benutzer anlegen

1. Backoffice → **Users → Add User** mit Rolle, die `POST /checkout` und Lookup-Endpoints erlaubt
2. Spryker Glue API unter Ihrer URL aktiv (Cloud-Umgebung: automatisch)
3. CORS / Whitelist sicherstellen – Orderports Outbound-IPs werden vom Spryker-Cloud-Team auf Wunsch freigeschaltet

## Technische Details

### Ausgangs-Payload (Auszug JSON:API)

```json
{
  "data": {
    "type": "checkout",
    "attributes": {
      "customer": {
        "email": "bestellung@muster.de",
        "firstName": "Max",
        "lastName": "Mustermann",
        "salutation": "Mr"
      },
      "billingAddress": { "...": "..." },
      "shippingAddress": { "...": "..." },
      "payments": [{ "paymentMethodName": "Rechnung", "paymentProviderName": "DummyPayment" }],
      "shipment": { "idShipmentMethod": 1 },
      "items": [
        { "sku": "WIDGET-001", "quantity": 10 }
      ]
    }
  }
}
```

### Verfügbare Zielfelder (Auszug)

| Pfad | Bedeutung |
|---|---|
| `customer.email` / `firstName` / `lastName` / `salutation` | Kundendaten |
| `billingAddress.*` / `shippingAddress.*` | Adressen |
| `payments[].paymentMethodName` | Name der Zahlungsart (aus Spryker-Dropdown) |
| `shipment.idShipmentMethod` | ID der Versandart (aus Spryker-Dropdown) |
| `items[].sku` / `quantity` | Positionen |

### Transport-Konfiguration

```json
{
  "type": "rest_api",
  "adapter_type": "spryker",
  "url": "https://glue.spryker.example.com/checkout",
  "method": "POST",
  "content_type": "application/vnd.api+json",
  "auth": {
    "type": "oauth_password",
    "token_url": "https://glue.spryker.example.com/token",
    "username": "api-user@shop.example",
    "password_encrypted": "…"
  }
}
```

### Endpoint

Kein Inbound – Spryker ist reiner Ausgang. Zielsystem: `{Glue-URL}/checkout`.

## Fehlerbehebung

| Symptom | Ursache | Lösung |
|---|---|---|
| 401 beim Token-Request | Benutzername/Passwort falsch oder Benutzer deaktiviert | Zugangsdaten in Spryker prüfen, Password-Reset initiieren |
| 422 „SKU not found" | Produkt existiert nicht im Ziel-Store | SKU-Mapping prüfen; Katalog in Spryker abgleichen |
| Shipment-Method leer | `idShipmentMethod` zeigt auf ID, die im gewählten Store nicht existiert | Im Wizard die Store-Dropdown neu wählen und Versandart erneut auswählen |
| Orderport bekommt wiederholt 401 | Spryker-Token wurde invalidiert (Session-Ablauf) | Transport neu testen; Orderport holt sich einen frischen Token |

## Nächste Schritte

- [REST API](/docs/rest-api) – OAuth-Flow im Detail
- [Feldmapping](/docs/feldmapping)
- [Fehlerbehebung](/docs/fehlerbehebung)
