@anton_kP

Почему ошибка при отправке post запроса?

Из документации:
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
Метод проверяет возможность участия клиента в программе лояльности и добавляет его
61968052d3ace720387209.png
Я делаю так:
//Делаем участником бонусов
$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"}


Что я делаю не так?
  • Вопрос задан
  • 346 просмотров
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
в жсон нужно переводить только вложенные структуры, то есть жсонить нужно только содержимое loyaltyAccount.
Читайте нормально документацию.
Ответ написан
Ваш ответ на вопрос

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

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