Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

InterPlanet

[Resolvido] Erro no tratamento de retorno XML com cURL + xmlLib

Recommended Posts

Olá pessoal!

 

Começei com XML no fds, devido a necessidade de construir um retorno mais profissional pro meu sistema de cálculo de fretes e cep's offline (independente dos correios), ai apareceu o problema!

 

Aqui (Correios):

http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?nCdEmpresa=&sDsSenha=&sCepOrigem=01527020&sCepDestino=59010660&nVlPeso=2&nVlValorDeclarado=0&nCdServico=41106&nCdFormato=1&nVlComprimento=30&nVlAltura=30&nVlLargura=30&sCdMaoPropria=N&sCdAvisoRecebimento=N&nVlDiametro=0&strRetorno=xml

 

O retorno contém o encoding:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
E este retorno é tratado normalmente pelo meu sistema (cURL pra pegar os dados + Classe xmlLib pra converter os dados em array e facilitar o tratamento)

 

Mas quando eu ponho essa linha no meu arquivo xml, dá pau no retorno e o problema em não utilizar esta linha, como já devem ter percebido, na falta do encoding, a geração do XML com acentos, falha (caractere inválido). E este acentos são imprencindíveis no meu retorno de CEP, pois contém logradouros e nomes de cidades com acentos, atualmente, estou removendo os acentos (tipo SEO) pra não dar pau na geração e a linha de encoding no retorno.

 

Meu retorno XML:

https://www.ipis.com.br/sistemas/correio/cep.php?Usuario=0&CEP=59010660

 

Minha função que gera o retorno:

<?
Function CEP_RetornoXML($Erro = Array(), $CEP = Array(), $Consulta = Array())
{
//$RT                                    = '<?xml version="1.0" encoding="ISO-8859-1"?>';
$RT                                   .= "<!--IPIS - https://ipis.com.br-->\n<!--Fernando Lima - fernando@ipis.com.br-->\n<!--Consulta de CEP-->\n<Retorno>\n";

If (empty($Erro['Erro']))
   { $RT                              .= "<Erro>0</Erro>\n";
     // CEP
     If (!empty($CEP))
        { $RT                         .= "<CEP>\n";
          $RT                         .= "<CEP>".$CEP['CEP']."</CEP>\n<Cidade>".(empty($CEP['Cidade']) ? $CEP['Regiao'] : Geral_TextoSEO($CEP['Cidade'], 0, 0))."</Cidade>\n<Regiao>".$CEP['Regiao']."</Regiao>\n<Estado>".$CEP['Estado']."</Estado>\n";
          $RT                         .= "</CEP>\n";
          $RT                         .= "<Endereco>\n";
          $RT                         .= "<Tipo>".Geral_TextoSEO($CEP['Endereco']['Tipo'], 0, 0)."</Tipo>\n<Nome>".Geral_TextoSEO($CEP['Endereco']['Nome'], 0, 0)."</Nome>\n<Bairro>".Geral_TextoSEO($CEP['Endereco']['Bairro'], 0, 0)."</Bairro>\n<Localidade>".Geral_TextoSEO($CEP['Endereco']['Localidade'], 0, 0)."</Localidade>\n";
          $RT                         .= "</Endereco>\n";
        }
     // CONSULTA
     If (!empty($Consulta))
        { $RT                         .= "<Consulta>\n<Tipo>CEP</Tipo>\n<Data>".date('d/m/Y')."</Data>\n<IP>".$Consulta['IP']."</IP><Usuario>".$Consulta['Nome']."</Usuario><Saldo>".$Consulta['Saldo']."</Saldo>\n</Consulta>\n"; }

     // ERRO
   } Else { $RT                       .= "<Erro>".$Erro['Erro']."</Erro>\n<Mensagem>".Geral_TextoSEO($Erro['Desc'], 0, 0)."</Mensagem>\n"; }

$RT                                   .= "</Retorno>\n";

Return $RT;
}
?>

Impressão do XML:

<?
// RETORNO
                                         header('Content-Type: application/xml; charset=ISO-8859-1');
$Retorno                               = CEP_RetornoXML($Erro, $CEP, $Consulta);
Exit($Retorno);
?>

 

Tratamento do retorno:

<?
Include('sis/classes/xmlLib.php');

$URL                                   = 'http://192.168.0.189/correio/cep.php?CEP=59014000';
$cURL                                  = Geral_cURL($URL);

b($cURL); // == <pre>Array cURL</pre>

if (!empty($cURL['Erro']))
   { $RT                               = Array('Erro' => $cURL['Erro'], 'Desc' => $cURL['Desc']);
     Return $RT; }

/* AQUI, tentei transformar o retorno em arquivo, mas nao deu!
$file                                  = 'teste.xml';
$var                                   = fopen($file, 'a');
                                         fwrite($var, $cURL['Retorno']);
                                         fclose($var);
*/

$XML                                   = new XMLToArray($cURL['Retorno'], array(), array(), false, false);
$Dados                                 = $XML->getArray();


b($Dados); // == <pre>Array Dados</pre>
?>

b($cURL) imprime:

Array

(

[Erro] => 0

[Retorno] =>

 

 

 

 

0

 

59014000

Natal

Capital

RN

 

 

Rua

João XXIII

Mae Luiza

Natal

 

 

 

)

 

 

b($Dados) não imprime nada! :(

 

 

Alguém pode me ajudar? Tenho que codificar a linha de encoding? html_entites, tem algum erro no xml? Alguma luz?

Desde já, grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

RESOLVIDO!

 

O Problema é que o php ao gerar o xml gera uma linha em branco, a primeira, e isso estava causando erro na leitura do xml pela classe xml, assim, a adição de trim() no retorno passado a xml classe, resolveu o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.