Jump to content
juninhogpe

Listar dados de JSON com PHP e Curl

Recommended Posts

Pessoal, estou consumindo uma API com PHP + Curl.

 

Segue abaixo como estão os dados:

 

JSON:

{"odata.metadata":"http:\/\/ip:porta\/api\/sistema\/$metadata#sistema_interno.sistema_interno_cond_pgto_lista","odata.count":2,"value":[{"cond_pgto":466,"codigo":"000","descricao":"DINHEIRO","taxa":null,"tipo_operacao":"A","desconto":0,"tipo_pgto":0},{"condicoes_pgto":820,"codigo":"002","descricao":"MISTA","taxa":null,"tipo_operacao":"A","desconto":null,"tipo_pgto":10}]}

 

chamada PHP:

            $url = 'http://ip:/porta/end_api?$format=json';
            $username = 'usuario'; 
            $password = 'senha';

            $ch  = curl_init();

            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
            curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

            $output = curl_exec($ch);
            $info = curl_getinfo($ch);

            curl_close($ch);

            $lista = json_decode($output, TRUE);

        ?>


         <table>
            <tr><th>Codigo</th></tr>

            <?php
				foreach ($lista['value'] as $lst):
            ?>
             	<tr><td>
                  	<?php echo ($lst['codigo']) ?>
                </td></tr>

            <?php endforeach;?>
		</table>

E quando executo o código tenho o retorno:

Warning: Invalid argument supplied for foreach() in C:\AppServ\www\api\teste.php on line 44

No caso essa linha 44:

foreach ($lista['value'] as $lst):

 

Conseguem me ajudar a entender o por que do erro?

 

Obrigado.

Share this post


Link to post
Share on other sites

@Maujor obrigado pelo retorno.

 

Fiz a alteração assim:

foreach ($lista as $lst):

Mais o erro ainda permanece.

 

Passei o 'value', pois pensei que no JSON a parte 

