Lightspeed API с PHP Curl

1

Я хочу выполнить почтовый вызов с использованием api. Но после некоторых изменений я все равно получаю ту же ошибку, и она не решена /

Это код, который я использую:

 // init
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,'http://staging-exact-integration.posios.com/PosServer/rest/registration/register');
curl_setopt($ch, CURLOPT_POST, 1);

// array fields var
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array(
        'city' => 'Gent',
        'company' => 'cedric resto',
        'email' => '[email protected]',
        'firstName' => 'Cedric',
        'lastName' => 'De Weirt',
        'locale' => 'Gent',
        'number' => '33',
        'password' => '1234',
        'phone' => '0476612438',
        'referer' => '13c435f9-084a-4e79-866f-8b9800e5c14f',
        'street' => 'Testlaan',
        'zip'=> '9000')));

// receive server response
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec ($ch);

curl_close ($ch);

print $server_output;

// further processing
if (strpos($server_output,'201') == true)
{
    // created
    echo 'Created';
}
else
{
    // catch the error(s)
    echo 'Error Catch';
}

Я постоянно получаю эту ошибку:

HTTP ERROR 415

Problem accessing /PosServer/rest/registration/register. Reason:

    Unsupported Media Type
Powered by Jetty://

Как я могу это решить?

Теги:
curl
error-handling

3 ответа

0
Лучший ответ

Основная проблема заключается в том, что вы не сообщаете серверу, какой формат вы отправляете, и он недействителен.

Вам нужно json_encode массив:

$payload = json_encode(array(
        'city' => 'Gent',
        'company' => 'cedric resto',
        'email' => '[email protected]',
        'firstName' => 'Cedric',
        'lastName' => 'De Weirt',
        'locale' => 'Gent',
        'number' => '33',
        'password' => '1234',
        'phone' => '0476612438',
        'referer' => '13c435f9-084a-4e79-866f-8b9800e5c14f',
        'street' => 'Testlaan',
        'zip'=> '9000'));

Удалите http_build_query это не необходимо:

// array fields var
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);

Отправьте тип заголовка отправляемых данных:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

Конечный результат:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,'http://staging-exact-integration.posios.com/PosServer/rest/registration/register');
curl_setopt($ch, CURLOPT_POST, 1);

$payload = json_encode(array(
        'city' => 'Gent',
        'company' => 'cedric resto',
        'email' => '[email protected]',
        'firstName' => 'Cedric',
        'lastName' => 'De Weirt',
        'locale' => 'Gent',
        'number' => '33',
        'password' => '1234',
        'phone' => '0476612438',
        'referer' => '13c435f9-084a-4e79-866f-8b9800e5c14f',
        'street' => 'Testlaan',
        'zip'=> '9000'));

// array fields var
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

// receive server response
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec ($ch);

curl_close ($ch);

print $server_output;

// further processing
if (strpos($server_output,'201') == true)
{
    // created
    echo 'Created';
}
else
{
    // catch the error(s)
    echo 'Error Catch';
}

Кроме того, похоже, что вам не хватает поля, которое нужно добавить в ваш массив:

{"code":"1401","description":"Registration failed, no valid country in company"}

Это несвязанное; (HTTP ERROR 415) должно быть разрешено.

  • 0
    Спасибо! Это работает. Я добавил все запрошенные переменные, которые решили проблему
0

В качестве решения вашей проблемы, пожалуйста, закодируйте массив, содержащий параметры запроса, в json-формате, используя функцию json_encode вместо http_build_query(), а также вы должны определить заголовок типа контента как application/json в заголовке HTTP-запроса, так как формат полезной нагрузки находится в json-формате.

// init
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,'http://staging-exact-integration.posios.com/PosServer/rest/registration/register');
curl_setopt($ch, CURLOPT_POST, 1);

// array fields var
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array(
        'city' => 'Gent',
        'company' => 'cedric resto',
        'email' => '[email protected]',
        'firstName' => 'Cedric',
        'lastName' => 'De Weirt',
        'locale' => 'Gent',
        'number' => '33',
        'password' => '1234',
        'phone' => '0476612438',
        'referer' => '13c435f9-084a-4e79-866f-8b9800e5c14f',
        'street' => 'Testlaan',
        'zip'=> '9000')));

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
// receive server response
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec ($ch);

curl_close ($ch);

print $server_output;

// further processing
if (strpos($server_output,'201') == true)
{
    // created
    echo 'Created';
}
else
{
    // catch the error(s)
    echo 'Error Catch';
}
0

До сих пор я знаю, что ожидается, что объект json станет отправкой данных. Так делают эти два.

Добавить заголовок json

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));

Теперь измените свой http_build_query с помощью функции json_encode.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню