The DHL Parcel DE Shipping API SDK package offers an interface to the following web services:
- PHP 8.1+ with SOAP and JSON extension
league/openapi-psr7-validator
: Schema validator for JSON request messagesnetresearch/jsonmapper
: Mapper for deserialization of JSON response messages into PHP objectsphp-http/discovery
: Discovery service for HTTP client and message factory implementationsphp-http/httplug
: Pluggable HTTP client abstractionphp-http/logger-plugin
: HTTP client logger plugin for HTTPlugpsr/http-client
: PSR-18 HTTP client interfacespsr/http-factory
: PSR-7 HTTP message factory interfacespsr/http-message
: PSR-7 HTTP message interfacespsr/log
: PSR-3 logger interfaces
psr/http-client-implementation
: Any package that provides a PSR-18 compatible HTTP clientpsr/http-factory-implementation
: Any package that provides PSR-7 compatible HTTP message factoriespsr/http-message-implementation
: Any package that provides PSR-7 HTTP messages
fig/log-test
: PSR-3 logger implementation for testing purposesnyholm/psr7
: PSR-7 HTTP message factory & message implementationphpunit/phpunit
: Testing frameworkphp-http/mock-client
: HTTPlug mock client implementationphpstan/phpstan
: Static analysis toolrector/rector
: Automatic refactoring tool to help with PHP upgradessquizlabs/php_codesniffer
: Static analysis tool
$ composer require dhl/sdk-api-parcel-de
$ composer remove dhl/sdk-api-parcel-de
$ ./vendor/bin/phpunit -c test/phpunit.xml
The DHL Parcel DE Shipping API SDK supports the following features:
- Validate Shipment
- Create Shipment Order
- Delete Shipment Order
The DHL Parcel DE Shipping API requires a two-level authentication (see API User Guide):
- The application submits a Consumer Key Header ("API Key") that must be created in the DHL API Developer Portal.
- The user is identified via HTTP Basic Authentication with credentials configured in the DHL Business Customer Portal.
These credentials are passed to the SDK via \Dhl\Sdk\ParcelDe\Shipping\Api\Data\AuthenticationStorageInterface
.
Create your own or use the default implementation:
$authStorage = new \Dhl\Sdk\ParcelDe\Shipping\Auth\AuthenticationStorage('apiKey', 'user', 'password');
Validate shipments for DHL Paket including the relevant shipping documents.
The library's components suitable for consumption comprise
- services:
- service factory
- shipment service
- data transfer object builder
- data transfer objects:
- authentication storage
- order/label settings
- validation result with status message
$logger = new \Psr\Log\NullLogger();
$serviceFactory = new \Dhl\Sdk\ParcelDe\Shipping\Service\ServiceFactory();
$service = $serviceFactory->createShipmentService($authStorage, $logger, $sandbox = true);
$requestBuilder = new \Dhl\Sdk\ParcelDe\Shipping\RequestBuilder\ShipmentOrderRequestBuilder();
$requestBuilder->setShipperAccount($billingNumber = '33333333330101');
$requestBuilder->setShipperAddress(
company: 'DHL',
country: 'DEU',
postalCode: '53113',
city: 'Bonn',
street: 'Charles-de-Gaulle-Straße',
streetNumber: '20'
);
$requestBuilder->setRecipientAddress(
recipientName: 'Jane Doe',
recipientCountry: 'DEU',
recipientPostalCode: '53113',
recipientCity: 'Bonn',
recipientStreet: 'Sträßchensweg',
recipientStreetNumber: '2'
);
$requestBuilder->setShipmentDetails(productCode: 'V01PAK', shipmentDate: new \DateTimeImmutable('2023-02-23'));
$requestBuilder->setPackageDetails(weightInKg: 2.4);
$shipmentOrder = $requestBuilder->create();
$result = $service->validateShipments([$shipmentOrder]);
Create shipments for DHL Paket including the relevant shipping documents. In addition to the primary shipment data (shipper, consignee, etc.), further settings can be defined per request via the order configuration object, including label printing size, profile, and more.
The library's components suitable for consumption comprise
- services:
- service factory
- shipment service
- data transfer object builder
- data transfer objects:
- authentication storage
- order/label settings
- shipment with shipment/tracking number and label(s)
$logger = new \Psr\Log\NullLogger();
$serviceFactory = new \Dhl\Sdk\ParcelDe\Shipping\Service\ServiceFactory();
$service = $serviceFactory->createShipmentService($authStorage, $logger, sandbox: true);
$orderConfiguration = new \Dhl\Sdk\ParcelDe\Shipping\Service\ShipmentService\OrderConfiguration(
mustEncode: true,
combinedPrinting: null,
docFormat: \Dhl\Sdk\ParcelDe\Shipping\Api\Data\OrderConfigurationInterface::DOC_FORMAT_PDF,
printFormat: \Dhl\Sdk\ParcelDe\Shipping\Api\Data\OrderConfigurationInterface::PRINT_FORMAT_A4
);
$requestBuilder = new \Dhl\Sdk\ParcelDe\Shipping\RequestBuilder\ShipmentOrderRequestBuilder();
$requestBuilder->setShipperAccount(billingNumber: '33333333330101');
$requestBuilder->setShipperAddress(
company: 'DHL',
country: 'DEU',
postalCode: '53113',
city: 'Bonn',
streetName: 'Charles-de-Gaulle-Straße',
streetNumber: '20'
);
$requestBuilder->setRecipientAddress(
name: 'Jane Doe',
countryCode: 'DEU',
postalCode: '53113',
city: 'Bonn',
streetName: 'Sträßchensweg',
streetNumber: '2'
);
$requestBuilder->setShipmentDetails(productCode: 'V01PAK', shipmentDate: new \DateTimeImmutable('2023-02-23'));
$requestBuilder->setPackageDetails(weightInKg: 2.4);
$shipmentOrder = $requestBuilder->create();
$shipments = $service->createShipments([$shipmentOrder], $orderConfiguration);
Cancel earlier created shipments.
The library's components suitable for consumption comprise
- services:
- service factory
- shipment service
- data transfer objects:
- authentication storage
$logger = new \Psr\Log\NullLogger();
$serviceFactory = new \Dhl\Sdk\ParcelDe\Shipping\Service\ServiceFactory();
$service = $serviceFactory->createShipmentService($authStorage, $logger, sandbox: true);
$shipmentNumber = '333301011234567890';
$cancelled = $service->cancelShipments([$shipmentNumber]);