Jump to content
Fábio BN

Como tratar Retorno de XML com erro do servidor?

Recommended Posts

Olá.

Tenho uma dúvida mas não sei se saberão me ajudar, tenho um E-commerce que faz o calculo de frete através de XML buscando no servidor dos Correios, como eu faço para quando o servidor dos Correios demorar de responder ou simplesmente tiver offline, ao invés de dar uma tela de erro, eu conseguir tratar esse retorno e redirecionar o cliente para um Outro Link alternativo.
Ou seja, caso demorar por exemplo mais de 10 segundos o retorno, ou quando simplesmente cair o servidor, conseguir redirecionar para uma página de contingência de uma tabela própria.

 

Abraços!

Fábio Nascimento!

Share this post


Link to post
Share on other sites

Olá. Um amigo meu me orientou a pegar alguma variável de retorno do XML que retorne com um valor fixo,  e fazer uma verificação, se algo vier errado ou em branco, eu faço um IF e coloco o código alternativo,  é interessante salvar Logs desses acontecimentos ou enviar por e-mail para ficarmos sabendo quando o retorno do XML deu algum erro até por questão de monitoramento.
Agora é só aguardar o servidor cair para ver se ficou bom.
Abraços!

Share this post


Link to post
Share on other sites

Olá.


Eu estava fazendo testes, quando coloco uma URL do XML inválida, sempre dá erro na linha abaixo, e não consigo tratar o erro.
$xml = simplexml_load_file($url);

Estou com o mesmo problema dessa pessoa desse Link:
https://pt.stackoverflow.com/questions/330612/como-tratar-erros-em-caso-de-falha-no-simplexml-load-file-em-php
 

Eu já procurei algumas alternativas no site do PHP onde mostram formas de ignorar erros do xml mas nenhuma funcionou.

Para eu simular a queda do servidor eu coloco um Link quebrado no link do xml

 

Abraços!

Share this post


Link to post
Share on other sites

Consegui não exibir o erro removendo da página:

error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', true);

 

 

Abraços!

Share this post


Link to post
Share on other sites

No PHP achei uma forma de desativar erros sem precisar remover as linhas:
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', true);

 

Basta colocar um @ na frente da função que se der erro não aparece na tela.

 

