Как с помощью curl в PHP получить более 100 элементов номенклатуры?

Как выполнить повторное выполнение запроса с помощью curl в PHP? <br/> Вот пример кода, который выполняет запрос несколько раз: <br/> <pre><code class="php">$numberOfRequests = 10; // задаем количество запросов
for($i = 0; $i < $numberOfRequests; $i++) {
    $chphoto = curl_init('https://suppliers-api.wildberries.ru/content/v2/get/cards/list');
    curl_setopt($chphoto, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'Host: suppliers-api.wildberries.ru',
            'Authorization: '.$GLOBALS['TokenWBContent']
        ));
    curl_setopt($chphoto, CURLOPT_POST, 1);
    curl_setopt($chphoto, CURLOPT_POSTFIELDS, '{
          "settings": {
        "cursor": {
            "limit": 100,
            "offset": '.($i * 100).' // учитываем смещение
          },
          "filter": {
            "withPhoto": -1
          }
        }
    }');
    curl_setopt($chphoto, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($chphoto, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($chphoto, CURLOPT_HEADER, false);
    $resultWB3photo = curl_exec($chphoto);
    curl_close($chphoto);
    $resultWB3photo = json_decode(json_encode(json_decode($resultWB3photo)), True);
    // обработка полученных данных
}</code></pre> Код выше выполнит запрос 10 раз, учитывая смещение каждый раз для получения всех данных.
  • 28 апреля 2024 г. 10:40
Ответы на вопрос 3
Чтобы получить более 100 элементов номенклатуры с помощью curl в PHP, вы можете использовать тот же подход, что и в приведенном выше примере, но увеличить количество запросов или изменить логику получения данных в соответствии с требуемым объемом информации.

Чтобы выполнить повторное выполнение запроса с помощью curl в PHP, вы можете воспользоваться циклом и повторно отправлять запрос с теми же настройками. В приведенном выше примере цикл выполняет запрос 10 раз с различным смещением для получения всех данных. Если вам нужно выполнить повторный запрос с другими параметрами или условиями, вы можете изменить их в соответствии с вашими требованиями.
Цикл обычный. 
$page = 0;
while(++$page) {

тут break по условию (конец пагинации или ошибки и тп)
}

Там должен быть еще параметр page или offset (не только limit)
Рабочий код: 
public function getCards2024(): array
    {
        $cards = [];
        $limit = 100;
        $cursor = [
            'limit' => $limit
        ];
        do {
            $res = $this->curlQuery(
                self::API_SUPPLIERS,
                self::METHOD_POST,
                'content/v2/get/cards/list',
                [
                    'settings' => [
                        'sort' => [
                            'ascending' => false
                        ],
                        'cursor' => $cursor,
                        'filter' => ['withPhoto' => -1]
                    ]
                ]
            );
            if(!is_array($res) || !isset($res['cards'])) {
                throw new \ErrorException('WB returns wrong answer');
            }
            $cards = array_merge($cards, $res['cards']);
            $cursor['updatedAt'] = $res['cursor']['updatedAt'];
            $cursor['nmID'] = $res['cursor']['nmID'];
        } while($res['cursor']['total'] >= $limit);
        return $cards;
    }
Похожие вопросы