如何更改使用SOAP请求发送的命名空间?

时间:2012-10-11 18:58:35

标签: php api namespaces soap-client

与此问题相关:How to request an answer from a SOAP XML API?

我有这个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版本不匹配:Envelope命名空间    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}抛出   第20行/home/nosa/public_html/dev/check-domain-availability.php

我删除并重新编译了apache,以包含使用WHM / cPanel提供的最新SOAP版本。

我的问题是: 如何发送正确的信封命名空间?

1 个答案:

答案 0 :(得分:5)

构建soap_client对象时,可以传递一个选项的数组,默认情况下,根据php文档版本将是1.1。

您所遇到的错误似乎指出该服务可能是SOAP 1.2,因此您需要将其设置为1.2 ...

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

试试吧!