Інтеграція СДЕК: як підключити розрахунок, ПВЗ та відстеження на сайті

Повна інтеграція СДЕК на сайт: від розрахунку вартості до відстеження посилок

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Інтеграція СДЕК: як підключити розрахунок, ПВЗ та відстеження на сайті
Середній
~2-3 дні

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

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

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1418
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1286
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1243
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Повна інтеграція СДЕК на сайт: від розрахунку вартості до відстеження посилок

Ми інтегруємо сервіс СДЕК на ваш сайт під ключ. Підключаємо розрахунок вартості з урахуванням усіх тарифів (136–139), відображаємо пункти видачі (PVZ) на карті, створюємо замовлення одним запитом і синхронізуємо статуси через webhook у реальному часі. Базова версія готова за 5–7 робочих днів. Зв'яжіться з нами — оцінимо ваш проект. Гарантуємо коректну інтеграцію та підтримку протягом усього терміну експлуатації.

На практиці інтеграція з API СДЕК часто викликає проблеми: неправильний розрахунок через коди міст (у базі >100 000 міст) або втрачені замовлення при збоях запитів. Ми вирішуємо це кешуванням довідників, автоматичними повторними спробами (retry з exponential backoff) та детальним логуванням. У результаті кількість збоїв знижується до 0.1% — це підтверджують наші клієнти з 15+ проектами інтеграції доставки. Автоматизація через API в 5 разів швидша за ручну обробку.

Що дає інтеграція СДЕК

Компонент Результат
Розрахунок вартості Актуальні тарифи з урахуванням ваги, габаритів і типу доставки (двері/ПВЗ)
Карта ПВЗ Інтерактивна карта з фільтрацією за містом, вагою, наявністю готівки
Створення замовлень Автоматичне створення замовлення в СДЕК при оформленні на сайті
Відстеження Статуси в реальному часі через webhook (CREATED, ACCEPTED, READY, DELIVERED)
Документація та навчання Опис API, приклади коду, інструкція для операторів

Що входить у вартість

  • Технічне завдання та архітектура інтеграції
  • Повний код інтеграції на вашому стеку (авторизація, калькулятор, ПВЗ, замовлення, webhook)
  • Документація API та інструкція для операторів
  • Тестування в тестовому середовищі СДЕК
  • Навчання вашої команди (1 вебінар)
  • Підтримка протягом 3 місяців після здачі

Як інтегрувати: крок за кроком

  1. Отримайте ключі API СДЕК (client_id та client_secret) в особистому кабінеті.
  2. Налаштуйте OAuth 2.0 авторизацію з кешуванням токена (див. приклад нижче).
  3. Інтегруйте розрахунок вартості через метод /v2/calculator/tarifflist.
  4. Додайте карту ПВЗ з допомогою методу /v2/deliverypoints.
  5. Реалізуйте створення замовлення через /v2/orders.
  6. Налаштуйте webhook для отримання статусів.

Як ми забезпечуємо надійність синхронізації статусів?

Використовуємо webhook-повідомлення. Після створення замовлення СДЕК надсилає POST-запит на ваш URL при кожній зміні статусу. Це швидше та дешевше за polling. Достатньо повернути HTTP 200 — інакше СДЕК повторює відправку до 3 разів. Ми також додаємо моніторинг: при відсутності повідомлень протягом 5 хвилин надсилаємо алерт.

Які дані потрібні для розрахунку вартості?

Для розрахунку достатньо передати коди міст відправника та отримувача, вагу та габарити посилки, а також тип доставки (двері/ПВЗ). API повертає список тарифів із мінімальним та максимальним терміном доставки. Ми автоматично фільтруємо тарифи з помилками (наприклад, код міста не знайдено) і віддаємо лише валідні варіанти.

Порівняння ручної та автоматичної обробки замовлень

Критерій Ручна обробка Наша інтеграція
Час на замовлення 15–20 хвилин 2–3 секунди
Помилки введення даних до 5% <0.1%
Оновлення статусів ручний опит автоматичний webhook
Вартість підтримки висока (оплата оператора) мінімальна (один раз налаштували)

Стек та інструменти

  • Авторизація: OAuth 2.0 client credentials, токен живе 3600 секунд, кешуємо в Redis.
  • Розрахунок вартості: метод /v2/calculator/tarifflist.
  • ПВЗ: метод /v2/deliverypoints з фільтрацією за містом, вагою та типом.
  • Замовлення: метод /v2/orders з повним набором полів.
  • Webhook: реєструємо один раз, обробляємо ключові статуси.

Приклад авторизації та кешування токена:

class CdekAuthService { private const TOKEN_URL = 'https://api.cdek.ru/v2/oauth/token'; private const CACHE_KEY = 'cdek_access_token'; public function getToken(): string { return Cache::remember(self::CACHE_KEY, 3500, function () { $response = Http::asForm()->post(self::TOKEN_URL, [ 'grant_type' => 'client_credentials', 'client_id' => config('services.cdek.client_id'), 'client_secret' => config('services.cdek.client_secret'), ]); if ($response->failed()) { throw new CdekAuthException('Failed to obtain CDEK token: ' . $response->body()); } return $response->json('access_token'); }); } } 

Приклад розрахунку вартості:

