# DHL Sendungs-Stornierung - Troubleshooting ## Problem: "RF-UndefinedResource" Fehler ### Aktuelle Situation: - **Config:** Sandbox-Modus aktiv (`DHL_SANDBOX=true`) - **Base URL:** `https://api-sandbox.dhl.com` - **Sendung:** ID 11, Nr. `0034043333301020021021115` - **Status:** `created` (stornierbar) - **Fehler:** "RF-UndefinedResource" ### Ursachen: #### 1. **Sandbox-Einschränkungen** Im DHL Sandbox-Modus: - Sendungen sind nur für begrenzte Zeit verfügbar - Test-Sendungen werden nach kurzer Zeit automatisch gelöscht - Stornierung ist nur innerhalb weniger Stunden möglich #### 2. **Zeitfenster überschritten** - Sendung erstellt: `2026-01-23 13:08:07` - Wenn mehr als 2-3 Stunden vergangen: Nicht mehr stornierbar #### 3. **Sandbox vs. Production Mismatch** - Sendung im Sandbox erstellt - Versuch im Production-Modus zu stornieren (oder umgekehrt) ### Lösungen: #### Option 1: Neue Test-Sendung erstellen ```bash # Neue Sendung erstellen und SOFORT stornieren (innerhalb von Minuten) # Im DHL Cockpit: Neue Sendung erstellen → Sofort Storno-Button klicken ``` #### Option 2: Production-Modus testen (nur mit echten Credentials!) ```env # .env DHL_SANDBOX=false DHL_BASE_URL=https://api-eu.dhl.com DHL_API_KEY= DHL_USERNAME= DHL_PASSWORD= ``` #### Option 3: Status manuell setzen (nur für Entwicklung) ```bash php artisan tinker ``` ```php $shipment = Acme\Dhl\Models\DhlShipment::find(11); $shipment->update(['status' => 'canceled']); ``` ### Empfehlung: **Für Sandbox-Tests:** 1. Sendung erstellen 2. **SOFORT** (innerhalb von 1-2 Minuten) stornieren 3. Nicht länger warten **Für Production:** - Stornierung funktioniert zuverlässig innerhalb von 24 Stunden - Sendungen bleiben länger in der API verfügbar ### Debug-Commands: ```bash # Prüfe Sendung php artisan tinker --execute=" \$s = Acme\Dhl\Models\DhlShipment::find(11); echo 'Status: ' . \$s->status . PHP_EOL; echo 'Created: ' . \$s->created_at . PHP_EOL; echo 'Age: ' . \$s->created_at->diffForHumans() . PHP_EOL; " # Prüfe Config php artisan tinker --execute=" \$c = (new \App\Http\Controllers\SettingController())->getDhlConfig(); echo 'Mode: ' . (\$c['base_url'] == 'https://api-sandbox.dhl.com' ? 'SANDBOX' : 'PRODUCTION') . PHP_EOL; " ``` ### Workaround für alte Sandbox-Sendungen: Da alte Sandbox-Sendungen nicht mehr storniert werden können, setzen wir den Status manuell: ```php // Alle alten "created" Sendungen als "failed" markieren Acme\Dhl\Models\DhlShipment::where('status', 'created') ->where('created_at', '<', now()->subHours(6)) ->update(['status' => 'failed']); ```