Задать вопрос
@countZer0

Почему неверный json формат в ответе iikoCloud API?

Добрый день!

Столкнулся с проблемой при получении организаций с помощью API.

Код php запроса с использованием curl:

$ch = curl_init();
    
    $availOrganizationsVars = [
    'organizationIds' => ['null'],
    'returnAdditionalInfo' => true,
    'includeDisabled' => true,
    'returnExternalData' => ['null']
    ];
    
    $vars = json_encode($availOrganizationsVars);
    $headers = [
        "Authorization: Bearer ".$token,
        "Content-Type: application/json"
    ];
    
    curl_setopt($ch, CURLOPT_URL, "https://api-ru.iiko.services/api/1/organizations");
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $vars); // Post Fields
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
    $data = curl_exec($ch);
    
    curl_close($ch);


Сервер отдает ошибку:

"errorDescription": "Body has invalid JSON format.", "error": "INVALID_BODY_JSON_FORMAT"

пробовал разные варианты:

1. посылать пустой объект в json

$empty = json_decode ("{}");
    $vars= json_encode($empty);


2. вариант где null не строчное значение

$availOrganizationsVars = [
    	'organizationIds' => [null],
    	'returnAdditionalInfo' => true,
    	'includeDisabled' => true,
    	'returnExternalData' => [null]
    ];
    
    $vars = json_encode($availOrganizationsVars);


3. вариант без массива

$availOrganizationsVars = [
    	'organizationIds' => null,
    	'returnAdditionalInfo' => true,
    	'includeDisabled' => true,
    	'returnExternalData' => null
    ];
    
    $vars = json_encode($availOrganizationsVars);


и т.д.

При это, аналогичный запрос выше, на получение токена авторизации работает как должно:

$logIn = ['apiLogin' => '#####'];
    $vars = json_encode($logIn);
    
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api-ru.iiko.services/api/1/access_token");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $vars); // Post Fields
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    $headers = [
        "Content-Type: application/json; charset=UTF-8"
    ];
    
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
    $server_output = curl_exec($ch);
    
    curl_close($ch);


пример из документации:
6602dbe27e756491085616.jpeg

а вот мой json, который я отправляю в теле запроса:

{
"organizationIds":[
"null"
],
"returnAdditionalInfo":true,
"includeDisabled":true,
"returnExternalData":[
"null"
]
}
  • Вопрос задан
  • 239 просмотров
Подписаться 2 Простой 7 комментариев
Пригласить эксперта
Ответы на вопрос 2
@pantsarny
Content-Type: application/json; charset=UTF-8
Попробуйте
Ответ написан
m1n64
@m1n64
Fullstack Web Developer
Попробуйте эксперимента ради вместо;
$availOrganizationsVars = [
    'organizationIds' => ['null'],
    'returnAdditionalInfo' => true,
    'includeDisabled' => true,
    'returnExternalData' => ['null']
    ];

Вот так:
$availOrganizationsVars = [
    'organizationIds' => [],
    'returnAdditionalInfo' => true,
    'includeDisabled' => true,
    'returnExternalData' => []
    ];


Если не поможет - то вообще уберите их:
$availOrganizationsVars = [
    'returnAdditionalInfo' => true,
    'includeDisabled' => true,
    ];
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы