shipsa / dhl-sdk
PHP and Laravel SDK for integrating DHL shipping services
v1.0.0
2026-06-21 13:41 UTC
Requires
- php: ^8.1
- ext-json: *
- guzzlehttp/guzzle: ^7.0
- nesbot/carbon: ^3.0
- ramsey/uuid: ^4.9
Requires (Dev)
- phpunit/phpunit: ^11
README
A modern PHP SDK for the DHL Express API.
Features
- ✅ Get shipping rates
- ✅ Create shipments
- ✅ Generate shipping labels
- ✅ Shipment tracking number and tracking URL
- ✅ Customs declaration support
- ✅ DTO-based requests
- ✅ Object-oriented responses
- ✅ PHP 8.1+
Installation
composer require shipsa/dhl-sdk
Configuration
Add the following variables to your .env file:
DHL_API_KEY=your_api_key DHL_API_SECRET=your_api_secret DHL_TEST_MODE=true
Or define them in your config file:
return [ 'api_key' => env('DHL_API_KEY'), 'api_secret' => env('DHL_API_SECRET'), 'test_mode' => env( 'DHL_TEST_MODE', true ), ];
Usage
use Shipsa\DhlSdk\DHL; $dhl = new DHL( apiKey: env('DHL_API_KEY'), secret: env('DHL_API_SECRET'), sandbox: true );
Get Rates
use Shipsa\DhlSdk\DTO\Address; use Shipsa\DhlSdk\DTO\Package; $origin = new Address( countryCode: $countryCode, cityName: $cityName, postalCode: $postalCode ); $destination = new Address( countryCode: $countryCode, cityName: $cityName, postalCode: $postalCode ); $package = new Package( weight: 1, length: 10, width: 5, height: 1 ); $rates = $dhl ->rate() ->setAccountNumber('123456789') ->setOriginAddress($origin) ->setDestinationAddress($destination) ->setPlannedShippingDate(new DateTimeImmutable()) ->setPackage($package) ->setNextBusinessDay(true) ->setCustomsDeclarable(false) ->getRates();
Example
foreach ($rates as $rate) { echo $rate->getProductName(); echo $rate->getTotalPrice(); echo $rate->getCurrency(); } $bestRate = $rateService->getCheapestRate($currancy); $estimatedDays = $bestRate->getEstimatedDays();
Create Shipment
$accounts = [ new Account( typeCode: 'shipper', number: config('services.dhl.account_number'), ), ]; $shipment = $dhl ->shipment() ->setPickup($pickup) ->setAccounts($accounts) ->setShipperDetails($shipperAddress, $shipperContact) ->setReceiverDetails($receiverAddress, $receiverContact) ->setPackages($packages) ->setPackages($packages) ->setDescription($description) ->setIncoterm($incoterm) ->isCustomsDeclarable($isCustomsDeclarable) ->createShipment();
Shipment Response
$shipment->getTrackingNumber(); $shipment->getDispatchConfirmationNumber(); $shipment->getTrackingUrl(); $shipment->getLabelPdf(); $shipment->getPackages();
Responses
RateResponse
$rate->getProductName(); $rate->getProductCode(); $rate->getTotalPrice(); $rate->getCurrency(); $rate->getEstimatedDeliveryDateAndTime(); $rate->getPricingDate();
ShipmentResponse
$shipment->getShipmentTrackingNumber(); $shipment->getDispatchConfirmationNumber(); $shipment->getTrackingUrl(); $shipment->getLabelPdf();
Supported Features
| Feature | Status |
|---|---|
| Get Rates | ✅ |
| Create Shipment | ✅ |
| Shipping Labels | ✅ |
| Customs Declaration | ✅ |
| DTO Requests | ✅ |
| Object Responses | ✅ |
| Tracking | 🚧 |
| Pickup | 🚧 |
Requirements
- PHP 8.1+
- Guzzle 7+
Roadmap
- Get Rates
- Create Shipment
- Generate Labels
- Shipment Tracking
- Pickup Requests
- Laravel Service Provider
- Unit Tests
License
MIT