2013-03-22 151 views
2

我一直在尝试了一段日子没有任何成功如何在php肥皂请求信封上发送空参数?

这是我的代码:

<?$requestPesquisaTarifas = '<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
<soap:Body> 
<PesquisaTarifas xmlns="http://volator.com.br"> 
    <parTarifaHeader> 
    <Sessao> 
     <SiglaCiaAerea>string</SiglaCiaAerea> 
     <IDSessao>long</IDSessao> 
     <Verificador>string</Verificador> 
     <MsgRetorno>string</MsgRetorno> 
    </Sessao> 
    <SegmentoIda> 
     <Etapa> 
     <Etapa xsi:nil="true" /> 
     <Etapa xsi:nil="true" /> 
     </Etapa> 
     <IdFretamentoRotaTrechosVenda>int</IdFretamentoRotaTrechosVenda> 
     <NroVoo>string</NroVoo> 
     <SiglaOrigem>string</SiglaOrigem> 
     <SiglaDestino>string</SiglaDestino> 
     <TotalPaxADT>int</TotalPaxADT> 
     <TotalPaxCHD>int</TotalPaxCHD> 
     <TotalPaxINF>int</TotalPaxINF> 
     <NroLugaresLivres>int</NroLugaresLivres> 
     <Classe>Economica or Executiva or PrimeiraClasse</Classe> 
     <IdaVolta>boolean</IdaVolta> 
     <SiglaTarifaria>string</SiglaTarifaria> 
    </SegmentoIda> 
    <SegmentoVolta> 
     <Etapa> 
     <Etapa xsi:nil="true" /> 
     <Etapa xsi:nil="true" /> 
     </Etapa> 
     <IdFretamentoRotaTrechosVenda>int</IdFretamentoRotaTrechosVenda> 
     <NroVoo>string</NroVoo> 
     <SiglaOrigem>string</SiglaOrigem> 
     <SiglaDestino>string</SiglaDestino> 
     <TotalPaxADT>int</TotalPaxADT> 
     <TotalPaxCHD>int</TotalPaxCHD> 
     <TotalPaxINF>int</TotalPaxINF> 
     <NroLugaresLivres>int</NroLugaresLivres> 
     <Classe>Economica or Executiva or PrimeiraClasse</Classe> 
     <IdaVolta>boolean</IdaVolta> 
     <SiglaTarifaria>string</SiglaTarifaria> 
    </SegmentoVolta> 
    <QtdPassageirosADT>int</QtdPassageirosADT> 
    <QtdPassageirosCHD>int</QtdPassageirosCHD> 
    <QtdPassageirosINF>int</QtdPassageirosINF> 
    <SiglaClasseTarifariaIda>string</SiglaClasseTarifariaIda> 
    </parTarifaHeader> 
</PesquisaTarifas> 
</soap:Body> 
</soap:Envelope>'; 

$cabecalhoPesquisaTarifas = array(
'POST /WSReservaweb.asmx HTTP/1.1', 
'Host: webservice.oceanair.com.br', 
'Content-Type: text/xml; charset=utf-8', 
'Content-Length: '. strlen($requestPesquisaTarifas), 
'SOAPAction: "http://volator.com.br/PesquisaTarifas"'); 

$curlPesquisaTarifas = curl_init(); // Iniciar o Curl 

curl_setopt($curlPesquisaTarifas, CURLOPT_URL, $enderecoWsdlAvianca); // O Endereço que irá acessar 
curl_setopt($curlPesquisaTarifas, CURLOPT_RETURNTRANSFER, true); // Para Retornar o resultado 
curl_setopt($curlPesquisaTarifas, CURLOPT_VERBOSE , false); // Modo Verbose, para exibir o processo na tela 
curl_setopt($curlPesquisaTarifas, CURLOPT_HEADER , false); // Se precisar de retorno dos cabeçalhos 
curl_setopt($curlPesquisaTarifas, CURLOPT_TIMEOUT, 30); // Tempo máximo em segundos que deve esperar responder 
curl_setopt($curlPesquisaTarifas, CURLOPT_HTTPHEADER, $cabecalhoPesquisaTarifas); // Cabecalho para ser enviado 
curl_setopt($curlPesquisaTarifas, CURLOPT_FOLLOWLOCATION, true); // Seguir redirecionamentos 
curl_setopt($curlPesquisaTarifas, CURLOPT_POST, true); // Usar metodo post 
curl_setopt($curlPesquisaTarifas, CURLOPT_POSTFIELDS, $requestPesquisaTarifas); // Dados para serem processados 
curl_setopt($curlPesquisaTarifas, CURLOPT_SSL_VERIFYPEER, false); // Caso precise verificar certificado 

$resultadoPesquisaTarifa = curl_exec($curlPesquisaTarifas); 

include ("arrayPesquisaTarifas.php"); 

include ("insertPesquisaTarifas.php"); 


?> 

我缺少什么?我每次执行的代码,我得到这个错误:

soap:ClientServer was unable to read request. ---> There is an error in XML document (8, 36). ---> Input string was not in a correct format. 

我检查和复查指定的行和列,并不能看到任何错误的XML。任何帮助将不胜感激;提前致谢!

回答

1

正如我所看到的,您只是复制并粘贴了SOAP头的定义,而没有提供正确的值。这样,将要解释这些字段的Web服务器无法理解您想要获取的内容。您必须确切地验证服务提供者如何解释数据。例如,在:

<Classe>Economica or Executiva or PrimeiraClasse</Classe> 

正确的输入是:

<Classe>Economica</Classe> 

如果您正在使用Web服务努力尝试以下操作:

首先,你必须了解更多有关Web服务,SOAP和REST请求,WSDL和XML,www.w3schools.com中的快速浏览是一个好的开始。

然后,您需要检查webservice的提供者有关每个字段的含义以及字段值应该如何传递的更多信息。

我还建议SoapUI在开发这样的代码时测试您的SOAP/REST请求。这是一个免费的程序,您可以下载并且易于管理。