Skip to content

Невозможно выбрать город отправки в настройках — поиск города возвращает ошибку #145

@monkey-di

Description

@monkey-di

В настройках способа доставки СДЭК невозможно выбрать город отправки. При вводе названия города в поле "Город" выпадающий список не появляется, AJAX-запрос к эндпоинту admin-ajax.php?action=official_cdek-cities возвращает 500 Internal Server Error с текстом "Error happened at CDEKDelivery".

Без указания города отправки плагин не может рассчитывать стоимость доставки.

Проблема воспроизводится на shared-хостингах, где wp_remote_request с методом GET не транслирует body-параметры в query string.

Как воспроизвести:

  1. Установить плагин на shared-хостинг
  2. Перейти в настройки СДЭК
  3. Начать вводить название города в поле "Город"
  4. Вместо выпадающего списка — ошибка, город невозможно выбрать

Та же проблема может затрагивать другие GET-запросы: загрузку списков ПВЗ на чекауте, определение города покупателя по индексу, поиск заказов по номеру.

Конкретная причина и исправление:

В src/Transport/HttpClient.php:

  if (!empty($data)) {
      $config['body'] = ($method === WP_REST_Server::READABLE) ? $data : wp_json_encode($data);
  }

Для GET-запросов параметры (name, country_code) помещаются в тело запроса вместо URL. API СДЭК игнорирует тело GET-запроса и возвращает ответ без заголовка content-type: application/json, что приводит к UnparsableAnswerException.

Предлагаемое исправление:

  if (!empty($data)) {
      if ($method === WP_REST_Server::READABLE) {
          $url .= (strpos($url, '?') === false ? '?' : '&') . http_build_query($data);
      } else {
          $config['body'] = wp_json_encode($data);
      }
  }

GET-параметры добавляются в URL как query string, POST/PUT/DELETE — JSON в body. Обратно совместимо.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions