02/05/2015

Fazer leitura de XML com php, está dando erro, alguém pode ajudar?

Olá pessoal, estou fazendo uma integração do meu sistema de vendas com uma plataformas de pagamentos on line, e eles usam XML, até certo momento ocorreu tudo bem até que eu precisei usar o bendito XML pra inserir os dados no meu banco de dados, e está dando erro!

é o seguinte!

tenho o seguinte código que é o que o site fornece como exemplo para integração.

<?php 

$url = "https://go.gerencianet.com.br/teste/api/pagamento/xml";
$token = "token";

$xml = "<?xml version='1.0' encoding='utf-8'?>
        <integracao>
            <itens>
                <item>
                    <itemValor>500</itemValor>
                    <itemDescricao>Solicitacao de pagamento xml</itemDescricao>
                </item>
            </itens>
            <cliente>
                <nome>nome_cliente</nome>
                <cpf>cpf_cliente</cpf>
                <email>email_cliente</email>
                <nascimento>dt_nascimento_cliente</nascimento>
                <celular>cel_cliente</celular>
                <logradouro>logradouro_cliente</logradouro>
                <numero>numero_cliente</numero>
                <bairro>bairro_cliente</bairro>
                <cidade>cidade_cliente</cidade>
                <cep>cep_cliente</cep>
                <estado>estado_cliente</estado>
            </cliente>
        </integracao>";
 
$xml = str_replace(array("\n", "\r", "\t"), '', $xml);
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 2);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
$data = array("token" => $token, "dados" => $xml);
 
curl_setopt($ch, CURLOPT_POST, true);
 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
 
curl_close($ch);
 
echo "<xmp>".$response."</xmp>";

 ?>


ele me gera o seguinte XML

<?xml version="1.0" encoding="utf-8"?>
<integracao><status>2</status><resposta><transacao>11111</transacao><link>https://go.gerencianet.com.br/?b=11111/#/teste/pagar/11111-11111-11111</link></resposta></integracao>


e estou tentando fazer a leitura assim!

<?php
// Faz o load do arquivo XML e retorna um objeto
$arquivo_xml = simplexml_load_file('arquivo.php');
 
echo $arquivo_xml->resposta->link;
?>


ai é onde mora o problema, sempre da erro.
o erro que recebo sempre é este!

Warning: simplexml_load_file() [function.simplexml-load-file]: t.php:27: parser error : Extra content at the end of the document in /home/u330150777/public_html/l.php on line 3

Warning: simplexml_load_file() [function.simplexml-load-file]: </integracao>"; in /home/u330150777/public_html/l.php on line 3

Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in /home/u330150777/public_html/l.php on line 3


mas se eu pego o XML que gera no arquivo PHP e insiro em um arquivo .XML funciona tudo normal, eu podia até criar um arquivo XML e reescrever ele com esse código.

<?php
// Escreve o arquivo
$fp = fopen('meus_links.xml', 'w+');
fwrite($fp, $xml);
fclose($fp);
?>


mas eu queria evitar dar essa volta toda e ir direto ao ponto, alguém sabe e pode ajudar?

PHP

Cleyton Caetano