При интеграции сторонних сервисов с маркетплейсом Ozon разработчики часто сталкиваются с техническими трудностями. Одной из наиболее распространенных проблем является получение ошибки 301 Moved Permanently при обращении к API через PHP. Давайте вместе разберем, почему это происходит и как вернуть ваше решение в рабочее состояние.
Код состояния HTTP 301 Moved Permanently означает, что запрашиваемый ресурс был навсегда перемещен на новый адрес. В контексте взаимодействия с API Ozon это прямое указание на то, что старый формат обращения (по протоколу HTTP) больше не поддерживается сервером, и все запросы должны направляться на новые адреса с использованием протокола HTTPS.
Многие разработчики сталкиваются с тем, что даже после изменения адреса в коде на «https://...», запрос не проходит. Рассмотрим возможные причины этого «нулевого ответа» и способы их устранения:
cURL, часто возникают проблемы с проверкой SSL-сертификатов на стороне вашего сервера. Если сервер не может подтвердить валидность сертификата Ozon (например, из-за устаревшего файла cacert.pem), запрос будет прерван.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.