Почему при работе с API Ozon возникает ошибка 301 Moved Permanently и как ее исправить?

Программист Торговля и дистрибуция
← На главную

При интеграции сторонних сервисов с маркетплейсом Ozon разработчики часто сталкиваются с техническими трудностями. Одной из наиболее распространенных проблем является получение ошибки 301 Moved Permanently при обращении к API через PHP. Давайте вместе разберем, почему это происходит и как вернуть ваше решение в рабочее состояние.

Понимание ошибки 301

Код состояния HTTP 301 Moved Permanently означает, что запрашиваемый ресурс был навсегда перемещен на новый адрес. В контексте взаимодействия с API Ozon это прямое указание на то, что старый формат обращения (по протоколу HTTP) больше не поддерживается сервером, и все запросы должны направляться на новые адреса с использованием протокола HTTPS.

Почему недостаточно просто сменить протокол?

Многие разработчики сталкиваются с тем, что даже после изменения адреса в коде на «https://...», запрос не проходит. Рассмотрим возможные причины этого «нулевого ответа» и способы их устранения:

  1. Проверка настроек сервера: Важно понимать, что для работы с API Ozon по HTTPS ваш собственный сайт не обязан иметь SSL-сертификат. Требование заключается лишь в том, чтобы исходящий запрос от вашего скрипта PHP уходил по защищенному протоколу. Убедитесь, что ваш сервер разрешает исходящие соединения по 443 порту.
  2. Настройки библиотеки cURL: Если вы используете cURL, часто возникают проблемы с проверкой SSL-сертификатов на стороне вашего сервера. Если сервер не может подтвердить валидность сертификата Ozon (например, из-за устаревшего файла cacert.pem), запрос будет прерван.
  3. Использование директив перенаправления: Если при смене протокола ошибка 301 сохраняется, возможно, ваш код не следует за редиректами автоматически. Убедитесь, что в настройках curl_setopt включена опция CURLOPT_FOLLOWLOCATION.

Пошаговое руководство по исправлению интеграции

Разберем, как правильно настроить выполнение запроса на PHP:

Шаг 1: Обновление адреса API. Проверьте все эндпоинты в вашем коде. Каждый адрес должен начинаться с https://.

Шаг 2: Настройка опций cURL. Рассмотрим пример корректной инициализации соединения:


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api-seller.ozon.ru/v2/...");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Обязательно для обработки 301 редиректа
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Client-Id: ВАШ_CLIENT_ID',
    'Api-Key: ВАШ_API_KEY',
    'Content-Type: application/json'
]);
$response = curl_exec($ch);
curl_close($ch);

Шаг 3: Отладка TLS-соединения. Если запрос все равно возвращает ошибку, выполните проверку через командную строку сервера:

curl -v -X GET "https://api-seller.ozon.ru/..." -H "Client-Id: ..." -H "Api-Key: ..."

Флаг -v (verbose) покажет детальный лог «рукопожатия». Если вы видите ошибки связанные с SSL routines, значит, на сервере установлена старая версия OpenSSL, не поддерживающая современные протоколы TLS (необходим TLS 1.2 и выше).

Рекомендации по безопасности

Для целей отладки вы можете временно установить curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);, однако мы настоятельно не рекомендуем оставлять эту настройку в рабочем коде (production). Вместо этого обновите системные сертификаты на вашем сервере или укажите корректный путь к файлу сертификатов через curl.cainfo в конфигурации php.ini.

Следуя этим шагам, вы сможете восстановить работу интеграции с Ozon, обеспечив надежное и защищенное соединение по протоколу HTTPS.

← На главную