Como modificar o xml que o SoapClient cria?
Tenho seguinte código:
<?php
$client = new SoapClient('http://whatever.php.net/whatever.asmx?wsdl', array(
'trace' => 1,
'exceptions' => 1,
));
$auth = array(
'UserName' => 'chinelo@php.net',
'Password' => '123',
);
$header = new SoapHeader('http://whatever.php.net/', 'AuthHeader', $auth, false);
$client->__setSoapHeaders($header);
try {
$retorno = $client->__soapCall('findWhatever', array());
} catch (SoapFault $fault) {
echo $client->__getLastRequest() . "\n";
}
?>
Que está me gerando o seguinte xml:
<SOAP-ENV:Envelope>
<SOAP-ENV:Header>
<ns2:AuthHeader>
<item>
<key>UserName</key>
<value>chinelo@php.net</value>
</item>
<item>
<key>Password</key>
<value>123</value>
</item>
</ns2:AuthHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:findWhatever/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Porém o dono do webservice disse que tem que ser nesse formato:
<soapenv:Envelope>
<soapenv:Header>
<web:AuthHeader>
<web:Username>chinelo@php.net</web:Username>
<web:Password>123</web:Password>
</web:AuthHeader>
</soapenv:Header>
<soapenv:Body>
<web:findWhatever/>
</soapenv:Body>
</soapenv:Envelope>
Eu até consegui fazer um cabeçalho assim:
<ns2:AuthHeader>
<UserName>chinelo@php.net</UserName>
<Password>123</Password>
</ns2:AuthHeader>
Trocando o array $auth por um objeto desta classe abaixo:
class AuthH{
var $UserName = "chinelo@php.net";
var $Password = "123";
}
$auth = new AuthH();
$header = new SoapHeader('http://whatever.php.net/', 'AuthHeader', $auth, false);
Mas não vou conseguir criar um atributo chamado "$web:UserName" na classe...
E nem mudar ns2, ns1 por web