Получение данных, отправляемых POST в виде json

343
12 августа 2017, 04:32

API яндекса говорит о том, что по некому урл, который Я укажу уйдет пост в json, на который Я должен дать ответ

https://tech.yandex.ru/market/partner/doc/dg/reference/post-cart-docpage/#output_1

Если Я просто в файле для проверки делаю так:

    $responseJson = '[
{  
"cart":  {    
"currency":"RUR",     
"items":    
[   
{
    "feedId":12345, 
    "offerId":"49", 
    "offerName":"Чайник электрический 100W", 
    "count":1, 
    "feedCategoryId":"35"
},    
{
    "feedId":12346, 
    "offerId":"71", 
    "offerName":"Тостер", 
    "count":1, 
    "feedCategoryId":"35"
}     
],     
"delivery":     
{
    "region":       
    {
        "id":213, 
        "name":"Москва", 
        "type":"CITY", 
        "parent":          
        {
            "id":1, 
            "name":"Москва и Московская область", 
            "type":"SUBJECT_FEDERATION", 
            "parent":             
            {
                "id":3, 
                "name":"Центр", 
                "type":"COUNTRY_DISTRICT", 
                "parent":                
                {
                    "id":225, 
                    "name":"Россия", 
                    "type":"COUNTRY"
                }             
            }          
        }        
    },     
    "address":
    {
        "country":"Россия", 
        "postcode":"119313", 
        "city":"Москва", 
        "subway":"Проспект Вернадского", 
        "street":"Ленинский проспект", 
        "house":"90", "floor":"6"
    }    
}  
}
}
]'; // ваш пример строки
header('Content-Type: application/json;charset=utf-8');
header('Accept: application/json');
$response = json_decode($responseJson, true); // преобразование строки в формате json в ассоциативный массив 
$currency = $response[0]['cart']['currency']; // ваш искомая валюта
echo $currency; //выводим валюту

То вся игра идет хорошо. Если пытаюсь получить json через POST вот так: $responseJson = $_POST['cart'];, то ничего не выходит. Пусто. Я не верно получаю json данные?

Answer 1

ПХП по умолчанию не парсит запросы кроме application/x-www-form-urlencoded multipart/form-data. Т.е. тельце надо парсить самому.

Можно проверить что бы $_SERVER["CONTENT_TYPE"] == 'application/json' до и что значение json_decode не NULL после.

А тело парсится так:

<?php
$postData = file_get_contents('php://input');
$data = json_decode($postData, true);
var_dump($data["cart"]);

Кстати ещё как дополнение: ПХП не парсит PUT/DELETE... запросы.

Функция что бы парсить для application/x-www-form-urlencoded multipart/form-data http://php.net/manual/en/function.parse-str.php, а для application/json как и в предидущем примере json_decode.

$postData = file_get_contents('php://input');
// `application/x-www-form-urlencoded`  `multipart/form-data`
$data = parse_str($postData);
// or
// `application/json`
$data = json_decode($postData, true);
var_dump($data);
READ ALSO
Почему не отправляется письмо на gmail с локального сервера (используя sendmail)

Почему не отправляется письмо на gmail с локального сервера (используя sendmail)

На будущем сайте будет реализована система отправки сообщений на почту пользователейПока тестирую на OpenServer

384
Как правильно удалять данные с 2-х таблиц?

Как правильно удалять данные с 2-х таблиц?

Есть 2 таблицыProduct(сам продукт) и images(id,хранится product_id и путь к картинке)

264
Не получается вызвать в клиенте метод веб-сервиса

Не получается вызвать в клиенте метод веб-сервиса

Решил попробовать сделать простенький клиент-сервер с использованием SOAP и WSDLВсе делал на локальном сервере, все файлы лежат в корне сайта

311
Как найти переменную экземпляра класса?

Как найти переменную экземпляра класса?

В классе есть нужный мне методНепонятно объект уже создан или надо его мне создать

227