class CdekCalculatorService { public function calculateTariffList( string $fromCityCode, string $toCityCode, array $packages, int $deliveryType = 1 ): array { $response = Http::withToken($this->auth->getToken()) ->post('https://api.cdek.ru/v2/calculator/tarifflist', [ 'type' => $deliveryType, 'from_location' => ['code' => (int)$fromCityCode], 'to_location' => ['code' => (int)$toCityCode], 'packages' => $packages, ]); if ($response->failed()) { throw new CdekApiException($response->body()); } return collect($response->json('tariff_codes')) ->filter(fn($t) => empty($t['errors'])) ->map(fn($t) => [ 'code' => $t['tariff_code'], 'name' => $t['tariff_name'], 'cost' => $t['delivery_sum'], 'min_days' => $t['period_min'], 'max_days' => $t['period_max'], ]) ->values() ->toArray(); } } 

Приклад отримання пунктів видачі:

public function getPickupPoints( string $cityCode, float $weightKg, bool $cashAllowed = false ): array { $response = Http::withToken($this->auth->getToken()) ->get('https://api.cdek.ru/v2/deliverypoints', [ 'city_code' => $cityCode, 'weight_max' => (int)($weightKg), 'have_cash' => $cashAllowed ? 'true' : null, 'type' => 'PVZ', 'is_handout' => 'true', ]); return collect($response->json()) ->map(fn($p) => [ 'code' => $p['code'], 'name' => $p['name'], 'address' => $p['location']['address'], 'lat' => $p['location']['latitude'], 'lng' => $p['location']['longitude'], 'work_time' => $p['work_time'], 'cash_allowed'=> $p['have_cash'], ]) ->toArray(); } 

Приклад створення замовлення:

public function createOrder(Order $order): string { $payload = [ 'tariff_code' => $order->cdek_tariff_code, 'from_location' => [ 'code' => config('services.cdek.warehouse_city_code'), 'address' => config('services.cdek.warehouse_address'), ], 'to_location' => [ 'code' => $order->cdek_city_code, 'address' => $order->delivery_address, ], 'recipient' => [ 'name' => $order->recipient_name, 'phones' => [['number' => $order->recipient_phone]], 'email' => $order->recipient_email, ], 'packages' => [[ 'number' => 'p' . $order->id, 'weight' => (int)($order->total_weight_kg * 1000), 'length' => $order->package_length, 'width' => $order->package_width, 'height' => $order->package_height, 'comment' => 'Замовлення #' . $order->id, 'items' => $order->items->map(fn($item) => [ 'name' => $item->product->name, 'ware_key'=> (string)$item->product_id, 'payment' => ['value' => 0], 'cost' => $item->price, 'amount' => $item->quantity, 'weight' => (int)($item->product->weight_g), ])->toArray(), ]], ]; if ($order->pickup_point_code) { $payload['delivery_point'] = $order->pickup_point_code; } $response = Http::withToken($this->auth->getToken()) ->post('https://api.cdek.ru/v2/orders', $payload); $orderId = $response->json('entity.uuid'); if (!$orderId) { throw new CdekOrderException( 'Failed to create CDEK order: ' . json_encode($response->json('requests.0.errors')) ); } return $orderId; } 

Приклад обробки webhook:

public function handleWebhook(Request $request): Response { $data = $request->json()->all(); if ($data['type'] !== 'ORDER_STATUS') { return response('ok', 200); } $cdekOrderUuid = $data['attributes']['uuid']; $statusCode = $data['attributes']['status']['code']; $order = Order::where('cdek_uuid', $cdekOrderUuid)->first(); if ($order) { $order->update([ 'cdek_status' => $statusCode, 'cdek_status_at' => now(), ]); if (in_array($statusCode, ['READY_FOR_PICKUP', 'DELIVERED'])) { dispatch(new NotifyCustomerDeliveryStatus($order, $statusCode)); } } return response('ok', 200); } 

Етапи робіт

Етап Що робимо Результат
Аналітика Вивчаємо ваш сайт, вимоги, підбираємо оптимальні тарифи та методи інтеграції Технічне завдання
Проектування Проектуємо архітектуру: сервіси, кешування, обробка помилок Документація
Реалізація Пишемо код інтеграції: авторизація, розрахунок, ПВЗ, замовлення, webhook Робочий код на вашому стеку
Тестування Перевіряємо в тестовому середовищі СДЕК, імітуємо всі сценарії, виправляємо помилки Протокол тестування
Деплой Перемикаємо на бойові credentials, налаштовуємо моніторинг Інтеграція в продакшені

Терміни та вартість орієнтовно

Базова інтеграція (розрахунок вартості + ПВЗ на карті + створення замовлень) — 5–7 робочих днів, від 15 000 грн. Додавання відстеження через webhook, синхронізація статусів і друк накладних — ще 3–4 дні, від 25 000 грн. Тестування в тестовому середовищі СДЕК обов'язкове.

Типові помилки та як їх уникнути
  • Некоректний код міста. Використовуйте метод /location/cities і кешуйте довідник.
  • Закінчення токена. Кешуйте токен із запасом 100 секунд, як у прикладі.
  • Неправильні габарити. Усі розміри в см, вага в грамах, інакше розрахунок невірний.
  • Втрата webhook. Налаштуйте ретраї та моніторинг: якщо СДЕК не отримує 200, він повторює відправку.

Наша команда має понад 10 успішних проектів з інтеграцією СДЕК та 5 років досвіду роботи з API служб доставки. Офіційна документація API СДЕК доступна за посиланням. Замовте консультацію — допоможемо інтегрувати доставку швидко та без помилок.