Страница 1 из 1

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

Добавлено: 2018.11.27, 15:45
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) "" } 
Что не так делаю?

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

Добавлено: 2018.11.27, 17:54
andku83
уберите:
$data = json_encode($data);
и
\yii\helpers\Json::decode()
тогда в модели будет массив,
еще есть вариант работать c RAW body

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

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

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

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

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

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

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

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

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

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

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

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