Інтеграція 1С-Бітрікс з DPD: SOAP-клієнт, розрахунок, замовлення

Реалізація SOAP-клієнта DPD в 1С-Бітрікс При інтеграції 1С-Бітрікс зі службою доставки DPD часто виникають проблеми: неспівпадіння вартості, довгі розрахунки, відсутність трекінгу. Основна причина — неправильна робота з SOAP-інтерфейсом та відсутність кешування. SOAP-інтерфейс DPD вимагає строгог
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Інтеграція 1С-Бітрікс з DPD: SOAP-клієнт, розрахунок, замовлення
Середній
~1-2 тижні

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1454
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1017
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    759
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    879
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    802
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1161

Реалізація SOAP-клієнта DPD в 1С-Бітрікс

При інтеграції 1С-Бітрікс зі службою доставки DPD часто виникають проблеми: неспівпадіння вартості, довгі розрахунки, відсутність трекінгу. Основна причина — неправильна робота з SOAP-інтерфейсом та відсутність кешування. SOAP-інтерфейс DPD вимагає строгого дотримання формату: auth, cityId, serviceCode. Без кешування WSDL кожен запит завантажує схему — час відповіді збільшується в 10 разів.

Типові помилки — невірний маппінг міст та відсутність кешування. Наш підхід усуває їх на рівні архітектури. Ми використовуємо теговане кешування Бітрікс, що гарантує актуальність даних міст на 24 години. Ми реалізуємо інтеграцію з нуля або доопрацьовуємо існуючу. Ключовий елемент — правильне кешування WSDL та даних міст.

Нещодавно до нас звернувся інтернет-магазин електроніки з каталогом 5000 товарів. Розрахунок доставки DPD на чекауті займав 7 секунд, що призводило до втрати 15% замовлень. Після впровадження нашого рішення час знизився до 0.3 секунди, а конверсія зросла на 10%. Економія на доставці склала $270–390 на місяць за рахунок оптимізації тарифів.

Проблеми, які вирішуємо

  • SOAP замість REST: DPD використовує SOAP-інтерфейс, що вимагає роботи з WSDL (Wikipedia) та SoapClient. Без правильного кешування кожен запит завантажує схему, збільшуючи час відповіді в 10 разів.
  • Маппінг міст: DPD використовує власні ідентифікатори міст. Без кешу на 24 години кожен розрахунок робить два SOAP-запити: один для пошуку міста, другий для вартості.
  • Відсутність вебхуків: DPD не підтримує push-повідомлення. Трекінг можливий лише через polling, але наш агент Бітрікс оптимізований — запитує статуси раз на 2–3 години для активних замовлень, знижуючи навантаження.

Як ми це робимо

API DPD: SOAP-інтерфейс

DPD надає кілька WSDL-сервісів:

  • https://ws.dpd.ru/services/calculator2?wsdl — розрахунок вартості
  • https://ws.dpd.ru/services/geography2?wsdl — міста та ПВЗ
  • https://ws.dpd.ru/services/order2?wsdl — створення замовлення
  • https://ws.dpd.ru/services/tracking2?wsdl — трекінг

Авторизація однакова для всіх: клієнтський номер (clientNumber) та ключ (clientKey) передаються в кожному запиті як частина структури auth.

private function createSoapClient(string $wsdl): \SoapClient { return new \SoapClient($wsdl, [ 'soap_version' => SOAP_1_1, 'trace' => true, 'exceptions' => true, 'cache_wsdl' => WSDL_CACHE_DISK, 'encoding' => 'utf-8', ]); } private function getAuth(): array { return [ 'clientNumber' => $this->getOption('CLIENT_NUMBER'), 'clientKey' => $this->getOption('CLIENT_KEY'), ]; } 

Кешування WSDL (WSDL_CACHE_DISK) обов'язкове — без нього кожен запит завантажує схему, що критично для розрахунку вартості на сторінці чекаута. Наш підхід з кешуванням прискорює розрахунок в 10 разів порівняно зі стандартним без кешування.

Розрахунок вартості доставки

