Hélio Barbosa
consumir webservice c# com php
01 de August de 2013 às 02:15PM
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
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.