Самописный сайт не имеет готового модуля, поэтому интеграция строится напрямую через REST API RetailCRM. Это гибко: вы сами решаете, что и когда передавать. Разберём ключевые методы, выгрузку каталога и защиту обмена от потерь.
API v5 и ключ доступа
RetailCRM предоставляет REST API версии v5. Базовый адрес — https://{account}.retailcrm.ru/api/v5/, авторизация — по параметру apiKey. Ключ создаётся в Настройки → Интеграция → Ключи доступа к API с типом «Магазин» и ограниченным набором методов.
- Формат обмена — JSON, ответы содержат флаг
success; - Есть готовый PHP SDK (
retailcrm/api-client-php), но подойдёт и обычный HTTP-клиент; - У API есть лимит запросов в секунду — массовые операции делают пачками.
Создание заказа
Новый заказ отправляется методом POST orders/create. В теле — номер, состав, суммы, оплата, доставка и покупатель. В ответ CRM возвращает внутренний id, который сайт сохраняет для будущих обновлений.
Минимальный набор полей заказа:
externalId— ваш номер заказа для связи систем;items— позиции с offer.externalId и ценой;customer— покупатель (телефон, e-mail, имя);deliveryиpayments— доставка и оплата.
Позиции связываются со справочником по offer.externalId, совпадающему с ICML. Без этого товар в заказе будет «сырым», без картинки и остатка.
Клиенты и дедупликация
Клиент передаётся вместе с заказом или отдельно методом customers/create. RetailCRM ищет контакт по телефону и e-mail и привязывает заказ к существующей карточке, если находит совпадение.
| Метод | Назначение |
|---|---|
customers/create | создать клиента |
customers | найти по телефону/e-mail |
customers/{id}/edit | обновить карточку |
Чтобы дедупликация работала, приводите телефон к единому формату +7XXXXXXXXXX и не создавайте клиента отдельным запросом, если он и так уйдёт вместе с заказом.
Выгрузка каталога в ICML
Товары нужны, чтобы позиции заказа связались со справочником. Самописный сайт отдаёт каталог в формате ICML по постоянной ссылке, а RetailCRM забирает файл по расписанию.
- Скрипт обходит активные товары и формирует валидный XML;
- Вариации связываются общим
productId, каждая — своимid; - Остаток передаётся атрибутом
quantity, артикул —vendorCode.
Ссылку на файл (например https://shop.ru/retailcrm/icml) добавляют в Администрирование → Настройки каталога. Для больших каталогов файл строят заранее по cron, чтобы избежать таймаутов.
Вебхуки и обратный обмен
Чтобы получать изменения из CRM (смену статуса, оплату, правки оператора), сайт подписывается на вебхуки RetailCRM или периодически опрашивает метод orders/history.
| Механизм | Когда применять |
|---|---|
| Вебхуки | нужен мгновенный отклик, есть публичный HTTPS |
orders/history | надёжный опрос по расписанию с курсором изменений |
Метод orders/history отдаёт изменения с момента последнего запроса по sinceId, что удобно для гарантированной синхронизации без потерь — даже если вебхук был пропущен.
Надёжность обмена и отладка
Прямая интеграция даёт гибкость, но ответственность за надёжность полностью на вас. Продумайте очереди и повторы заранее.
- Очередь отправки: заказ, не ушедший из-за ошибки или лимита API, повторяется, а не теряется;
- Идемпотентность: ищите заказ по
externalIdи делайтеorders/editвместо дублирующего создания; - Логирование: сохраняйте запросы и ответы CRM — по ним видно, где обмен разошёлся;
- Справочники: способы оплаты и доставки берите из
references/*, а не хардкодьте коды.
Итог
Интеграция самописного сайта с RetailCRM строится на REST API v5: ключ типа «Магазин», создание заказов через orders/create, дедупликация клиентов по телефону, выгрузка каталога в ICML и обратный обмен через вебхуки или orders/history. Гибкость такого подхода требует дисциплины — очередей, идемпотентности и логирования.
Мы проектируем и разрабатываем такие интеграции под задачи конкретного магазина, закладываем защиту от потерь и дублей, а затем сопровождаем решение по мере развития сайта и процессов в CRM.
Частые вопросы
Какая версия API RetailCRM актуальна для интеграции?
Актуальна версия v5 с базовым адресом вида https://account.retailcrm.ru/api/v5/. Обмен идёт в JSON, авторизация — по параметру apiKey с ключом типа «Магазин».
Нужен ли PHP SDK или можно обойтись HTTP-клиентом?
SDK retailcrm/api-client-php упрощает работу, но не обязателен. Интеграцию можно построить на любом HTTP-клиенте, соблюдая формат запросов и лимиты API.
Как связать позиции заказа с товарами каталога?
У каждой позиции указывают offer.externalId, совпадающий с id предложения в ICML. Тогда товар в заказе получает картинку, артикул и остаток из справочника.
Как получать изменения статусов из CRM надёжно?
Используйте метод orders/history с курсором sinceId — он отдаёт все изменения с момента последнего запроса, поэтому синхронизация не теряется даже при пропущенном вебхуке.
Можно ли держать ключ API на фронтенде?
Нет. Ключ должен оставаться только на сервере, все запросы к RetailCRM идут с бэкенда. Ключ в клиентском коде — это утечка доступа к CRM.
Как избежать дублей заказов при повторной отправке?
Ищите заказ по externalId и обновляйте его методом orders/edit. Создавать новый заказ повторно нельзя — так появляются дубли.
Откуда брать коды способов оплаты и доставки?
Из методов references/* API. Хардкодить коды не стоит: они настраиваются в конкретной CRM и могут отличаться от значений по умолчанию.
Поможем с настройкой и поддержкой RetailCRM
Поможем с настройкой, доработкой и поддержкой RetailCRM.