ПЭК — это межтерминальная транспортная компания (LTL), а не курьерская служба, поэтому «коробочного» обработчика в 1С-Битрикс для неё нет. Подключение сводится к собственной службе доставки, которая обращается к API личного кабинета ПЭК и считает стоимость перевозки сборного груза по весу, объёму и паре городов.
Чем ПЭК отличается от курьерских служб
ПЭК возит сборные грузы между терминалами: клиент забирает заказ на терминале в своём городе либо заказывает довоз до адреса отдельной услугой. Это принципиально меняет логику расчёта по сравнению с СДЭК или курьером «до двери».
- Тариф зависит не только от веса, но и от объёма (плотности груза) — крупногабаритная лёгкая коробка считается по объёмному весу.
- Маршрут строится терминал-терминал, а адресный забор и доставка — это дополнительные платные услуги.
- В API оперируют не населёнными пунктами КЛАДР, а внутренними кодами филиалов ПЭК.
Доступ к API и авторизация
Расчётный API ПЭК открывается по заявке в личном кабинете kabinet.pecom.ru. После активации вы получаете пару учётных данных для авторизации.
| Параметр | Назначение |
|---|---|
apiLogin | Логин доступа к API (обычно e-mail учётной записи ЛК) |
apiKey | Секретный ключ, передаётся в заголовке Basic-авторизации |
Запросы уходят методом POST с телом в JSON на базовый адрес API калькулятора. Авторизация — HTTP Basic (логин:ключ в заголовке Authorization). Ключевой метод расчёта — calculator/calculate; справочник филиалов и городов отдаётся отдельными методами (branches/all, branches/find).
apiKey в настройках службы доставки или в .settings.php и никогда не отдавайте его на фронтенд — расчёт должен идти только через серверную часть.Создание собственной службы доставки
В Битрикс с версии модуля sale службы доставки — это классы-наследники Bitrix\Sale\Delivery\Services\Base с профилями (наследники Bitrix\Sale\Delivery\Services\Config). Обработчик регистрируется через событие onSaleDeliveryHandlersClassNamesBuildList.
- В модуле (или в
local/php_interface/init.php) подпишитесь на событие и верните путь к классу и его имя. - Опишите класс службы: в
getClassTitle()иgetClassDescription()— название «ПЭК», вgetConfigStructure()— поляapiLoginиapiKey. - Реализуйте профиль с методом
calculateConcrete(Shipment $shipment), который возвращаетBitrix\Sale\Delivery\CalculationResult.
Внутри calculateConcrete вы собираете параметры отправления из корзины и заказа, вызываете API ПЭК и кладёте цену в $result->setDeliveryPrice(). После установки службы она появится в Магазин → Настройки → Службы доставки как обычный способ доставки.
Формирование запроса на расчёт
Метод calculator/calculate ждёт города отправления и назначения (коды филиалов ПЭК) и список мест груза. Габариты берите из товаров: свойства веса и размеров ведите в каталоге, иначе расчёт вернёт объёмный вес по умолчанию и цена будет завышена.
senderCityId/receiverCityId— коды филиалов ПЭК для города склада и города клиента;cargos— массив мест:length,width,height(в метрах) иweight(в кг) на каждое место;isOpenCarSender/isDayByDayи флаги допуслуг — забор от адреса, довоз до двери, страхование.
Город клиента определяйте по местоположению заказа: из $shipment получите свойство «Местоположение», по КЛАДР найдите название города и сопоставьте его с филиалом через branches/find. Результат сопоставления кэшируйте.
$shipment->getShipmentItemCollection(): суммируйте вес и объём позиций. Если у части товаров нет размеров, задайте разумные значения по умолчанию, чтобы объёмный вес не «взрывал» цену.Сопоставление города клиента с филиалом
Самое хрупкое место интеграции — превратить произвольный адрес покупателя в код филиала ПЭК. Битрикс хранит местоположения в модуле sale (таблица местоположений и КЛАДР-коды), а ПЭК оперирует своим справочником.
- Один раз выгрузите справочник филиалов методом
branches/allи сохраните в таблицу-справочник модуля или в HL-блок. - Свяжите КЛАДР-код города Битрикса с
branchIdПЭК — по названию города и региону. - Для городов без прямого терминала используйте ближайший филиал плюс услугу довоза; помечайте такие направления отдельно.
Если сопоставление не найдено, не роняйте оформление заказа: верните из calculateConcrete результат с ошибкой ($result->addError()) и понятным текстом, чтобы Битрикс скрыл эту службу, а не показал нулевую цену.
Кэширование, таймауты и обработка ошибок
Расчёт дёргается на каждом шаге оформления и при пересчёте корзины — прямой вызов API на каждый чих замедлит checkout и упрётся в лимиты ПЭК.
- Кэшируйте ответ по ключу «города + суммарные габариты + набор услуг» через
Bitrix\Main\Data\Cacheна 10–30 минут. - Ставьте таймаут HTTP-клиента (
Bitrix\Main\Web\HttpClient) в 3–5 секунд, чтобы недоступность API не вешала корзину. - Логируйте сырые запрос и ответ в файл или в журнал событий (
AddEventToLog) — при спорах о цене это спасает.
Тестирование и запуск
Перед публикацией прогоните типовые сценарии на тестовых заказах, сверяя цену с калькулятором в личном кабинете ПЭК.
- Город с прямым терминалом, лёгкий компактный груз — базовый тариф.
- Крупногабаритный лёгкий товар — проверьте, что считается объёмный вес.
- Город без терминала — доставка с довозом до адреса и корректной надбавкой.
- Недоступность API (отключите ключ) — служба должна скрыться, а не показать 0 ₽.
Ограничьте службу разумными рамками через ограничения доставки Битрикса: по весу, по сумме заказа и по группам местоположений, чтобы ПЭК не предлагался там, где выгоднее курьер или самовывоз.
Итог
Подключение ПЭК к магазину на 1С-Битрикс — это не установка модуля, а интеграционная задача: собственная служба доставки на API личного кабинета, аккуратный сбор габаритов из каталога, сопоставление городов с филиалами и защита от сбоев кэшем, таймаутами и фолбэком. Сделанная один раз правильно, она годами считает сборные грузы без ручного вмешательства.
Если нужен рабочий обработчик под вашу конфигурацию каталога и склада, мы в B2Bsite проектируем и внедряем такие интеграции доставки под ключ и берём их на сопровождение — с логированием, мониторингом и обновлением справочников филиалов.
Частые вопросы
Есть ли готовый модуль ПЭК для 1С-Битрикс?
Стабильного «коробочного» решения под все редакции нет. На практике надёжнее реализовать собственную службу доставки на официальном API личного кабинета ПЭК.
Как получить доступ к API ПЭК?
Доступ активируется по заявке в личном кабинете kabinet.pecom.ru. После активации вы получаете apiLogin и apiKey для Basic-авторизации запросов.
Почему расчёт ПЭК зависит от объёма, а не только от веса?
ПЭК возит сборные грузы и считает по большему из фактического и объёмного веса. Поэтому крупные лёгкие коробки стоят дороже, чем следует из одного веса.
Как определить город клиента для API?
Из свойства местоположения заказа берётся КЛАДР-код, по нему находится город и сопоставляется с кодом филиала ПЭК через справочник branches. Результат стоит кэшировать.
Что делать, если в городе клиента нет терминала ПЭК?
Использовать ближайший филиал и добавить услугу довоза до адреса, либо скрыть службу для этого направления. Показывать нулевую цену нельзя.
Откуда брать вес и габариты для расчёта?
Из свойств товаров каталога, суммируя по позициям корзины. Если размеры не заданы, расчёт уйдёт по объёмному весу по умолчанию и завысит стоимость.
Как не замедлить оформление заказа частыми запросами?
Кэшировать ответы API по городам и габаритам на 10–30 минут и ставить таймаут HTTP-клиента в несколько секунд. Так недоступность API не подвесит корзину.
Как ограничить, где предлагается доставка ПЭК?
Через штатные ограничения службы доставки Битрикса: по весу, сумме заказа и группам местоположений. Это отсекает направления, где выгоднее курьер или самовывоз.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.