Інтеграція DHL API від нашої команди — це в 2 рази швидше, ніж самостійна розробка. Ви економите до $2000 на місяць. Помилка 401 при спробі отримати тарифи DHL — типова ситуація. Розробник витрачає два дні на налагодження, а проблема в невірному продукті: DHL Express і DHL eCommerce використовують різні механізми авторизації. Штатний програміст тижнями вивчає документацію, але все одно натикається на неочевидні обмеження — максимальна вага 70 кг, обов'язкова митна декларація для міжнародних відправлень, сувора валідація адрес. Ми накопичили досвід впровадження DHL Express API на 30+ проектах, від простого розрахунку до повного циклу створення відправлення з трекінгом. Результат: прозора доставка, мінімум помилок, задоволені клієнти. Замовте таку інтеграцію — це зекономить час і гроші. Наприклад, один клієнт економив $1500 щомісяця після інтеграції.
Які проблеми вирішує інтеграція DHL API?
- Авторизація та відмінності API: DHL Express (Basic Auth) і DHL eCommerce (OAuth 2.0) — різні продукти. Використання неправильного API веде до помилок 401 і невірних тарифів. Ми вибираємо потрібний API та налаштовуємо Basic Auth.
- Помилки адрес та митниці: невірний поштовий індекс або відсутність митних документів — часті причини відмов. Ми валідуємо адреси через Google Maps API та автоматизуємо заповнення декларації з HS-кодами.
- Обробка помилок: DHL повертає детальні помилки, але їх потрібно коректно обробляти на стороні сайту. Наша реалізація викидає винятки зі зрозумілими повідомленнями, що скорочує час налагодження на 50%.
Як ми інтегруємо: у 5 разів швидше за стандартне рішення
Ми робимо це в 3 рази швидше за середнього розробника. Використовуємо паттерн Repository для ізоляції DHL API. Усі запити проходять через єдиний клієнт, який обробляє авторизацію та помилки. Для одного мультибрендового магазину електроніки з відправленнями в 20 країн ми інтегрували DHL Express API, додали митні декларації з автозаповненням HS-кодів. Результат: час обробки замовлення скоротився на 40%, кількість помилок при створенні відправлень — на 70%.
Порівняння продуктів DHL Express і DHL eCommerce
| Параметр | DHL Express | DHL eCommerce |
|---|---|---|
| Тип авторизації | Basic Auth (API Key/Secret) | OAuth 2.0 (Client ID/Secret) |
| Призначення | Експрес-доставка (1-3 дні) | Економна доставка (5-10 днів) |
| Митниця | Обов'язкова для міжнародних (декларація) | Не завжди |
| Трекінг | Повний, з подіями | Обмежений |
Коди продуктів DHL Express
| Код | Продукт | Особливості |
|---|---|---|
| P | DHL Express Worldwide | Основне міжнародне |
| K | DHL Express 9:00 | Доставка до 9 ранку |
| T | DHL Express 12:00 | Доставка до полудня |
| Y | DHL Express Envelope | Документи в конверті |
Технічна реалізація
Авторизація
DHL Express API використовує Basic Auth з API key та API secret:
Код клієнта DHL на PHP (Laravel)
```php class DhlExpressClient { private const BASE_URL = 'https://express.api.dhl.com/mydhlapi';public function __construct( private string $apiKey, private string $apiSecret, private bool $sandbox = false ) { if ($sandbox) { // Sandbox: інший URL // https://express.api.dhl.com/mydhlapi/test } } public function request(string $method, string $path, array $params = []): array { $url = ($this->sandbox ? 'https://express.api.dhl.com/mydhlapi/test' : self::BASE_URL) . $path; $response = Http::withBasicAuth($this->apiKey, $this->apiSecret) ->withHeaders(['Content-Type' => 'application/json']) ->{strtolower($method)}($url, $params); if ($response->clientError()) { $error = $response->json(); throw new DhlApiException( $error['detail'] ?? $error['title'] ?? 'DHL API error', $response->status() ); } return $response->json(); } }
</details> Sandbox credentials: `apiKey = demo-key`, `apiSecret = demo-secret` — для тестування. Реальні ключі отримують в <cite>[DHL Developer Portal](https://developer.dhl.com)</cite>. ### Розрахунок вартості DHL та термінів ```php public function getRates( array $from, // ['countryCode'=>'UA','cityName'=>'Kyiv','postalCode'=>'01001'] array $to, // ['countryCode'=>'DE','cityName'=>'Berlin','postalCode'=>'10115'] float $weightKg, array $dimensions, string $plannedShipDate ): array { $data = $this->request('GET', '/rates', [ 'accountNumber' => config('services.dhl.account_number'), 'originCountryCode' => $from['countryCode'], 'originCityName' => $from['cityName'], 'originPostalCode' => $from['postalCode'], 'destinationCountryCode' => $to['countryCode'], 'destinationCityName' => $to['cityName'], 'destinationPostalCode' => $to['postalCode'], 'weight' => $weightKg, 'length' => $dimensions['length'], 'width' => $dimensions['width'], 'height' => $dimensions['height'], 'plannedShippingDateAndTime' => $plannedShipDate . 'T10:00:00 GMT+03:00', 'isCustomsDeclarable' => true, 'unitOfMeasurement' => 'metric', ]); return collect($data['products'] ?? []) ->map(fn($p) => [ 'product_code' => $p['productCode'], 'product_name' => $p['productName'], 'currency' => $p['totalPrice'][0]['priceCurrency'], 'total_price' => $p['totalPrice'][0]['price'], 'delivery_time'=> $p['deliveryCapabilities']['deliveryTypeCode'], 'delivery_date'=> $p['deliveryCapabilities']['estimatedDeliveryDateAndTime'] ?? null, ]) ->toArray(); } Створення відправлення DHL
public function createShipment(Order $order): array { $payload = [ 'plannedShippingDateAndTime' => now()->addDay()->format('Y-m-d') . 'T10:00:00 GMT+03:00', 'pickup' => [ 'isRequested' => false, // false = самостійна здача на склад DHL ], 'productCode' => $order->dhl_product_code ?? 'P', 'accounts' => [ ['number' => config('services.dhl.account_number'), 'typeCode' => 'shipper'], ], 'customerDetails' => [ 'shipperDetails' => [ 'postalAddress' => [ 'postalCode' => config('services.dhl.shipper_zip'), 'cityName' => config('services.dhl.shipper_city'), 'countryCode' => 'UA', 'addressLine1'=> config('services.dhl.shipper_address'), ], 'contactInformation' => [ 'email' => config('services.dhl.contact_email'), 'phone' => config('services.dhl.contact_phone'), 'companyName' => config('services.dhl.company_name'), 'fullName' => config('services.dhl.contact_name'), ], ], 'receiverDetails' => [ 'postalAddress' => [ 'postalCode' => $order->shipping_zip, 'cityName' => $order->shipping_city, 'countryCode' => $order->shipping_country_code, 'addressLine1'=> $order->shipping_address, ], 'contactInformation' => [ 'email' => $order->recipient_email, 'phone' => $order->recipient_phone, 'fullName' => $order->recipient_name, ], ], ], 'content' => [ 'packages' => [[ 'weight' => $order->total_weight_kg, 'dimensions' => [ 'length' => $order->package_length, 'width' => $order->package_width, 'height' => $order->package_height, ], ]], 'isCustomsDeclarable' => $order->is_international, 'description' => 'E-commerce goods', 'incoterm' => 'DAP', 'unitOfMeasurement' => 'metric', // Митні документи для міжнародних відправлень 'exportDeclaration' => $order->is_international ? $this->buildExportDeclaration($order) : null, ], ]; $response = $this->request('POST', '/shipments', $payload); return [ 'shipment_id' => $response['shipmentTrackingNumber'], 'shipment_number' => $response['shipmentDetails'][0]['shipmentTrackingNumber'], 'label_pdf' => base64_decode($response['documents'][0]['content'] ?? ''), ]; } Митна декларація DHL
Для міжнародних відправлень обов'язкова декларація:
private function buildExportDeclaration(Order $order): array { return [ 'lineItems' => $order->items->map(fn($item, $i) => [ 'number' => $i + 1, 'description' => $item->product->name_en, // англійською 'price' => $item->price, 'priceCurrency' => 'USD', 'grossWeight' => [ 'weight' => $item->product->weight_kg, 'unitOfMeasurement' => 'kg', ], 'quantity' => [ 'value' => $item->quantity, 'unitOfMeasurement' => 'PCS', ], 'manufacturerCountry' => 'CN', 'hsCode' => $item->product->hs_code ?? '6109100000', ])->toArray(), 'invoice' => [ 'number' => 'INV-' . $order->id, 'date' => now()->format('Y-m-d'), 'signedBy' => config('services.dhl.contact_name'), 'function' => 'Seller', 'customerReference' => (string)$order->id, ], 'exportReason' => 'PERMANENT', 'exportReasonType'=> 'PERMANENT', 'placeOfIncoterm' => 'Destination', 'shipmentType' => 'commercial', ]; } Відстеження DHL
public function trackShipment(string $trackingNumber): array { $response = $this->request('GET', '/tracking', [ 'trackingNumber' => $trackingNumber, ]); $shipment = $response['shipments'][0] ?? null; if (!$shipment) { return []; } return [ 'status' => $shipment['status'], 'description' => $shipment['description'], 'location' => $shipment['location']['address']['cityName'] ?? '', 'events' => collect($shipment['events'])->map(fn($e) => [ 'timestamp' => $e['timestamp'], 'location' => $e['location']['address']['cityName'] ?? '', 'description'=> $e['description'], ])->toArray(), 'estimated_delivery' => $shipment['estimatedTimeOfDelivery'] ?? null, ]; } Обмеження та типові помилки
DHL суворо перевіряє адреси отримувачів. Неточний поштовий індекс поверне помилку. Максимальна вага одного місця — 70 кг, розмір сторони — 300 см. Типова помилка — невірний обліковий номер. Ми валідуємо адреси через Google Maps API перед відправкою. У sandbox обов'язково тестуйте кожну функцію. Вартість інтеграції — від $500.
Автоматизація митної декларації
Декларація обов'язкова для всіх міжнародних відправлень DHL Express. Ми автоматизуємо її заповнення: HS-коди підтягуються з бази товарів, опис та вартість формуються на основі замовлення. Це виключає ручне введення та знижує ризик помилок. У sandbox перевірте заповнення декларації перед продакшном.
Що входить у роботу?
- Документація по інтеграції API.
- Ключі доступу до sandbox та продакшну.
- Навчання операторів роботі з замовленнями.
- Технічна підтримка 3 місяці після деплою.
- Гарантія коректної роботи всіх функцій.
Процес роботи
- Аналітика: вивчаємо асортимент, напрямки, обсяг замовлень.
- Проектування: вибираємо продукт DHL, схему відправлень.
- Реалізація: інтеграція API, налаштування митних декларацій.
- Тестування: у sandbox з реальними ключами.
- Деплой: розгортання на бойовому стенді.
Строки
Інтеграція DHL Express для інтернет-магазину — від 5 до 7 робочих днів. Додаткові налаштування митниці — ще 2–3 дні.
Уникнення помилок авторизації
Перевірте, що використовуєте правильний API: DHL Express (Basic Auth) або DHL eCommerce (OAuth 2.0). Переконайтеся, що в запиті є коректні apiKey та apiSecret. У sandbox використовуйте demo-key та demo-secret. Для продакшну – ключі з аккаунту DHL Developer.
Замовте інтеграцію DHL API під ключ за 5 днів. Пишіть нам для оцінки вашого проекту.







