257 lines
5 KiB
Markdown
257 lines
5 KiB
Markdown
# DHL Paket Installation & Setup
|
|
|
|
## 1. Paket im Hauptprojekt registrieren
|
|
|
|
### composer.json erweitern
|
|
|
|
```json
|
|
{
|
|
"repositories": [
|
|
{
|
|
"type": "path",
|
|
"url": "./packages/acme-laravel-dhl"
|
|
}
|
|
],
|
|
"require": {
|
|
"acme/laravel-dhl": "*"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Installation
|
|
|
|
```bash
|
|
composer update acme/laravel-dhl
|
|
```
|
|
|
|
## 2. Service Provider registrieren
|
|
|
|
### config/app.php (falls Auto-Discovery nicht funktioniert)
|
|
|
|
```php
|
|
'providers' => [
|
|
// ...
|
|
Acme\Dhl\DhlServiceProvider::class,
|
|
],
|
|
|
|
'aliases' => [
|
|
// ...
|
|
'DHL' => Acme\Dhl\Facades\DHL::class,
|
|
],
|
|
```
|
|
|
|
## 3. Konfiguration publizieren
|
|
|
|
```bash
|
|
# Konfigurationsdatei publizieren
|
|
php artisan vendor:publish --provider="Acme\Dhl\DhlServiceProvider" --tag="config"
|
|
|
|
# Migrations ausführen
|
|
php artisan migrate
|
|
```
|
|
|
|
## 4. Umgebungsvariablen konfigurieren
|
|
|
|
### .env erweitern
|
|
|
|
```env
|
|
# DHL API Configuration
|
|
DHL_BASE_URL=https://api-eu.dhl.com
|
|
DHL_API_KEY=your_api_key_here
|
|
DHL_USERNAME=your_username
|
|
DHL_PASSWORD=your_password
|
|
DHL_BILLING_NUMBER=your_billing_number
|
|
|
|
# DHL Default Settings
|
|
DHL_PRODUCT=V01PAK
|
|
DHL_LABEL_FORMAT=PDF
|
|
DHL_PRINT_FORMAT=A4
|
|
DHL_RETOURE_PRINT_FORMAT=A4
|
|
DHL_PROFILE=STANDARD_GRUPPENPROFIL
|
|
|
|
# DHL Webhook (optional)
|
|
DHL_WEBHOOK_ENABLED=false
|
|
DHL_WEBHOOK_SECRET=your_webhook_secret
|
|
DHL_WEBHOOK_ROUTE=dhl/webhooks/tracking
|
|
|
|
# DHL Queue Settings (optional)
|
|
DHL_USE_QUEUE=false
|
|
```
|
|
|
|
## 5. Test-Verbindung prüfen
|
|
|
|
### Artisan Command (zu erstellen)
|
|
|
|
```bash
|
|
php artisan dhl:test-connection
|
|
```
|
|
|
|
### Oder via Tinker
|
|
|
|
```php
|
|
php artisan tinker
|
|
|
|
// Service-Container Test
|
|
app(Acme\Dhl\Services\ShippingService::class);
|
|
|
|
// Model Test
|
|
use Acme\Dhl\Models\DhlShipment;
|
|
DhlShipment::query()->count();
|
|
|
|
// API-Test (vereinfacht)
|
|
// $client = app(Acme\Dhl\Support\DhlClient::class);
|
|
// $client->testConnection();
|
|
```
|
|
|
|
## 6. Integration in bestehende Models
|
|
|
|
### ShoppingOrder Model erweitern
|
|
|
|
```php
|
|
use Acme\Dhl\Models\DhlShipment;
|
|
|
|
class ShoppingOrder extends Model
|
|
{
|
|
/**
|
|
* DHL Sendungen für diese Bestellung
|
|
*/
|
|
public function dhlShipments(): HasMany
|
|
{
|
|
return $this->hasMany(DhlShipment::class, 'order_id');
|
|
}
|
|
|
|
/**
|
|
* Ausgehende DHL Sendungen
|
|
*/
|
|
public function dhlOutboundShipments(): HasMany
|
|
{
|
|
return $this->dhlShipments()->outbound();
|
|
}
|
|
|
|
/**
|
|
* DHL Retouren
|
|
*/
|
|
public function dhlReturns(): HasMany
|
|
{
|
|
return $this->dhlShipments()->returns();
|
|
}
|
|
|
|
/**
|
|
* Hat DHL Sendungen
|
|
*/
|
|
public function hasDhlShipments(): bool
|
|
{
|
|
return $this->dhlShipments()->exists();
|
|
}
|
|
|
|
/**
|
|
* Neueste DHL Sendung
|
|
*/
|
|
public function latestDhlShipment(): ?DhlShipment
|
|
{
|
|
return $this->dhlShipments()
|
|
->latest()
|
|
->first();
|
|
}
|
|
}
|
|
```
|
|
|
|
## 7. Verwendung in Controllern
|
|
|
|
### Beispiel Controller-Integration
|
|
|
|
```php
|
|
use Acme\Dhl\Services\ShippingService;
|
|
use Acme\Dhl\Services\TrackingService;
|
|
use Acme\Dhl\Services\ReturnsService;
|
|
|
|
class OrderController extends Controller
|
|
{
|
|
public function createDhlLabel(
|
|
ShoppingOrder $order,
|
|
ShippingService $shippingService
|
|
) {
|
|
try {
|
|
$result = $shippingService->createLabel([
|
|
'order_id' => $order->id,
|
|
'shipper' => [
|
|
'name' => 'Ihre Firma',
|
|
'street' => 'Ihre Straße 123',
|
|
'postalCode' => '12345',
|
|
'city' => 'Ihre Stadt',
|
|
'country' => 'DE'
|
|
],
|
|
'consignee' => [
|
|
'name' => $order->shipping_name,
|
|
'street' => $order->shipping_street,
|
|
'postalCode' => $order->shipping_zip,
|
|
'city' => $order->shipping_city,
|
|
'country' => $order->shipping_country
|
|
],
|
|
'weight_kg' => $order->total_weight ?? 1.0
|
|
]);
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'shipment_number' => $result['shipmentNumber'],
|
|
'label_path' => $result['label_path']
|
|
]);
|
|
|
|
} catch (Exception $e) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'error' => $e->getMessage()
|
|
], 422);
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## 8. Facade-Verwendung
|
|
|
|
```php
|
|
use DHL;
|
|
|
|
// Label erstellen
|
|
$result = DHL::createLabel($orderData);
|
|
|
|
// Tracking-Status abrufen
|
|
$status = DHL::getTrackingStatus('1234567890');
|
|
|
|
// Retourenlabel erstellen
|
|
$return = DHL::createReturn($returnData);
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Composer-Probleme
|
|
|
|
```bash
|
|
# Cache leeren
|
|
composer dump-autoload
|
|
php artisan config:clear
|
|
php artisan cache:clear
|
|
|
|
# Paket neu installieren
|
|
composer remove acme/laravel-dhl
|
|
composer install
|
|
```
|
|
|
|
### Migration-Probleme
|
|
|
|
```bash
|
|
# Migrations-Status prüfen
|
|
php artisan migrate:status
|
|
|
|
# Rollback und neu migrieren
|
|
php artisan migrate:rollback --step=2
|
|
php artisan migrate
|
|
```
|
|
|
|
### Service-Provider nicht gefunden
|
|
|
|
```bash
|
|
# Auto-Discovery cache leeren
|
|
composer dump-autoload
|
|
php artisan package:discover
|
|
```
|