cdek-it / sdk2.0

PHP SDK для API v2.0 от сервиса интеграции компании СДЭК
MIT License
30 stars 61 forks source link

Баг при десериализации штихкода #8

Closed pozdeiev closed 4 years ago

pozdeiev commented 4 years ago

Если запрос GET https://api.cdek.ru/v2/print/barcodes/{uuid} возвращает что-то вроде

{
  "requests": [
    {
      "request_uuid": "72753034-5cdc-4fbd-9354-111111111111",
      "type": "GET",
      "state": "INVALID",
      "errors": [
        {
          "code": "v2_entity_not_found",
          "message": "Entity not found by uuid 72753034-882f-43e5-bb89-222222222222"
        }
      ]
    }
  ]
}

то код из документации

$result = $cdek->barcodes()->get($uuid);
if ($result->hasErrors()) {
    // Обрабатываем ошибки
}

if ($result->isOk()) {
    //Запрос успешно выполнился
    $response = $cdek->formatResponse($result, \CdekSDK2\BaseTypes\Barcode::class);
    if (isset($response->entity->statuses)) {
        foreach ($response->entity->statuses as $state) {
            $state->code;
        }
    }
}

в $cdek->formatResponse() вызывает Undefined index: entity in Client.php:315, т.к. JSON не содержит entity, а проверки $result->hasErrors() и $result->isOk() не идентифицируют наличие ошибки.

ihomyak commented 4 years ago

Проблема известная, заведена задача на ее исправление. Но она не относится к SDK, проблема в ответе самого протокола, что в данном случае он возвращает 202 HTTP код, а должен возвращать другой статус - 4хх или 5хх.