2.6 KiB
2.6 KiB
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
# 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
DHL_SANDBOX=false
DHL_BASE_URL=https://api-eu.dhl.com
DHL_API_KEY=<production_key>
DHL_USERNAME=<production_user>
DHL_PASSWORD=<production_password>
Option 3: Status manuell setzen (nur für Entwicklung)
php artisan tinker
$shipment = Acme\Dhl\Models\DhlShipment::find(11);
$shipment->update(['status' => 'canceled']);
Empfehlung:
Für Sandbox-Tests:
- Sendung erstellen
- SOFORT (innerhalb von 1-2 Minuten) stornieren
- 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:
# 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:
// Alle alten "created" Sendungen als "failed" markieren
Acme\Dhl\Models\DhlShipment::where('status', 'created')
->where('created_at', '<', now()->subHours(6))
->update(['status' => 'failed']);