如何在php肥皂请求信封上发送空参数?
问题描述:
我一直在尝试了一段日子没有任何成功如何在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。任何帮助将不胜感激;提前致谢!
答
正如我所看到的,您只是复制并粘贴了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请求。这是一个免费的程序,您可以下载并且易于管理。