Несовпадение версий в PHP SOAP Call

Я пытаюсь сделать мыльный вызов на сервер с как можно меньшим количеством кода. Но у меня все же есть проблемы с аутентификацией (нет заголовков, необходимых для этого вызова). Вот код, который у меня есть:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
header('Content-Type: text/html; charset=utf-8');

$data = array('Username' => 'someusername', 'Userpass' => 'somepass');

try
{
$client = new SoapClient(null, array(
"location" => "http://relaxdays.plentymarkets-x1.com/plenty/api/soap/version115/?xml",
"uri" => "http://relaxdays.plentymarkets-x1.com/plenty/api/soap/version115/",
"trace" => true,
"soap_version" => SOAP_1_1,
"exceptions" => false
));
$response = $client->__soapCall("PlentySoapRequest_GetAuthentificationToken", $data);
}

catch (Exception $e)
{
echo "Error!";
echo $e -> getMessage();
echo '<br/><br/>Last response:<button type="button" onclick="if(document.getElementById(\'spoiler1\').style.display==\'none\') {document.getElementById(\'spoiler1\') .style.display=\'\'}else{document.getElementById(\'spoiler1\') .style.display=\'none\'}">Show/Hide</button><div id="spoiler1" style="display:none; font-family:monospace;">'. htmlspecialchars($client->__getLastResponse()).'</div>';
}

echo '<br/><br/>Last request:<button type="button" onclick="if(document.getElementById(\'spoiler2\').style.display==\'none\') {document.getElementById(\'spoiler2\') .style.display=\'\'}else{document.getElementById(\'spoiler2\') .style.display=\'none\'}">Show/Hide</button><div id="spoiler2" style="display:none; font-family:monospace;">'. htmlspecialchars($client->__getLastRequest()).'</div>';

echo '<br/><br/>Response:<button type="button" onclick="if(document.getElementById(\'spoiler3\').style.display==\'none\') {document.getElementById(\'spoiler3\') .style.display=\'\'}else{document.getElementById(\'spoiler3\') .style.display=\'none\'}">Show/Hide</button><div id="spoiler3" style="display:none; font-family:monospace;">'. htmlspecialchars($response).'</div>';
?>

Тем не менее, независимо от того, что я пытаюсь, это не работает. Дальнейшее, что я пришел, это ошибка:

SoapFault exception: [VersionMismatch] Wrong Version in /var/www/htdocs/plentyimport/tester.php:18
Stack trace: #0 /var/www/htdocs/plentyimport/tester.php(18): SoapClient->__soapCall('PlentySoapReque...', Array) #1 {main}

Я уже пробовал использовать "soap_version" => SOAP_1_2или переключение Soap-URL на разные версии (например, /version112/) но ошибка просто не хочет уходить.

Любая помощь будет оценена.

большое спасибо

virhonestum

1

Решение

Вы должны передать определение SOAP в качестве первого параметра, например так:

$client = new SoapClient('http://relaxdays.plentymarkets-x1.com/plenty/api/soap/version115/?xml');

Я лишил других аргументов, поскольку они не требуются для этой работы.

Звонок должен быть сделан на operationв этом случае так:

$response = $client->__soapCall("GetAuthentificationToken", $data);

Наконец, данные должны содержать структуру PlentySoapRequest_GetAuthentificationToken, как это:

$data = [
'PlentySoapRequest_GetAuthentificationToken' => [
'Username' =>  'someusername',
'Userpass' =>  'somepassword'
]
];

Примечание: я не публикую это как полный ответ. Я не знаю SOAP и не могу объяснить, что было не так и как я это исправил, только опубликовав это, чтобы помочь автору выйти из этой фазы.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector