Как изменить пространство имен, отправленное с SOAP-запросом?

Связанный с этим вопросом: Как запросить ответ у API SOAP XML?

У меня есть этот скрипт PHP, отправляющий запрос с обязательными полями:

$client = new SoapClient('https://live.domainbox.net/?WSDL');
$params = array(
    'AuthenticationParameters' => array(
        'Reseller' => 'resellername',
        'Username' => 'myusername',
        'Password' => 'mypassword'
    ),
    'CommandParameters' => array(
        'DomainName' => 'mydomain.com',
        'LaunchPhase' => 'GA'
    )
);

$result = $client->CheckDomainAvailability($params);

print_r($result);

Я получаю следующее сообщение об ошибке:

Неустранимая ошибка: необработанное исключение SoapFault: [soap:VersionMismatch]

Возможное несоответствие версии SOAP: пространство имен конверта http://schemas.xmlsoap.org/soap/envelope/ было неожиданным.

Ожидая http://www.w3.org/2003/05/soap-envelope. в /home/nosa/public_html/dev/check-domain-availability.php:20 трассировки стека: # 0 /home/nosa/public_html/dev/check-domain-availability.php(20):

SoapClient -> __ call ('CheckDomainAvai...', Array) # 1 /home/nosa/public_html/dev/check-domain-availability.php(20): SoapClient-> CheckDomainAvailability (Array) # 2 {main} добавляется /home/nosa/public_html/dev/check-domain-availability.php в строке 20

Я удалил и перекомпилировал apache, чтобы включить последнюю версию SOAP, доступную с использованием WHM/cPanel.

У меня вопрос: как отправить правильное пространство имен конверта?

1 ответ

Решение

При создании вашего объекта soap_client вы можете передать массив опции, по умолчанию версия будет 1.1 согласно документации php.

Похоже, что у вас есть ошибка, указывающая на то, что сервисом может быть SOAP 1.2, поэтому вам нужно установить его на 1.2...

$client = new SoapClient('https://live.domainbox.net/?WSDL', array('soap_version' => SOAP_1_2));

Попробуйте это!

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