"value":[{"cond_pgto":466,.........

Eu teria que passar ele, pois é o nome do array ou estou enganado?

Share this post


Link to post
Share on other sites

@juninhogpe, beleza!
 

Faça o seguinte teste:

<?php

$output= '{"odata.metadata":"http:\/\/ip:porta\/api\/sistema\/$metadata#sistema_interno.sistema_interno_cond_pgto_lista","odata.count":2,"value":[{"cond_pgto":466,"codigo":"000","descricao":"DINHEIRO","taxa":null,"tipo_operacao":"A","desconto":0,"tipo_pgto":0},{"condicoes_pgto":820,"codigo":"002","descricao":"MISTA","taxa":null,"tipo_operacao":"A","desconto":null,"tipo_pgto":10}]}';

$listas = json_decode($output, true);

foreach ($listas['value'] as $lista) {
    echo $lista['codigo'];	
    echo "<br>";
}

/* 
 Saida: 
  000
  002		
*/

A sua iteração esta correta, verifique o valor da variável $output!

Share this post


Link to post
Share on other sites

@EdCesar, obrigado pelo retorno.

 

Do jeito que você fez eu passando o conteúdo dentro do $output, funcionou.

 

Engraçado que no meu output eu chamo assim:

 

$ch  = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

$output = curl_exec($ch);

Estou sem entender como corrigir.

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 Claudia França
      Prezados preciso de uma ajudar para entender o que mudar e fazer a integracao com base no link https://developercielo.github.io/manual/cielo-ecommerce#visacheckout   ( padrão cielo)
      Eu gostaria de entender se so preciso mudar o nome da variáveis  para fazer com que a cielo receba a informação da transação certa. Como faço para que as requisições sejam enviadas no padrão da Cielo. ? 
       
      No php imagem, está o que eu tenho no ambiente.
      no link como a cielo quer.
       
       


    • By edionas
      Bom dia
      a tempos tenho tentando exportar dados deste portal (https://www.governotransparente.com.br/transparencia/api/v1/json/remessas/1194487) para uma tabela em HTML, pois preciso exibir os dados sem necessidade de ter que ir para uma pagina externa do site.
    • By Carlos Ramos Web
      Olá, pessoal.
      Estou criando um sistema paralelo ao wordpress contudo buscando as informações do banco de dados wp.
      Me deparei com uma string em JSON vindo da tabela wp_usermeta mais preciso no campo meta_value.
       
      a:13:{s:3:"cpf";s:11:"97277754115";s:6:"adocao";s:1:"4";s:11:"codigo_inep";s:8:"52037983";s:11:"nome_escola";s:29:"Colégio Externato São José";s:13:"numero_escola";s:3:"221";s:11:"escola_cnpj";s:14:"33707746000512";s:3:"cep";s:8:"74120180";s:8:"telefone";s:11:"62985286122";s:18:"data_de_nascimento";s:10:"25/05/1982";s:6:"perfil";s:10:"Supervisor";s:8:"segmento";a:1:{i:0;s:3:"EF1";}s:9:"ano_serie";a:2:{i:0;s:4:"4EF1";i:1;s:4:"5EF1";}s:11:"disciplinas";a:11:{i:0;s:3:"ART";i:1;s:3:"ING";i:2;s:3:"ENS";i:3;s:3:"POR";i:4;s:3:"MAT";i:5;s:3:"HIS";i:6;s:3:"GEO";i:7;s:4:"CI�";i:8;s:3:"PRO";i:9;s:3:"GRA";i:10;s:3:"LIT";}}
       
      sendo que preciso pegar o nome da escola (nome_escola) ou o número de CPF (cpf).
      Como fazer para aparecer convertido como array em php, tipo assim:
       
      array("cpf" => "97277754115", "nome_escola" => "Colégio Externato São José");
    • By Carlos Ramos Web
      Olá, pessoal.
      Estou criando um sistema paralelo ao wordpress contudo buscando as informações do banco de dados wp.
      Me deparei com uma string em JSON vindo da tabela wp_usermeta mais preciso no campo meta_value.
       
      a:13:{s:3:"cpf";s:11:"97277754115";s:6:"adocao";s:1:"4";s:11:"codigo_inep";s:8:"52037983";s:11:"nome_escola";s:29:"Colégio Externato São José";s:13:"numero_escola";s:3:"221";s:11:"escola_cnpj";s:14:"33707746000512";s:3:"cep";s:8:"74120180";s:8:"telefone";s:11:"62985286122";s:18:"data_de_nascimento";s:10:"25/05/1982";s:6:"perfil";s:10:"Supervisor";s:8:"segmento";a:1:{i:0;s:3:"EF1";}s:9:"ano_serie";a:2:{i:0;s:4:"4EF1";i:1;s:4:"5EF1";}s:11:"disciplinas";a:11:{i:0;s:3:"ART";i:1;s:3:"ING";i:2;s:3:"ENS";i:3;s:3:"POR";i:4;s:3:"MAT";i:5;s:3:"HIS";i:6;s:3:"GEO";i:7;s:4:"CI�";i:8;s:3:"PRO";i:9;s:3:"GRA";i:10;s:3:"LIT";}}
       
      sendo que preciso pegar o nome da escola (nome_escola) ou o número de CPF (cpf).
      Como fazer para aparecer convertido como array em php, tipo assim:
       
      array("cpf" => "97277754115", "nome_escola" => "Colégio Externato São José");
       
    • By alh
      Tenho uma requisição em ajax!
      O que está acontecendo de errado pois não estou sendo redirecionado na funçao que estou executando no php pelo ajax.
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script type="text/javascript"> //EFETUAR LOGIN function efetuarLogin() { var usuarioAcesso = $("#usuarioAcesso").val(); var senhaAcesso = $("#senhaAcesso").val(); var botao_acao = $("#tipo_login").val(); $.ajax({ type: "POST", url: "envia_assinatura.php", data: {'usuarioAcesso':usuarioAcesso,'senhaAcesso':senhaAcesso,'botao_acao':botao_acao}, dataType: "json", success: function(json){ alert('teste'); } }); }; </script> <div style="width:400px; float:left;"> <input type="text" name="usuarioAcesso" id="usuarioAcesso"> <input type="password" name="senhaAcesso" id="senhaAcesso"> <input type="submit" name="botao_login" id="botao_login" value="Login"> <input type="hidden" name="tipo_login" id="tipo_login" value="login"> <button class="btn-success" type="submit" onclick="efetuarLogin()" >LOGIN</button> </div>  
      A página "envia_assinatura.php"
      É um header para retornar a uma página:
      <?php header("location: teste"); ?>
×

Important Information

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