Ir para conteúdo
Fórum Script Brasil
  • 0

pegar somente o valor do "access_token" ao invés de toda a array


adrsublimacao

Pergunta

{"access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjbGl","token_type":"bearer","expires_in":86399}

eu tenho esse json como resposta e consigo imprimi-lo, mas gostaria de pegar somente o valor do "access_token" ao invés de toda a array e não estou conseguindo, sempre retorna todo o array. O código esta em php

quero pegar apenas o acess token pra salvar no banco

 

<?php
require_once "topo.php";
$editarcat = $connect->query("SELECT * FROM config WHERE id='$cod_id'"); 
$dadoscat                 = $editarcat->fetch(PDO::FETCH_OBJ);

$clientId = $dadoscat->clientId;
$clientSecret = $dadoscat->clientSecret;
  
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://merchant-api.ifood.com.br/authentication/v1.0/oauth/token',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => "grantType=client_credentials&clientId=$clientId&clientSecret=$clientSecret",
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/x-www-form-urlencoded'

  ),
));

$response = curl_exec($curl);

curl_close($curl);
    
$gerar_token        = $connect->query("UPDATE config SET clientId='$clientId', clientSecret='$clientSecret', accessToken='$response' WHERE id='$cod_id'");
if ( $gerar_token ) { header("location: events_polling.php"); exit; } else { header("location: gerar_token.php?emp=&erro=erro"); exit; }

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 1
5 horas atrás, Frank K Hosaka disse:

Logo, a segunda solução é que vale,

você transforma $response em json com o comando $jresponse=json_decode($response), e depois você pode isolar o token assim $token=$jresponse->access_token, e na hora de mandar para o banco de dados, você usa a variável $token e não o $response.

peferito amigo muito obrigado funcionou certinho vou seguir com o projeto valeu mesmo

Link para o comentário
Compartilhar em outros sites

  • 1
16 horas atrás, adrsublimacao disse:

outra duvida aqui amigo seguindo a mesma logica da anterior não deu certo onde sera q to errando é outro codigo é uma string tambem

essa é a string

[{"id":"fde9a8ad-6dba-462a-92e8-f606238b916e","code":"PLC","fullCode":"PLACED","orderId":"00201035-360c-4862-adef-4c74ed8da5e3","merchantId":"b053eb1d-294a-4a42-806b-a46f5e6517b6","createdAt":"2022-12-27T00:21:56.594Z"}]

 

esse é meu codigo

<?php
require_once "topo.php";

$editarcat = $connect->query("SELECT * FROM config WHERE id='$cod_id'"); 
$dadoscat                 = $editarcat->fetch(PDO::FETCH_OBJ);

$clientId = $dadoscat->clientId;
$clientSecret = $dadoscat->clientSecret;
$accessToken = $dadoscat->accessToken;

$curl = curl_init();


curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://merchant-api.ifood.com.br/order/v1.0/events:polling',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer $accessToken"
  ),
));

$response = curl_exec($curl);

curl_close($curl);


$jresponse=json_decode($response);
    $id=$jresponse->id;
    $code=$jresponse->code;
    $fullCode=$jresponse->fullCode;
    $orderId=$jresponse->orderId;
    $merchantId=$jresponse->merchantId;
    $createdAt=$jresponse->createdAt;

  
$inserir_pedido        = $connect->query("INSERT INTO pedidos_ifood (idu, id, code, fullCode, orderId, merchantId, createdAt) VALUES ('$cod_id','$id','$code','$fullCode','$orderId','$merchantId','$createdAt')");
if ( $inserir_pedido ) { header("location: home.php?ok"); exit; } else { header("location: events_polling.php?emp=&erro=erro"); exit; }

?>

todos os campos $id=$jresponse->id;
    $code=$jresponse->code;
    $fullCode=$jresponse->fullCode;
    $orderId=$jresponse->orderId;
    $merchantId=$jresponse->merchantId;
    $createdAt=$jresponse->createdAt;

   fica em branco não salva nada no banco 

 

onde posso ta errando porque não posso usar a mesma logica que a anterior

 

 

Usando o método da tentativa e erro, pode ser que o CURL esteja recebendo um objeto e não uma string.

Tente assim: $jresponse=$response ao invés de $jresponse=json_decode($response). Eu não tenho como acompanhar, pois não tenho nenhum $clientId e nem $clientSecret.

