Многие интернет-магазины на 1С-Битрикс сталкиваются с проблемой: вручную обновлять цены, остатки и карточки товаров от нескольких поставщиков — это часы рутинной работы каждый день. При этом данные быстро устаревают, а ошибки ручного ввода приводят к потерям. Мы предлагаем автоматизированное решение: интеграцию с API поставщиков, которая работает стабильно и без вашего участия. Наш опыт показывает, что грамотная синхронизация снижает нагрузку на менеджеров и повышает точность данных до 99%. Свяжитесь с нами — оценим объём работ и подберём оптимальную архитектуру для вашего проекта.
API поставщика — лучший способ получать данные: актуальность близка к реальному времени, нет рисков парсинга, можно запрашивать только изменённые позиции. Сложность в другом: каждый поставщик проектировал своё API самостоятельно, и интеграция с каждым — отдельный проект с уникальными особенностями. Мы гарантируем, что решение будет масштабируемым и легко адаптируемым под новых поставщиков.
Как устроена интеграция с API поставщиков?
Типичные архитектуры API поставщиков
- REST JSON — наиболее распространён. Пагинация бывает через
page/per_page,offset/limitили курсор (next_cursor). Важно обрабатывать все три варианта в своём клиенте. - SOAP/XML-RPC — встречается у старых систем. Работаем через PHP
SoapClient. - FTP с JSON/XML-дампами — формально API, но по сути фид. Поставщик обновляет файл на FTP каждые N часов.
- Webhook от поставщика — редкость, но идеальный вариант: поставщик сам присылает изменения.
Слой абстракции для нескольких поставщиков
Если поставщиков несколько — не пишем отдельные интеграции «как получится». Определяем единый контракт:
interface SupplierClientInterface {
public function getProducts(int $page, int $limit): array;
public function getProduct(string $externalId): ?array;
public function getUpdatedSince(\DateTime $since): array;
public function getStocks(): array;
public function getPrices(): array;
}
Каждый поставщик реализует этот интерфейс. Оркестратор работает только с интерфейсом — добавление нового поставщика не требует изменений в логике импорта.
Инкрементальная синхронизация
Полный перебор всего каталога при каждом запуске — неэффективно для больших объёмов. Большинство API поддерживают получение изменений с момента последней синхронизации:
$lastSync = $this->getLastSyncTime($supplierId);
$changes = $client->getUpdatedSince($lastSync);
Храним время последней успешной синхронизации в Highload-блоке или в кастомной таблице. При ошибке — не обновляем время, следующий запуск повторит проблемный период.
Обработка rate limits
API поставщиков часто имеют ограничения на количество запросов: 100 req/min, 1000 req/hour. Нарушение ведёт к бана IP или временной блокировке.
Реализация rate limiter:
Пример RateLimiter
```php class RateLimiter { private int $requestsPerMinute; private array $timestamps = [];public function throttle(): void {
$this->timestamps[] = microtime(true);
$this->timestamps = array_filter($this->timestamps, fn($t) => $t > microtime(true) - 60);
if (count($this->timestamps) >= $this->requestsPerMinute) {
$waitTime = 60 - (microtime(true) - $this->timestamps[0]);
usleep((int)($waitTime * 1_000_000));
}
}
}
</details>
### Что даёт единый интерфейс для работы с разными поставщиками?
Единый интерфейс `SupplierClientInterface` позволяет добавлять нового поставщика без изменения кода импорта. Это снижает время на интеграцию и уменьшает риски ошибок. В нашей практике был случай, когда клиенту потребовалось подключить трёх поставщиков электрокомпонентов — ниже описан этот опыт.
### Трансформация данных API в структуру Битрикса
API возвращает данные в своей схеме — нужен маппинг в поля инфоблока. Конфигурируемый маппинг (хранится в Highload-блоке, редактируется в административной части) позволяет менять связи полей без деплоя:
| Поле API | Поле Битрикса | Трансформация |
|----------|---------------|---------------|
| `product_name` | `NAME` | trim() |
| `sku` | `XML_ID` | as-is |
| `price_rub` | `CATALOG_PRICE_1` | float |
| `qty_available` | `CATALOG_QUANTITY` | int |
| `category_path` | `IBLOCK_SECTION_ID` | маппинг разделов |
### Кейс: интеграция с 3 поставщиками электрокомпонентов
Этот кейс из нашей практики. **Задача:** три поставщика, REST API, суммарно 85 000 SKU, обновление каждые 2 часа.
**Проблемы:**
- Поставщик А: rate limit 200 req/min, нет endpoint для инкрементальных обновлений — полная выгрузка каждый раз
- Поставщик Б: OAuth2 токены истекают через 1 час — нужен refresh-механизм
- Поставщик В: пагинация через курсор, курсор невалиден через 30 мин — нельзя прерывать
**Решение для А:** параллельный запрос к API в 3 потока, полный цикл 85 000 позиций за 35 минут.
**Решение для Б:** фоновое обновление токена за 5 минут до истечения, хранение в Redis.
**Решение для В:** синхронный последовательный обход, lock на время обхода.
**Результат:** система работает стабильно, среднее отставание данных от поставщика — 2 часа 15 минут. Это сократило время ручного обновления на 40%, сэкономив клиенту более 15 часов менеджерской работы в неделю.
### Пошаговый план интеграции
1. Анализ документации API поставщика и тестирование endpoint'ов (1-2 дня)
2. Разработка клиента API с авторизацией, пагинацией, retry (2-3 дня)
3. Настройка маппинга полей и трансформация данных (1-2 дня)
4. Реализация инкрементальной синхронизации (1 день)
5. Интеграция с Битриксом и тестирование (2-3 дня)
6. Документация и обучение ваших сотрудников (1-2 дня)
7. Поддержка после запуска (дополнительная опция)
### Что входит в работу
- Анализ документации API поставщика и тестирование endpoint'ов
- Разработка клиента API с авторизацией, пагинацией, retry
- Настройка маппинга полей и трансформация данных
- Реализация инкрементальной синхронизации
- Интеграция с Битриксом и тестирование
- Документация и обучение ваших сотрудников
- Поддержка после запуска (дополнительная опция)
### Ориентировочные сроки
| Этап | Срок |
|------|------|
| Анализ документации API, тестирование endpoint'ов | 1–2 дня |
| Разработка клиента API (авторизация, пагинация, retry) | 2–3 дня |
| Трансформация данных, маппинг полей | 1–2 дня |
| Инкрементальная синхронизация | 1 день |
| Интеграция с Битриксом, тестирование | 2–3 дня |
Итого: 7–11 рабочих дней на одного поставщика. Повторная интеграция с аналогичным API — вдвое быстрее.
Чтобы обсудить ваш проект и получить точную оценку, свяжитесь с нами. Закажите демо-версию интеграции — мы покажем, как система работает на реальных данных.







