como gerar um pedido de sabão em php deste xml?
Estou cansado de tentar enviar uma solicitação com o SOAP. este é meu xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:bpf="http://schemas.datacontract.org/2004/07/Bpf.Security.Common" xmlns:bpf1="http://schemas.datacontract.org/2004/07/Bpf.Security.Authentication.Common">
<soapenv:Header>
<InfoTag xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.w3.org/BaufestProductivityFramework">
<ClientIp xmlns="http://schemas.datacontract.org/2004/07/Bpf.Common.Service">200.125.145.10</ClientIp>
<CompanyId xmlns="http://schemas.datacontract.org/2004/07/Bpf.Common.Service">1</CompanyId>
<UserName xmlns="http://schemas.datacontract.org/2004/07/Bpf.Common.Service">someUser</UserName>
</InfoTag>
</soapenv:Header>
<soapenv:Body>
<tem:LogIn>
<tem:token>
<bpf:type>
<bpf1:Description>someDesc</bpf1:Description>
<bpf1:Id>1</bpf1:Id>
<bpf1:Name>someDesc</bpf1:Name>
</bpf:type>
<bpf:password>somePass</bpf:password>
<bpf:userName>someUser</bpf:userName>
</tem:token>
</tem:LogIn>
</soapenv:Body>
</soapenv:Envelope>
essa função manda o cabeçalho com um namespace, mas tem mais de um ... tenho que mandar todos eles?
private function __getHeaders() {
$ns = 'http://schemas.xmlsoap.org/soap/envelope/'; //Namespace of the WS.
$ip = $_SERVER['REMOTE_ADDR'];
//Body of the Soap Header.
$headerbody = array('ClientIp' => $ip,
'CompanyId' => 1,
'UserName' => 'someUser'
);
//Create Soap Header.
$header = new SOAPHeader($ns, 'InfoTag', $headerbody);
return $header;
}
public function prepareWs(){
$wsdl="the web service";
$client = new SoapClient($wsdl, array('trace' => true));
//Set the Headers of Soap Client.
$header = $this->__getHeaders();
$client->__setSoapHeaders($header);
Eu tento enviar este corpo, eu inspecionei exceção com falha de sabão, mas a mensagem só retorna "pedido incorreto NULL NULL NULL".
$params = new stdClass();
$params = new SoapVar("<tem:token>
<bpf:type xmlns:bpf="http://schemas.datacontract.org/2004/07/Bpf.Security.Common">
<bpf1:Description xmlns:bpf1="http://schemas.datacontract.org/2004/07/Bpf.Security.Authentication.Common">someDesc</bpf1:Description>
<bpf1:Id xmlns:bpf1="http://schemas.datacontract.org/2004/07/Bpf.Security.Authentication.Common">1</bpf1:Id>
<bpf1:Name xmlns:bpf1="http://schemas.datacontract.org/2004/07/Bpf.Security.Authentication.Common">someName</bpf1:Name>
</bpf:type>
<bpf:password xmlns:bpf="http://schemas.datacontract.org/2004/07/Bpf.Security.Common">somePass</bpf:password>
<bpf:userName xmlns:bpf="http://schemas.datacontract.org/2004/07/Bpf.Security.Common">someUser</bpf:userName>
</tem:token>", XSD_ANYXML);
$response = $client->Login($params);
}
Com CURL eu posso enviar este XML e recebi a resposta XML também, mas com SOAPClient eu não posso enviar este pedido.
Espero que alguém possa me ajudar, obrigado.
Este é o código que posso ver com o firebug, a única coisa que obtenho é "pedido incorreto". Quando eu uso __getLastRequest () eu vejo o mesmo ... Eu acho que os cabeçalhos não devem ser enviados corretamente, no entanto, a função __setSoapHeaders retorna verdadeiro. Esta é a saída:
<soap-env:envelope xmlns:ns1="http://tempuri.org/" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:header>
<soap-env:contextinformation>
<item>
<key>ClientIp</key>
<value>127.0.0.1</value>
</item>
<item>
<key>CompanyId</key>
<value>1</value>
</item>
<item>
<key>UserName</key>
<value>someUser</value>
</item>
</soap-env:contextinformation>
</soap-env:header>
<soap-env:body>
<tem:login>
<tem:token>
<bpf:type>
<bpf1:description>someDesc</bpf1:description>
<bpf1:id>1</bpf1:id>
<bpf1:name>someName</bpf1:name>
</bpf:type>
<bpf:password>somePass</bpf:password>
<bpf:username>someUser</bpf:username>
</tem:token>
</tem:login>
</soap-env:body>
</soap-env:envelope>