Note que no primeiro exemplo tinhamos o seguinte "string"
{"access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjbGl","token_type":"bearer","expires_in":86399}

e agora temos um novo "string" assim
[{"id":"fde9a8ad-6dba-462a-92e8-f606238b916e","code":"PLC","fullCode":"PLACED","orderId":"00201035-360c-4862-adef-4c74ed8da5e3","merchantId":"b053eb1d-294a-4a42-806b-a46f5e6517b6","createdAt":"2022-12-27T00:21:56.594Z"}]

ou seja, nós temos colchetes. Os dois parecem iguais, mas não são. O primeiro é japones e precisa transformar em Json. O segundo é chinês, e tudo indica que você não precisa transformar em japonês. As aparencias sempre enganam.
 

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

  • 0

Testei o código aqui, mas como eu não tenho $clienteId e nem o $clientSecret, eu não sei exatamente o que tem no $reponse.

Se for um objeto, eu obteria o token assim:

$token=$response->access_token;

Se for um string, eu obteria o token assim:

$jresponse=json_decode($response);
$token=$jresponse->access_token;

 

Link para o comentário
Compartilhar em outros sites

  • 0
49 minutos atrás, Frank K Hosaka disse:

Testei o código aqui, mas como eu não tenho $clienteId e nem o $clientSecret, eu não sei exatamente o que tem no $reponse.

Se for um objeto, eu obteria o token assim:

$token=$response->access_token;

Se for um string, eu obteria o token assim:

$jresponse=json_decode($response);
$token=$jresponse->access_token;

 

É uma string 

50 minutos atrás, Frank K Hosaka disse:

Testei o código aqui, mas como eu não tenho $clienteId e nem o $clientSecret, eu não sei exatamente o que tem no $reponse.

Se for um objeto, eu obteria o token assim:

$token=$response->access_token;

Se for um string, eu obteria o token assim:

$jresponse=json_decode($response);
$token=$jresponse->access_token;

 

O código me retorna uma string assim {"access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjbGl","token_type":"bearer","expires_in":86399}

Link para o comentário
Compartilhar em outros sites

  • 0
3 horas atrás, adrsublimacao disse:

É uma string 

O código me retorna uma string assim {"access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjbGl","token_type":"bearer","expires_in":86399}

Logo, a segunda solução é que vale,

você transforma $response em json com o comando $jresponse=json_decode($response), e depois você pode isolar o token assim $token=$jresponse->access_token, e na hora de mandar para o banco de dados, você usa a variável $token e não o $response.

Link para o comentário
Compartilhar em outros sites

  • 0
12 horas atrás, Frank K Hosaka disse:

No painel esquerdo tem um controlador de pontuação. Deixa um ponto para mim para conseguir um emprego no Fórum, estou desempregado desde 1999.

outra duvida aqui amigo seguindo a mesma logica da anterior não deu certo onde sera q to errando é outro codigo é uma string tambem

essa é a string

[{"id":"fde9a8ad-6dba-462a-92e8-f606238b916e","code":"PLC","fullCode":"PLACED","orderId":"00201035-360c-4862-adef-4c74ed8da5e3","merchantId":"b053eb1d-294a-4a42-806b-a46f5e6517b6","createdAt":"2022-12-27T00:21:56.594Z"}]

 

esse é meu codigo

<?php
require_once "topo.php";

$editarcat = $connect->query("SELECT * FROM config WHERE id='$cod_id'"); 
$dadoscat                 = $editarcat->fetch(PDO::FETCH_OBJ);

$clientId = $dadoscat->clientId;
$clientSecret = $dadoscat->clientSecret;
$accessToken = $dadoscat->accessToken;

$curl = curl_init();


curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://merchant-api.ifood.com.br/order/v1.0/events:polling',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer $accessToken"
  ),
));

$response = curl_exec($curl);

curl_close($curl);


$jresponse=json_decode($response);
    $id=$jresponse->id;
    $code=$jresponse->code;
    $fullCode=$jresponse->fullCode;
    $orderId=$jresponse->orderId;
    $merchantId=$jresponse->merchantId;
    $createdAt=$jresponse->createdAt;

  
$inserir_pedido        = $connect->query("INSERT INTO pedidos_ifood (idu, id, code, fullCode, orderId, merchantId, createdAt) VALUES ('$cod_id','$id','$code','$fullCode','$orderId','$merchantId','$createdAt')");
if ( $inserir_pedido ) { header("location: home.php?ok"); exit; } else { header("location: events_polling.php?emp=&erro=erro"); exit; }

