Формирование API запросов в PHP (Laravel)

В данный на Laravel нужно написать сервис для управления запросами к Яндекс Маркет API. Но что-то пошло не так.


С сайта https://www.dev-notes.ru/articles/laravel/simplifying-api-integration-with-laravels-http-facade/ взял способ отправки запросов. Класс ApiClient наследовал в классе YandexApiClient, а ApiRequest оставил без изменений.

Вот класс YandexApiClient:

class YandexApiClient
    extends ApiClient
{
    protected const BASE_URL    = 'https://api.partner.market.yandex.ru';
    public const    AUTH_CONFIG = 'api.yandex';
    
    protected string $token = '';
    
    public function __construct(string $warehouseIndex)
    {
        $objCity = City::where('index', $warehouseIndex)->firstOrFail();
        $this->initToken($objCity->id);
    }
    
    protected function initToken(string $warehouseID): void
    {
        $this->token = config(config_key([self::AUTH_CONFIG, $warehouseID, 'token']));
    }
    
    protected function authorize(PendingRequest $request): PendingRequest
    {
        return $request->withHeader('Api-Key', $this->token);
    }
}

И если попытаться получить дерево категорий (https://yandex.ru/dev/market/partner-api/doc/ru/reference/categories/getCategoriesTree) как указано ниже:

$apiClient = new \YandexApiClient('...');
$apiRequest = \ApiRequest::post('/categories/tree');

dd($apiClient->send($apiRequest)->json());

то возвращается ошибка 400:

Ошибка Bad Request

При этом если добавить любое значение для тела запроса даже если таких параметров нет в методе:

$apiClient = new \YandexApiClient('...');
$apiRequest = \ApiRequest::post('/categories/tree')->setBody(['l' => 's']);

dd($apiClient->send($apiRequest)->json());

то ответ приходит 200:

Нормальный ответ

Здесь (https://yandex.ru/dev/market/partner-api/doc/ru/concepts/input-format) явно указаны случаи, при которых может приходить данная ошибка, но я не понимаю, что не так с тем, что будет отправлен пустой массив вместо непустого.

Внимание, вопрос: почему в запросе есть проблемы с передаваемыми данными? Почему проблему может решить любой непустой массив структуры "ключ-значение" в теле запроса?


Ответы (0 шт):