Почему принимая Post запрос с другого сайта JSON массив превращается в массив array внутри которого JSON?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

Почему принимая Post запрос с другого сайта JSON массив превращается в массив array внутри которого JSON?

Сообщение alexa777 »

Почему принимая Post запрос с другого сайта JSON массив превращается в массив array внутри которого JSON?

отправляю JSON массив с другого сайта с помощью cUrl

Код: Выделить всё

$data = $_POST;
$data = json_encode($data);
$ch = curl_init('https://site.ku/zakaz/create'); 
curl_setopt($ch, CURLOPT_POST, true); //переключаем запрос в POST
curl_setopt($ch, CURLOPT_POSTFIELDS,$data); //Это POST данные
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //Отключим проверку сертификата https
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //из той же оперы
curl_exec($ch);
curl_close($ch);
На стороне сайта, пытаюсь его принять в контролере

Код: Выделить всё

 public function actionCreate()
    {

        if (Yii::$app->request->post()) {
            
            $model = \yii\helpers\Json::decode(Yii::$app->request->post());
       
            return $this->redirect(['index']);
        }

         return $this->redirect(['index']);
    }
Выдает ошибку что JSON поврежден Invalid JSON data.

Завардампил Yii::$app->request->post() получается вот такая лабуда JSON внутри array

Код: Выделить всё

array(1) { ["{"name_fio":"sfgsgf","count":"34","telephone":"3365","zipcode":"33","region":"fgdsf","city":"ddfsdf","street":"dsfgsdf","house":"55","apartment":"55","ref":"","lend":"2"}"]=> string(0) "" } 
Что не так делаю?
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Почему принимая Post запрос с другого сайта JSON массив превращается в массив array внутри которого JSON?

Сообщение andku83 »

уберите:
$data = json_encode($data);
и
\yii\helpers\Json::decode()
тогда в модели будет массив,
еще есть вариант работать c RAW body
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

Re: Почему принимая Post запрос с другого сайта JSON массив превращается в массив array внутри которого JSON?

Сообщение alexa777 »

andku83 писал(а): 2018.11.27, 17:54 уберите:
$data = json_encode($data);
и
\yii\helpers\Json::decode()
тогда в модели будет массив,
еще есть вариант работать c RAW body
Спасибо, это тоже вариант, но все же если в будущем понадобится принимать json, как быть?
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Почему принимая Post запрос с другого сайта JSON массив превращается в массив array внутри которого JSON?

Сообщение andku83 »

Конкретно для вашего случая (вы неправильно отправляете данные):

Код: Выделить всё

\yii\helpers\Json::decode(current(Yii::$app->request->post()))
Ну а вообще есть еще другие варианты форматов данных:
Изображение
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

Re: Почему принимая Post запрос с другого сайта JSON массив превращается в массив array внутри которого JSON?

Сообщение alexa777 »

andku83 писал(а): 2018.11.27, 19:02 Конкретно для вашего случая (вы неправильно отправляете данные):

Код: Выделить всё

\yii\helpers\Json::decode(current(Yii::$app->request->post()))
Ну а вообще есть еще другие варианты форматов данных:
Изображение
Спасибо, я просто читал и смотрел вебинары про API что там в основном на JSON все делают
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Почему принимая Post запрос с другого сайта JSON массив превращается в массив array внутри которого JSON?

Сообщение andku83 »

Я так думаю что там где вы смотрели использовался запрос с данными в RequestBody, а не в массиве POST.
Если вы внимательно посмотрите на те данные что приходят по коду из первого сообщения, то заметите не JSON, а массив с элементом '0' который содержит ваши данные в формате JSON.
Ответить