?>

todos os campos $id=$jresponse->id;
    $code=$jresponse->code;
    $fullCode=$jresponse->fullCode;
    $orderId=$jresponse->orderId;
    $merchantId=$jresponse->merchantId;
    $createdAt=$jresponse->createdAt;

   fica em branco não salva nada no banco 

 

onde posso ta errando porque não posso usar a mesma logica que a anterior

 

 

Editado por adrsublimacao
Link para o comentário
Compartilhar em outros sites

  • 0

   consegui fazendo da seguinte forma

    $jresponse=json_decode($response);

    $id=$jresponse[0]->id;
    $code=$jresponse[0]->code;
    $fullCode=$jresponse[0]->fullCode;
    $orderId=$jresponse[0]->orderId;
    $merchantId=$jresponse[0]->merchantId;
    $createdAt=$jresponse[0]->createdAt;

depois de muito quebrar a cabeça 

muito obrigado

Editado por adrsublimacao
Link para o comentário
Compartilhar em outros sites

  • 0

A

8 horas atrás, adrsublimacao disse:

   consegui fazendo da seguinte forma

    $jresponse=json_decode($response);

    $id=$jresponse[0]->id;
    $code=$jresponse[0]->code;
    $fullCode=$jresponse[0]->fullCode;
    $orderId=$jresponse[0]->orderId;
    $merchantId=$jresponse[0]->merchantId;
    $createdAt=$jresponse[0]->createdAt;

depois de muito quebrar a cabeça 

muito obrigado

Agora to com outro problema segue meu codigo

$editarcat = $connect->query("SELECT * FROM config WHERE id='$cod_id'"); 
$dadoscat                 = $editarcat->fetch(PDO::FETCH_OBJ);

$clientId = $dadoscat->clientId;
$clientSecret = $dadoscat->clientSecret;
$accessToken = $dadoscat->accessToken;
$merchantId = $dadoscat->merchantId;
  
 
  

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://merchant-api.ifood.com.br/order/v1.0/orders/61e260a2-002a-428f-b736-de84447c0385/confirm',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer $accessToken"
  ),
));

$response = curl_exec($curl);

curl_close($curl);
}
echo $response;

não to conseguindo enviar o evento de confirmacao esta me retornando esse erro no $response

Bad Request
Your browser sent a request that this server could not understand.
Reference #7.459fdb17.1672200291.5f7b3dfd
 

sabe o q pode ser 

Link para o comentário
Compartilhar em outros sites

  • 0
8 horas atrás, adrsublimacao disse:

A

Agora to com outro problema segue meu codigo

$editarcat = $connect->query("SELECT * FROM config WHERE id='$cod_id'"); 
$dadoscat                 = $editarcat->fetch(PDO::FETCH_OBJ);

$clientId = $dadoscat->clientId;
$clientSecret = $dadoscat->clientSecret;
$accessToken = $dadoscat->accessToken;
$merchantId = $dadoscat->merchantId;
  
 
  

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://merchant-api.ifood.com.br/order/v1.0/orders/61e260a2-002a-428f-b736-de84447c0385/confirm',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer $accessToken"
  ),
));

$response = curl_exec($curl);

curl_close($curl);
}
echo $response;

não to conseguindo enviar o evento de confirmacao esta me retornando esse erro no $response

Bad Request
Your browser sent a request that this server could not understand.
Reference #7.459fdb17.1672200291.5f7b3dfd
 

sabe o q pode ser 

Eu não sou especialista no assunto, eu só sei usar o método da tentativa e erro:

Se eu pegar https://merchant-api.ifood.com.br/order/v1.0/events:polling e jogar diretamente no navegador, eu tenho essa mensagem {"message": "no jwt token"}.

Se eu pegar https://merchant-api.ifood.com.br/order/v1.0/orders/61e260a2-002a-428f-b736-de84447c0385/confirm e jogar diretamente no navegador, ele retorna {"message":"no Route matched with those values"}, ou seja, não importa o quanto você capriche no CURL, o servidor não vai conseguir retornar. Acredito que a turma do iFood poderá ajudá-lo melhor nesse caso.

Usando o manual iFood Developer | Order, improvisei o seguinte:
https://merchant-api.ifood.com.br/orders/61e260a2-002a-428f-b736-de84447c038A
mas a mensagem é a mesma. Acredito que o número do pedido não existe.

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...