¿Cómo generar una solicitud de jabón en PHP a partir de este xml?

Estoy cansado de intentar enviar una solicitud con SOAP. este es mi xml

<code><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>
</code>

esta función envía el encabezado con un espacio de nombres, pero hay más de uno ... ¿Tengo que enviarlos todos?

<code> 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);
</code>

Intento enviar este cuerpo, he inspeccionado la excepción con el fallo de jabón pero el mensaje solo devuelve "solicitud incorrecta NULL NULL NULL".

<code>$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);

}
</code>

Con CURL puedo enviar este XML y también recibí la respuesta XML, pero con SOAPClient no puedo enviar esta solicitud.

Espero que alguien me pueda ayudar, gracias.

Este es el código que puedo ver con Firebug, lo único que obtengo es una "solicitud incorrecta". Cuando uso __getLastRequest () veo lo mismo ... Supongo que los encabezados no deberían enviarse correctamente, sin embargo, la función __setSoapHeaders devuelve true. Esta es la salida:

<code><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>
</code>

Respuestas a la pregunta(1)

Su respuesta a la pregunta