Для сайтов без CMS или с самописной корзиной: треки и статусы заказов отправляются в Слух из браузера одной строкой скрипта или с вашего сервера.
Какой вариант выбрать
| Вариант | Когда | Безопасность |
|---|---|---|
| Серверный вызов API v2 (PHP, Node, cURL) | вы можете вызвать API с сервера | рекомендуется: секретный токен не виден в браузере |
Скрипт slyh.js |
серверного кода нет, события создаются на странице | ключ виден в коде страницы, поэтому он только отправляет события и привязан к вашему домену |
Скрипт для сайта
- В кабинете откройте «Интеграция» → «JS-решение» и выпустите ключ сайта (
pk_…). Ключ работает только на страницах вашего домена и его поддоменов. - Добавьте на страницу:
<script src="https://slyh.ru/js/slyh.js" data-key="pk_ВАШ_КЛЮЧ" async></script>
- Вызывайте методы, когда у заказа появляется трек или меняется статус:
slyh.track({
track_number: 'RB123456789CN',
phone: '+79001112233', // нужен телефон или email
email: 'anna@example.ru',
name: 'Анна',
order: 'A-1001', // необязательно
carrier: 'sdek' // необязательно: служба доставки
});
slyh.status({
order: 'A-1001',
status: 'Передан в доставку',
phone: '+79001112233'
});
Оба метода возвращают Promise. Ошибки приходят в виде { code, message }: например, origin_not_allowed, validation_failed, feature_not_available. Повторная отправка того же трека или той же пары «заказ + статус» дубля не создаёт.
Ключ можно задать и в коде: slyh.init({ key: 'pk_ВАШ_КЛЮЧ' }).
Защита от подмены
- Ключ даёт право только отправлять треки и статусы. Читать данные им нельзя.
- Запрос принимается, только если заголовок
Origin(илиReferer) принадлежит вашему домену или его поддомену. Тот же ключ на чужом сайте получит403 origin_not_allowed, а попытка попадёт в журнал администратора. - Лимиты: 120 запросов в минуту на ключ и 30 с одного IP.
- Ключ можно перевыпустить в кабинете в любой момент: прежний перестанет действовать сразу.
Серверные примеры (рекомендуемый путь)
Токен сайта выдаётся в «Интеграции». Описание всех методов — в документации API v2.
PHP
$ch = curl_init('https://slyh.ru/api/v2/tracking');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ВАШ_ТОКЕН', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'track_number' => $track,
'order' => $orderId,
'customer' => ['name' => $name, 'phone' => $phone, 'email' => $email],
], JSON_UNESCAPED_UNICODE),
]);
$response = json_decode(curl_exec($ch), true);
Node.js
const response = await fetch('https://slyh.ru/api/v2/statuses', {
method: 'POST',
headers: { Authorization: 'Bearer ВАШ_ТОКЕН', 'Content-Type': 'application/json' },
body: JSON.stringify({ order: orderId, status, customer: { phone, email } }),
});
const result = await response.json();
cURL
curl -X POST https://slyh.ru/api/v2/tracking \
-H "Authorization: Bearer ВАШ_ТОКЕН" -H "Content-Type: application/json" \
-d '{"track_number":"RB123456789CN","customer":{"phone":"+79001112233"}}'