Интеграция 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 Appointment Booking Widget for a Medical Center
    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 для компании ТЕХНОТОРГКОМПЛЕКС
    1162

Реализация 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 ```