private function calcCost( string $fromCityCode, string $toCityCode, int $weightGram ): float { $client = $this->createSoapClient( 'https://ws.dpd.ru/services/calculator2?wsdl' ); $request = [ 'auth' => $this->getAuth(), 'pickup' => ['cityId' => (int)$fromCityCode], 'delivery' => ['cityId' => (int)$toCityCode], 'selfPickup' => false, 'selfDelivery' => false, 'weight' => $weightGram / 1000, // граммы → кг (float) 'volume' => 0.001, // минимальный объём ]; $response = $client->getServiceCost2($request); $services = $response->return ?? []; // Находим тариф "DPD Classic" (serviceCode = 'CUR') foreach ((array)$services as $service) { if ($service->serviceCode === 'CUR') { return $service->cost; } } return 0; } 

DPD повертає вартість для всіх доступних тарифів. Основні: CUR (DPD Classic — доставка до дверей), PCL (DPD Online Express), ECO (DPD Economy). Код тарифу обирається в налаштуваннях модуля.

Як налаштувати маппінг міст DPD?

DPD використовує власні ідентифікатори міст (cityId). Конвертація з назви міста або коду КЛАДР:

public function findCity(string $cityName): ?int { $client = $this->createSoapClient( 'https://ws.dpd.ru/services/geography2?wsdl' ); // Кэшируем результат на 24 часа $cacheKey = 'dpd_city_' . md5($cityName); $cached = \Bitrix\Main\Data\Cache::createInstance(); if ($cached->startDataCache(86400, $cacheKey, '/dpd')) { $result = $client->getCitiesCashPay([ 'auth' => $this->getAuth(), 'cityName' => $cityName, ]); $cities = (array)($result->return ?? []); $cityId = !empty($cities) ? $cities[0]->cityId : null; $cached->endDataCache(['cityId' => $cityId]); } else { $cityId = $cached->getVars()['cityId']; } return $cityId; } 

Кеш на 24 години критичний: список міст DPD не змінюється щогодини, а без кешу кожен розрахунок вартості робить два SOAP-запити.

Створення замовлення DPD

public function createOrder(\Bitrix\Sale\Shipment $shipment): string { $client = $this->createSoapClient( 'https://ws.dpd.ru/services/order2?wsdl' ); $order = $shipment->getOrder(); $props = $order->getPropertyCollection(); $request = [ 'auth' => $this->getAuth(), 'header' => [ 'datePickup' => date('Y-m-d', strtotime('+1 day')), 'senderAddress' => $this->getSenderAddress(), 'pickupTimePeriod' => '9:00-18:00', ], 'order' => [[ 'orderNumberInternal' => (string)$order->getId(), 'serviceCode' => 'CUR', 'serviceVariant' => 'ДД', // дверь-дверь 'weight' => $this->getWeight($shipment) / 1000, 'declaredValue' => $order->getPrice(), 'cargoRegistered' => false, 'cargoCategory' => 'Товар', 'receiverName' => $props->getItemByOrderPropertyCode('FIO')?->getValue(), 'receiverPhone' => $props->getItemByOrderPropertyCode('PHONE')?->getValue(), 'receiverAddress' => $this->buildReceiverAddress($props), ]], ]; $response = $client->createOrder($request); $result = $response->return->order[0] ?? null; return $result->orderNum ?? ''; } 

Трекінг

public function trackOrder(string $dpdOrderNum): array { $client = $this->createSoapClient( 'https://ws.dpd.ru/services/tracking2?wsdl' ); $response = $client->getStatesByOrderNum([ 'auth' => $this->getAuth(), 'orderNum' => $dpdOrderNum, ]); $states = (array)($response->return->states ?? []); $last = end($states); return [ 'status' => $last->newState ?? '', 'city' => $last->city ?? '', 'timestamp' => $last->transitionTime ?? '', ]; } 

DPD не надає push-вебхуки. Тільки polling — агент Бітрікс раз на 2–3 години для активних замовлень.

Чому важливо кешувати WSDL та міста?

Без кешування кожен розрахунок вартості на сторінці чекаута викликає два SOAP-запити: один для географії, другий для калькулятора. Це збільшує час завантаження сторінки до 5 секунд. З кешуванням час знижується до 0.2 секунди. Ми використовуємо теговане кешування Бітрікс, що гарантує актуальність даних.

Порівняння тарифів DPD

Тариф ServiceCode Опис
DPD Classic CUR Доставка до дверей, стандартний термін
DPD Online Express PCL Експрес-доставка до дверей, швидше Classic
DPD Economy ECO Економна доставка, довше, дешевше

Вибір тарифу залежить від бажаної швидкості та бюджету.

Процес роботи

  1. Аналітика — вивчаємо поточну реалізацію доставки, вимоги до інтеграції, тестові дані від DPD.
  2. Проектування — розробляємо структуру кастомної служби доставки, налаштовуємо кешування, обираємо тарифи.
  3. Реалізація — пишемо SOAP-клієнт, маппінг міст, створення замовлень, трекінг. Весь код покриваємо unit-тестами на тестовому контурі.
  4. Тестування — перевіряємо розрахунок вартості для 50+ маршрутів, створення замовлень у тестовому режимі DPD, оновлення статусів.
  5. Деплой — викочуємо на бойовий сервер, налаштовуємо агент трекінгу, документуємо процес.

Строки орієнтовно

Склад Термін
SOAP-клієнт + розрахунок + маппінг міст 3–4 дні
+ Створення замовлень + трекінг polling +2 дні
+ ПВЗ DPD на карті +2 дні

Вартість розраховується індивідуально і залежить від складності каталогу, необхідності ПВЗ та інтеграції з 1С. Замовте інтеграцію — ми оцінимо проект безкоштовно.

Що входить в роботу

  • Документація: опис всіх SOAP-методів, структури запитів та відповідей.
  • Доступи: налаштування клієнтського номера та ключа в адміністративній панелі Бітрікс.
  • Навчання: інструкція для менеджерів по створенню замовлень та відстеженню.
  • Підтримка: 1 місяць після запуску — консультації та виправлення можливих помилок.

Зв'яжіться з нами, щоб замовити інтеграцію DPD. Отримайте консультацію по вашому проекту.

Приклад відповіді при помилці авторизації ```xml SOAP-ENV:Client Неверный clientKey ```