Первый параметр строки запроса игнорируется Laravel или WordPress/WooCommerce?

#php #wordpress #laravel #woocommerce

Вопрос:

Технический стек

  • PHP 7.4.2
  • Ларавель 7

Фон

Я пытаюсь загрузить активные продукты с нашего сайта WooCommerce, по одной странице за раз. Затем эти данные должны быть извлечены, отформатированы в JSON и возвращены пользователю (в этом случае маркетинговая платформа, выполняющая вызов API).

Вопрос

Какой бы параметр запроса ни был первым в моем списке, он либо удаляется до того, как покинет мою систему, либо игнорируется API REST WC/WP.

Код для совершения вызова

 
    function getProducts($page = 1, $per_page = 100, $status = 'publish') {
        
        $query = array(
            // 't' => 1, // For testing first parameter bug
            'page' => $page,
            'per_page' => $per_page,
            'status' => $status,
        );

        $string = http_build_query($query, null, 'amp;', PHP_QUERY_RFC3986);

        $url = $this->finalUrl . '/wp-json/wc/v3/products?' . $string;

        $json = file_get_contents($url);

        return json_decode($json);
    }
 

Если я свалю $url , я получу:

https://user:pass@domain.com/wp-json/wc/v3/products?page=5amp;per_page=100amp;status=publish

Насколько я могу судить, это кажется обоснованным. Вложив его в «Почтальон», я получаю 5-ю страницу из 100 записей, как и ожидалось. Однако, если я запускаю его в своей системе, я каждый раз получаю первую страницу.

Затем, если я поменяюсь page местами и per_page округлю, я получу нужную страницу, но только 10 записей, что является значением по умолчанию, а не 100, которые я прошу. Тогда, конечно, если я поставлю статус первым, я тоже получу неактивные/архивированные продукты.

Кроме того, если я изменю URL-адрес на URL-адрес Pipedream, я смогу увидеть, что все 3 параметра четко перечислены.

Наконец, я протестировал, добавив t=1 сначала параметр в качестве фиктивного параметра, а затем все остальные параметры работают нормально, и я бы без проблем получил свою 5-ю страницу из 100 записей.

Если кто-нибудь сможет помочь или указать мне правильное направление, я буду очень признателен.

Твое здоровье, Том

Ответ №1:

Оказывается, в этом случае в правиле перезаписи uri на сайте wordpress была случайная буква, в результате чего имя первого параметра было добавлено указанной буквой.

Это было найдено в рамках try_files $uri /index.php?uri=$uriamp;i$args; правила. Обратите i внимание на то, что перед $args добавлением.

В моем приведенном выше примере page он будет переименован ipage до того, как достигнет API.

Удалено, и теперь это работает.