Есть ли способ получить токен OAuth 2.0 напрямую с CURL? - PullRequest
0 голосов
/ 05 ноября 2019

Я хочу получить токен доступа для вызова API Google Directory. Я видел несколько постов с кодом PHP Curl, но каждый раз, когда нужно получить доступ, прежде чем вы получите токен доступа, нужно совершить человеческое действие. Есть ли способ сделать запрос CURL и получить токен доступа напрямую?

На данный момент это мой код:

 define("CALLBACK_URL", "http://localhost/los/index");
define("AUTH_URL", "https://accounts.google.com/o/oauth2/auth");
 define("ACCESS_TOKEN_URL", "https://oauth2.googleapis.com/token");
define("CLIENT_ID", "**.apps.googleusercontent.com");
 define("CLIENT_SECRET", "**");
 define("SCOPE", "https://www.googleapis.com/auth/admin.directory.device.chromeos"); 

function getToken(){
  $curl = curl_init();

  $params = array(
CURLOPT_URL =>  
ACCESS_TOKEN_URL."?"."&grant_type=authorization_code"."&client_id=". 
CLIENT_ID."&client_secret=". CLIENT_SECRET."&redirect_uri=". CALLBACK_URL,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_MAXREDIRS => 10,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_ENCODING => '',
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_NOBODY => false, 
CURLOPT_HTTPHEADER => array(
  "cache-control: no-cache",
  "Content-Length: 0",
  "content-type: application/x-www-form-urlencoded",
  "accept: *",
      "accept-encoding: gzip, deflate",
    ),
  );

  curl_setopt_array($curl, $params);

   $response = curl_exec($curl);
   $err = curl_error($curl);
    echo $response;
  curl_close($curl);

 if ($err) {
echo "cURL Error #01: " . $err;
   } else {
$response = json_decode($response, true);    
if(array_key_exists("access_token", $response)) return $response;
if(array_key_exists("error", $response)) echo $response["error_description"];
echo "cURL Error #02: Something went wrong! Please contact admin.";
  } 
 }

При запуске я получаю следующее сообщение об ошибке:

{ "error": "invalid_request", "error_description": "Missing required parameter: code" }Missing required parameter: codec
...