我需要在我的SOAP请求(使用1.1)中包含此节点:
<CredentialsHeader xmlns="http://www.url.com/Services/P24ListingService11"
<EMail>ricky@email.net</EMail>
<Password>password</Password>
</CredentialsHeader>
所以我有以下PHP:
$client = new SoapClient("https://exdev.www.example.com/Services/example.asmx?WSDL",
array(
"trace" => 1,
"exceptions" => 0,
"cache_wsdl" => 0,
'soap_version' => SOAP_1_1
)
);
$CredentialObject = new SoapVar(array('EMail' => 'ricky@email.net', 'Password' => 'password'), SOAP_ENC_OBJECT);
会产生:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.example.com/Services/Example">
<SOAP-ENV:Header>
<ns1:CredentialsHeader>
<EMail>ricky@email.net</EMail>
<Password>password</Password>
</ns1:CredentialsHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:EchoAuthenticated/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我需要做的就是防止使用
ns1
并实际上在节点中定义xmlns
,如下所示:<CredentialsHeader xmlns="http://www.example.com/Services/Example">
<EMail>ricky@email.net</EMail>
<Password>password</Password>
</CredentialsHeader>
我已经在Firefox Poster中对其进行了测试,并且知道更改可以解决该问题。
最佳答案
$CredentialObjectXML = '<CredentialsHeader xmlns="http://www.example.com/Services/Example">
<EMail>'.$UserName.'</EMail>
<Password>'.$Password.'</Password>
</CredentialsHeader>';
$CredentialObject = new SoapVar($CredentialObjectXML,XSD_ANYXML);
这样,您可以直接将XML与XSD_ANYXML类型一起使用。
希望这能解决您的问题。