Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
@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?
@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!
@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.
@juninhogpe
O primeiro argumento do método foreach() deve ser um array.
Você está passando a variável $lista['value'].
Passe $lista.