Массив POST через cURL не дает мне правильного формата

Я использую swifdil api для создания пользователей из html-формы через curl.

API ожидает получения определенного формата (json), но я понятия не имею, как я могу достичь формата, который ищет API.

Пример кода API:

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => "https://sandbox.swiftdil.com/v1/customers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\r\n    \"type\" : \"INDIVIDUAL\",\r\n    \"email\" : \"[email protected]\",\r\n    \"first_name\" : \"Maria\",\r\n    \"last_name\" : \"Papakiriakou\"\r\n}",

Мне нужно отправить значения через HTML-форму, поэтому я сделал следующее:

function createNewUser()
{
    // First we get all the information from the fields we need to pass on to swiftdill.
    $type       = $_POST['type'];
    $email      = $_POST['email'];
    $first_name = $_POST['firstname'];
    $last_name  = $_POST['lastname'];


    $fields = array(
        'type' => $type,
        'email' => $email,
        'first_name' => $first_name,
        'last_name' => $last_name
    );
    json_encode($fields);
    $fields_string = http_build_query($fields);


    $curl = curl_init();
    // Set the options for the curl.
    curl_setopt($curl, CURLOPT_URL, "https://sandbox.swiftdil.com/v1/customers");
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_ENCODING, "");
    curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
    curl_setopt($curl, CURLOPT_TIMEOUT, 30);
    curl_setopt($curl, CURL_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($curl, CURLOPT_POSTFIELDS, $fields_string);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(
        "Authorization: Bearer " .$newToken. "",
        "Cache-Control: no-cache",
        "Content-Type: application/json",
        "Postman-Token: 0c513fa9-667d-4065-8531-8c4556acbc67"
    ));

Вывод моего кода выглядит следующим образом:

type=Individual&email=test%40mail.nl&first_name=John&last_name=Doe

Конечно, это не отформатировано так, как запрашивает api, а именно:

CURLOPT_POSTFIELDS => "{\r\n    \"type\" : \"INDIVIDUAL\",\r\n    \"email\" : \"[email protected]\",\r\n    \"first_name\" : \"Maria\",\r\n    \"last_name\" : \"Papakiriakou\"\r\n}",

И, конечно же, ошибка cURL выглядит следующим образом:

{"id":"xxxx-xxxx-xxxx-xxxx-xxxxxxxxx","type":"malformed_content","message":"Content of the request doesn't conform to specification"}

Что мне нужно сделать в моем php-коде, чтобы API принял мои отправленные данные?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
102
2

Ответы 2

Почему бы вам сначала не попробовать ответ через POSTMAN, установив данные в соответствии с требованиями API и проверить, что на самом деле нужно API.

Согласно предоставленной информации, похоже, вам следует удалить строку ниже и просто опубликовать данные json_encoded.

$fields_string = http_build_query($fields);

Когда я это делаю, я получаю следующее сообщение об ошибке: array (4) {["type"] => string (10) "Individual" ["email"] => string (12) "[email protected]" [" first_name "] => строка (4)" test "[" last_name "] => строка (4)" test "} {" id ":" xx-xx-xxx "," type ":" malformed_content "," message ":" Часть запроса не соответствует спецификации "}

Mand 16.05.2018 13:57

Измените строку:

$fields_string = http_build_query($fields);

В это:

$fields_string = json_encode($fields);

Поскольку API ожидает тело JSON, поскольку вы отправляете тело сообщения, отличное от JSON, API не будет знать, что это такое, и отклонить

Я пробовал это, но все равно получаю ошибку: Var dump of the json_encode ($ fields): array (4) {["type"] => string (10) "Individual" ["email"] => string (12) "[email protected]" ["first_name"] => строка (4) "test" ["last_name"] => строка (4) "test"}

Mand 16.05.2018 15:38

Другие вопросы по теме