Abraços!

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Fernando Rafael
      Olá a todos, atualmente estou quebrando a cabeça com 3 campos da geração do XML de NFCE/NFE, são eles:   <SignatureValue> ,  <DigestValue>   e  <X509Certificate>, como  faço para gerar esses 3 campos?
       
      Procurei na internet, mas não achei nada que me ajude, gostaria de fazer 100% com php e de preferência  manualmente (sem a utilização de classes prontas na qual é difícil de entender o código).
       
      Já tenho o certificado em PFX, e já gerei um certificado do tipo PEM.
       
      OBS 1: não precisam explicar ou mandar códigos de como inserir o conteúdo gerado nas tags <SignatureValue>  e  <X509Certificate>.
       
      OBS 2: O campo <DigestValue>  notei em alguns fóruns que é um retorno da Sefaz, é correto isso?
       
      ,
    • By giovannaalves
      Apareceu esse erro na página para retornar os dados do tabela do banco de dados:
      Fatal error: Call to a member function query() on a non-object in /home/storage/e/e6/47/grupoct/public_html/rondact/ronda2.php on line 4
       
      Meu código:
      <?php
          include("conexao.php");
          $consulta = "SELECT * FROM TAG_LIDA";
          $con = $mysqli->query($consulta) or die($mysqli->error);
          
      ?>
      <html>
          <head>
              <meta charset="utf-8">
          </head>
          <body>
              <table border="1">
                  <tr>
                      <td>Código posto</td>
                      <td>Data</td>
                      <td>Hora</td>
                      <td>Nome posto</td>
                      <td>Tag</td>
                  </tr>
                  <?php while($dado = $con->mysql_fetch_array()){ ?>
                  <tr>
                      <td><?php echo $dado["TAG_COD_POSTO"]; ?></td>
                      <td><?php echo date("d/m/Y", strtotime( $dado["TAG_DATA"])); ?></td>
                      <td><?php echo $dado["TAG_HORA"]; ?></td>
                      <td><?php echo $dado["TAG_NOME_POSTO"]; ?></td>
                      <td><?php echo $dado["TAG_TAG"]; ?></td>
                  </tr>
                  <?php } ?>
              
              </table>
          </body>
      </html>
    • By giovannaalves
      Apareceu esse erro na página para retornar os dados do tabela do banco de dados:
      Fatal error: Call to a member function query() on a non-object in /home/storage/e/e6/47/grupoct/public_html/rondact/ronda2.php on line 4
       
      Meu código:
      <?php
          include("conexao.php");
          $consulta = "SELECT * FROM TAG_LIDA";
          $con = $mysqli->query($consulta) or die($mysqli->error);
          
      ?>
      <html>
          <head>
              <meta charset="utf-8">
          </head>
          <body>
              <table border="1">
                  <tr>
                      <td>Código posto</td>
                      <td>Data</td>
                      <td>Hora</td>
                      <td>Nome posto</td>
                      <td>Tag</td>
                  </tr>
                  <?php while($dado = $con->mysql_fetch_array()){ ?>
                  <tr>
                      <td><?php echo $dado["TAG_COD_POSTO"]; ?></td>
                      <td><?php echo date("d/m/Y", strtotime( $dado["TAG_DATA"])); ?></td>
                      <td><?php echo $dado["TAG_HORA"]; ?></td>
                      <td><?php echo $dado["TAG_NOME_POSTO"]; ?></td>
                      <td><?php echo $dado["TAG_TAG"]; ?></td>
                  </tr>
                  <?php } ?>
              
              </table>
          </body>
      </html>
    • By edionas
      como posso exibir os dados do arquivo
      http://api.tcm.ce.gov.br/sim/1_0/municipios.xml
      em uma tabela?
    • By brunoogm
      Pessoal tenho o seguinte codigo:
       
      <!DOCTYPE html>
      <html lang="pt-br">
          <head>
              <meta charset="utf-8">
              <meta http-equiv="X-UA-Compatible" content="IE=edge">
              <meta name="viewport" content="width=device-width, initial-scale=1">
              <title>KADAM - Menu Digital</title>
              <link rel="icon" href="../imagens/img.png" type="image.png" />
              <link href="../css/bootstrap.min.css" rel="stylesheet">
              <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
              <link rel='stylesheet' href='https://use.fontawesome.com/releases/v5.7.0/css/all.css' integrity='sha384-lZN37f5QGtY3VHgisS14W3ExzMWZxybE1SJSEsQp9S+oqd12jhcu+A56Ebc1zFSJ' crossorigin='anonymous'>
              <script src="../js/bootstrap.min.js"></script>
              
              <script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
              <script src="sweetalert2.all.min.js"></script>
              <script src="https://cdn.jsdelivr.net/npm/promise-polyfill"></script>
          </head>
          <body>
              <div class="container theme-showcase" role="main">

      <?php
      session_start();
      include_once("php/conexao.php");

      $idPessoa = $_SESSION['id_pessoa'];
      $id_cliente = $_SESSION['id_user']; 
      $cont = $_SESSION['cont'];
       
      echo "ID cliente: ".$id_cliente."<br>";
      echo "Cont: ".$cont."<br>";
       
      $endereco = filter_input(INPUT_POST, 'endereco');
      $total = filter_input(INPUT_POST, 'Total');
      $metodopag = filter_input(INPUT_POST, 'pagamento');
      $troco = filter_input(INPUT_POST, 'troco');
      $cpfnota = filter_input(INPUT_POST, 'cpfnota');
      $query= "Select * from enderecocliente WHERE CodigoEndereco = $endereco";
      $resulta = mysqli_query($conectar, $query);
      $resultado = mysqli_fetch_array($resulta);

      //echo "Cod Endereco: ".$endereco."<br>";
      //echo "Nome Cidade: ".$resultado['NomeCidade']."<br>";
      //echo "Endereco: ".$resultado['Endereco']."<br>";
      //echo "Cep: ".$resultado['CEP']."<br>";
      //echo "numero: ".$resultado['Numero']."<br>";
      //echo "Cod Endereco: ".$resultado['Bairro']."<br>";
      //echo "Cod Endereco: ".$resultado['Estado']."<br>";
      //echo "Cod Endereco: ".$metodopag."<br>";
      //echo "Total: ".$total."<br>";

      $query ="UPDATE comanda SET ValorTotal= '$total', CodigoEndereco= $resultado[CodigoEndereco], CodigoMetodoPag = $metodopag, CodigoSituacao = '3' WHERE CodigoComanda = $cont";
      $resultado = @mysqli_query($conectar, $query);
      $query2 ="INSERT INTO pagamento  (CodigoComanda, CpfNota, CodigoMetodoPag, Troco, ValorTotal) VALUES ('$cont', '$cpfnota', '$metodopag', '$troco', '$total')";
      $resultado2 = @mysqli_query($conectar, $query2);
      $_SESSION['cont'] = 0;
      if (mysqli_affected_rows($conectar)) {
              
      ?>
      <script>
          swal({
              
              closeOnEsc: false,
              closeOnClickOutside: false,
              title: "Sucesso!",
              text: "Parabéns! Pedido enviado com sucesso!",
              icon: "success",
              button: "Ok",
                  }).then(function(){   
                      window.location.href = "../carrinho.php"; 
                      });
      </script>
                  
                  <?php } else { ?>
      <script>
          swal({
              
              closeOnEsc: false,
              closeOnClickOutside: false,
              title: "Erro!",
              text: "Ops! Seu pedido não foi enviado!",
              icon: "error",
              button: "Ok",
                  }).then(function(){   
                      window.location.href = "../carrinho.php"; 
                      });
      </script>
      <?php } ?>
       
       
      Testando em localhost esse código funciona normalmente onde os valores das sessions estão sempre disponíveis,
      porem agora que coloquei o site no ar essas sessões não estão mais apresentando valores, e é somente nessa pagina que isso acontece
      nas outras paginas elas apresentam seus valores corretamente...
       
      Alguém tem alguma sugestão, do que poderia ser ?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.