try {
// 1) Нормализуем вход к массиву
- $request = $this->decodingResult;
+ $request = $this->normalizeToArray($this->decodingResult);
// 2) Базовая валидация (добавьте обязательные ключи, если знаете)
if (!is_array($request) || $request === []) {
return $attempt < 3;
}
+ /**
+ * Приводит произвольный input к массиву.
+ * Поддерживает: array, stdClass/объект, JSON-строку.
+ */
+ private function normalizeToArray($data): array
+ {
+ if (is_array($data)) {
+ return $data;
+ }
+
+ if ($data instanceof \JsonSerializable) {
+ $data = $data->jsonSerialize();
+ return is_array($data) ? $data : [];
+ }
+
+ if (is_object($data)) {
+ // грубая, но надёжная нормализация объекта к array
+ return json_decode(json_encode($data, JSON_UNESCAPED_UNICODE), true) ?: [];
+ }
+ if (is_string($data)) {
+ // возможно это JSON
+ $decoded = json_decode($data, true);
+ if (json_last_error() === JSON_ERROR_NONE && is_array($decoded)) {
+ return $decoded;
+ }
+ }
+
+ // null / scalar и т.п. → пустой массив
+ return [];
+ }
}