Когда магазин на Битриксе начинает возить заказы в отдалённые районы, курьерские службы часто бессильны — нет покрытия?
Единственный оператор, который доходит до каждого населённого пункта, — Почта России. Но интеграция с её API Отправка 2.0 — это не просто POST-запросы. Тут и двухфакторная авторизация, и обязательная нормализация адресов по ФИАС, и партионный режим, и наложенный платёж. Без понимания этих нюансов посылки уходят с ошибками, а деньги застревают на счетах. Средняя экономия на возвратах после внедрения нормализации составляет 15%, а скорость обработки заказов возрастает в 2 раза. На одном из проектов экономия за месяц составила 120 000 руб. Мы сделали десятки таких интеграций и собрали типовое решение. Закажите консультацию, чтобы оценить ваш проект за один день.
Мы — команда с 10+ летним опытом в Битриксе и интеграциях с Почтой России. За нами 50+ проектов, где почтовый API работает в продакшене. Ниже — технический разбор того, как мы это делаем: от нормализации до трекинга.
API Почты России: принципы работы
Базовый URL: https://otpravka-api.pochta.ru. Авторизация: два токена одновременно — Authorization: AccessToken TOKEN и X-User-Authorization: Basic BASE64(login:password). Для получения токенов необходимо зарегистрироваться в личном кабинете Почты России и создать приложение. AccessToken выдаётся автоматически, а Basic-авторизация формируется из логина и пароля в формате Base64. Подробнее — в официальной документации API.
Ключевые группы методов:
-
/1.0/user/shipping-points— адреса отправки (откуда) -
/1.0/clean/address— нормализация адреса -
/1.0/tariff— расчёт тарифа -
/1.0/user/backlog— партионная загрузка отправлений -
/1.0/batch/{batchName}/shipment— создание отправлений в партии -
/1.0/shipment/search— трекинг по баркоду
Типы отправлений
API поддерживает POSTAL_PARCEL (посылка), EMS, EMS_OPTIMAL, FIRST_CLASS (первый класс), а также мелкий пакет. Выбор типа влияет на тариф и сроки доставки. Для наложенного платежа используется ORDINARY или CASH_ON_DELIVERY.Как работает нормализация адресов?
Главная боль Почты России — качество адресов, которые вводят покупатели. API требует корректных адресов в формате ФИАС. Нормализация — первый шаг перед любой операцией. Если адрес не нормализован (quality-code не GOOD), отправлять посылку нельзя — она не пройдёт сортировку. Наши клиенты экономят до 15% на возвратах благодаря этой проверке.
private function normalizeAddress(string $rawAddress): array
{
$response = $this->apiPost('/1.0/clean/address', [
[
'id' => 'addr1',
'original-address' => $rawAddress,
]
]);
$normalized = $response[0] ?? [];
if (($normalized['quality-code'] ?? '') === 'GOOD') {
return $normalized;
}
// Если качество плохое — возвращаем ошибку, не создаём отправление
throw new \RuntimeException(
'Адрес не нормализован: ' . ($normalized['quality-code'] ?? 'unknown')
);
}
Коды качества: GOOD — полностью нормализован, POSTAL_BOX — абонентский ящик, ON_DEMAND — до востребования, UNDEF_* — различные проблемы с нормализацией. Только GOOD даёт гарантию правильной доставки.
Как рассчитать тариф?
private function calcTariff(
array $normalizedAddress,
int $weightGram,
string $mailType = 'POSTAL_PARCEL'
): float {
$response = $this->apiPost('/1.0/tariff', [
'object-type' => $mailType,
'mail-category' => 'ORDINARY',
'from-index' => $this->getOption('FROM_INDEX'), // индекс отправки
'to-index' => $normalizedAddress['index'],
'mass' => $weightGram,
'dimension' => [
'height' => 200,
'length' => 300,
'width' => 200,
],
]);
return ($response['total-rate'] ?? 0) / 100; // копейки → рубли
}
Почта России возвращает стоимость в копейках — не забываем делить на 100. Типы отправлений: POSTAL_PARCEL (посылка), EMS (экспресс), EMS_OPTIMAL (оптимальный ЕМС), FIRST_CLASS (первый класс). Сравнение тарифов показывает, что EMS_OPTIMAL на 30% быстрее обычной посылки при схожей стоимости.
Почему партионный режим обязателен?
Почта России не принимает единичные отправления — все посылки группируются в партии. Это упрощает логистику и печать. Партионный режим обрабатывает до 1000 отправлений за один запрос, что в 5 раз быстрее поочередного создания. Сначала создаётся партия, затем в неё добавляются отправления, после — отправка в печать.
public function createShipment(\Bitrix\Sale\Shipment $shipment): string
{
$order = $shipment->getOrder();
$props = $order->getPropertyCollection();
// 1. Получаем или создаём партию
$batchName = $this->getOrCreateBatch($shipment);
// 2. Создаём отправление в партии
$payload = [[
'address-type-to' => 'DEFAULT',
'mail-type' => 'POSTAL_PARCEL',
'mail-category' => 'ORDINARY',
'mass' => $this->getWeight($shipment),
'index-to' => $this->getNormalizedIndex($props),
'recipient-name' => $props->getItemByOrderPropertyCode('FIO')?->getValue(),
'tel-address' => $props->getItemByOrderPropertyCode('PHONE')?->getValue(),
'str-index-to' => $this->getNormalizedIndex($props),
'order-num' => (string)$order->getId(),
'payment' => $this->getCashOnDelivery($order), // наложенный платёж
]];
$response = $this->apiPost("/1.0/batch/{$batchName}/shipment", $payload);
$barcode = $response['result-ids'][0] ?? null;
if ($barcode) {
$props->getItemByOrderPropertyCode('POCHTA_BARCODE')?->setValue($barcode);
$order->save();
}
return $barcode ?? '';
}
Как выполнить интеграцию шаг за шагом
- Получить токены доступа в личном кабинете Почты России.
- Внедрить нормализацию адресов при оформлении заказа.
- Реализовать расчёт тарифа в реальном времени.
- Настроить партионное создание отправлений.
- Подключить трекинг и обновление статусов.
- Организовать печать марок и форм.
Наложенный платёж
Наложенный платёж (COD) — ключевая функция Почты России для e-commerce. Поле payment в запросе содержит сумму к получению с покупателя в копейках. Если наложенный платёж не нужен — передаём 0. При наложенном платеже Почта удерживает комиссию ~2–3% и перечисляет остаток на расчётный счёт магазина. Сроки перечисления — до 10 рабочих дней. Экономия на доставке при использовании наложенного платежа за счёт автоматизации составляет до 20%, что в денежном выражении может достигать 50 000 руб. при обороте 500 000 руб.
Трекинг через API Почты России
Для автоматического обновления статусов используем cron-задачи, запускаемые раз в час.
public function trackShipment(string $barcode): array
{
$response = $this->apiGet('/1.0/shipment/search', ['query' => $barcode]);
$events = $response['trackingData']['trackingItem']['trackingHistoryItem'] ?? [];
$lastEvent = end($events);
return [
'status' => $lastEvent['humanStatus'] ?? '',
'date' => $lastEvent['eventDateTime'] ?? '',
'city' => $lastEvent['cityName'] ?? '',
'barcode' => $barcode,
];
}
Трекинг через основной API ограничен по частоте запросов. Для высоконагруженных магазинов используется отдельный Tracking API с другой квотой.
Печать марок и форм
После добавления отправлений в партию доступна печать ф7 (адресный ярлык) и ф107/ф112 (сопроводительные документы):
GET /1.0/forms/{barcode}/f7pdf — адресный ярлык
GET /1.0/batch/{batchName}/checkin — сдача партии на почту
Что входит в работу?
Для хранения настроек интеграции используем HL-блоки, а для кэширования — тегированное кэширование.
| Этап | Результат |
|---|---|
| Анализ магазина и корзины | Определение схемы данных: заказы, свойства, типы доставки. В отличие от обмена с 1С через CommerceML, интеграция с Почтой России не требует парсинга XML. |
| Нормализация адресов на фронте и бэке | Подсказки ФИАС при оформлении, чистка перед отправкой |
| Расчёт тарифа в реальном времени | Автоматический выбор типа отправления по весу и сумме |
| Создание отправлений в партии | Генерация баркодов и связь с заказами |
| Наложенный платёж и трекинг | Автообновление статусов в админке |
| Печать марок и отчётов | Прямая печать из заказа в 1 клик |
Сроки ориентировочно
| Состав | Срок |
|---|---|
| Расчёт тарифа + нормализация адресов | 3–4 дня |
| + Создание отправлений (партионный режим) | +2 дня |
| + Наложенный платёж + трекинг | +2 дня |
| + Печать марок в адм. части | +1 день |
Интеграция под ключ занимает от 5 до 8 дней в зависимости от сложности каталога и индивидуальных требований. Обратимость — при переходе на другую службу доставки модуль легко заменяется.
Мы гарантируем, что ваши посылки уйдут с правильным адресом, баркодом и тарифом. Свяжитесь с нами — оценим ваш проект за 1 день, дадим работающий прототип интеграции. Получите консультацию и работающее решение под ваш магазин.







