Из документации:
POST-запросы
При обращении к API-методам типа POST параметры необходимо отправлять в формате application/x-www-form-urlencoded. При этом если в каком-либо из параметров передается вложенная структура , то значения таких параметров необходимо передавать в виде JSON-строки.
Пример передаваемых данных:
site=simple-site&order=%7B%22externalId%22%3A%22a123%22%2C%22firstName%22%3A%22Tom%22%7D
Метод POST /api/v5/loyalty/account/create
Метод проверяет возможность участия клиента в программе лояльности и добавляет его
Я делаю так:
//Делаем участником бонусов
$url = 'https://mysite.retailcrm.ru/api/v5/loyalty/account/create';
$headers = ['Content-Type: application/x-www-form-urlencoded', 'X-API-KEY: mykey']; // заголовки нашего запроса
$post_data = array(
'site' => 'mysite',
'loyaltyAccount' => array('phoneNumber' => $phone, 'cardNumber' => $card, 'customer' =>
array('externalId' => $response[customers][0][externalId], 'id' => $response[customers][0][id])
)
);
$data_json = json_encode($post_data); // переводим поля в формат JSON
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_json);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
$result = curl_exec($curl); // результат POST запроса
////////
print_r($result);
покажет если Content-Type: application/json
{"success":false,"errorMsg":"Parameter 'loyaltyAccount[customer]' is missing"}
или если Content-Type: application/x-www-form-urlencoded'
{"success":false,"errorMsg":"Parameter \u0022loyaltyAccount\u0022 is missing"}
print_r($post_data);
покажет:
Array
(
[site] => mysite
[loyaltyAccount] => Array
(
[phoneNumber] => 70000000000
[cardNumber] => 887895345446
[customer] => Array
(
[externalId] => bitrix1772073
[id] => 31277
)
)
)
Почему у меня ошибка
{"success":false,"errorMsg":"Parameter \u0022loyaltyAccount\u0022 is missing"}
Что я делаю не так?