shipsa/dhl-sdk

PHP and Laravel SDK for integrating DHL shipping services

Maintainers

Package info

github.com/HusseinAhmed2018/shipsa-dhl-sdk

pkg:composer/shipsa/dhl-sdk

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

v1.0.0 2026-06-21 13:41 UTC

This package is auto-updated.

Last update: 2026-06-21 14:10:10 UTC


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