Я хочу выполнить почтовый вызов с использованием 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://
Как я могу это решить?
Основная проблема заключается в том, что вы не сообщаете серверу, какой формат вы отправляете, и он недействителен.
Вам нужно 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) должно быть разрешено.
В качестве решения вашей проблемы, пожалуйста, закодируйте массив, содержащий параметры запроса, в 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';
}
До сих пор я знаю, что ожидается, что объект json станет отправкой данных. Так делают эти два.
Добавить заголовок json
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
Теперь измените свой http_build_query
с помощью функции json_encode
.