2013-03-22 152 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請求。這是一個免費的程序,您可以下載並且易於管理。