Google Client API - Missing required parameter: redirect_uri

So I followed the quick start guide and decided to break it into a class called a scheduler. I am working on an authentication code, but I get the following: "Error 400 (OAuth error 2) Error: Invalid request missing Required parameter: redirect_uri".

class scheduler{ //The Google Client object private $googleClient; //the Google Calendar Service ojbect private $calendarService; /* * Google Calendar Setup * * This creates a Google Client object so that you may create a Google Calendar object. * */ function __construct(){ //set the application name define("APPLICATION_NAME", "Web client 1"); // define("CREDENTIALS_PATH", "~/scheduler/credentials.json"); // define("CLIENT_SECRET_PATH", __DIR__ . "/scheduler/client_secret.json"); // define("SCOPES", implode(" ", array(Google_Service_Calendar::CALENDAR_READONLY))); /*if(php_sapi_name() != "cli"){ throw new Exception("This application must be run on the command line"); }*/ //create the google client $this->googleClient = new Google_Client(); //setup the client $this->googleClient->setApplicationName(APPLICATION_NAME); $this->googleClient->setDeveloperKey("AIzaSyBmJLvNdMYuFhVpWalkUdyStrEBoVEayYM"); $this->googleClient->setScopes(SCOPES); $this->googleClient->setAuthConfigFile(CLIENT_SECRET_PATH); $this->googleClient->setAccessType("offline"); //get the credentials file path $credentialsPath = expandHomeDirectory(CREDENTIALS_PATH); //if the file exists if(file_exists($credentialsPath)){ //get the credentials from the file $accessToken = file_get_contents($credentialsPath); }//if it does not else{ //request the authorization url $authURL = $this->googleClient->createAuthUrl(); //print the authorization ulr echo "<a href=\"$authURL\">Press Me</a><br /><br />"; //prompt the user to enter the auth code print("Enter authentication code: "); // $authCode = trim(fgets(STDIN)); //exchange authorization for an access token $accessToken = $this->googleClient->authenticate($authCode); //store credentials to disk if(!file_exists(dirname($credentialsPath))){ mkdir(dirname($credentialsPath), 0700, true); } //put the contents into the credential files file_put_contents($credentialsPath, $accessToken); } $this->googleClient->setAccessToken($accessToken); //refresh token if its expired if($this->googleClient->isAccessTokenExpired()){ $this->googleClient->refreshToken($client->getRefreshToken()); file_put_contents($credentialsPath, $this->googleClient->getAccessToken()); } } 

I found the cause of the problem without solving the problem. In the Google Developer Console, I tried to insert " http: // localhost / " into the "Authorized Redirect URI" section. This gives me this error: "Sorry, there is a problem. If you entered the information, check it and try again. Otherwise, the problem can be fixed by itself, so check back later." Is there a way to get the Google developer console to accept the localhost server redirect URI?

+10
source share
3 answers

I have earned. I needed to go back to the Google Developer Console and delete the project that I created. Then, when creating a new project, this allowed me to save my localhost URL. The problem that was happening was that when I went, add your localhost url to the redirect url, which seems to be impossible. When I set the redirect URL before clicking the create button, it accepts it just fine.

+6
source

Just use the setRedirectUri($absoluteUrl) method for the client object:

 $client = new Google_Client(); $client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php'); 

via:

https://developers.google.com/api-client-library/php/auth/web-app

+11
source

The Google documentation "PHP Quick Start" for the Sheet API is deprecated at https://developers.google.com/sheets/api/quickstart/php .

To make their demo work with PHP 7. 2+ I had to change a bit, and it’s not entirely clear what is happening. Below is an updated version of their quick launch with comments, which can be useful to anyone who has difficulty working with the Google Sheets API and PHP.

 <?php /** * Updated Google Sheets Quickstart * * https://developers.google.com/sheets/api/quickstart/php */ require __DIR__ . '/vendor/autoload.php'; /** * Appends one slash at the end, and removes any extra slashes * https://stackoverflow.com/a/9339669/812973 * * @return string $path with the slash appended */ function addTrailingSlash ($path) { return rtrim ($path, '/') . '/'; } /** * Returns an authorized API client. * @return Google_Client the authorized client object */ function getClient() { // Change this to a secure location where you'll save your config *.json files // Make sure it isn't publicly available on the web $configPath = addTrailingSlash (getcwd()); // This get generated by the script, so don't create it $credentialsPath = $configPath . 'credentials.json'; $client = new Google_Client(); // Matches the "Application Name" you enter during the "Step 1" wizard $client->setApplicationName( 'API App Name' ); $client->setScopes( Google_Service_Sheets::SPREADSHEETS_READONLY ); // You need to go through "Step 1" steps to generate this file: https://developers.google.com/sheets/api/quickstart/php $client->setAuthConfig( $configPath . 'client_secret.json' ); $client->setAccessType( 'offline' ); // This must match the "callback URL" that you enter under "OAuth 2.0 client ID" in the Google APIs console at https://console.developers.google.com/apis/credentials $client->setRedirectUri( 'https://' . $_SERVER['HTTP_HOST'] . '/' . basename( __FILE__, '.php' ) ); // We have a stored credentials file, try using the data from there first if ( file_exists( $credentialsPath ) ) { $accessToken = json_decode( file_get_contents( $credentialsPath ), true ); } // No stored credentials found, we'll need to request them with OAuth else { // Request authorization from the user $authUrl = $client->createAuthUrl(); if ( ! isset( $_GET['code'] ) ) { header( "Location: $authUrl", true, 302 ); exit; } // The authorization code is sent to the callback URL as a GET parameter. // We use this "authorization code" to generate an "access token". The // "access token" is what effectively used as a private API key. $authCode = $_GET['code']; $accessToken = $client->fetchAccessTokenWithAuthCode( $authCode ); // Create credentials.json if it does not already exist (first run) if ( ! file_exists( dirname( $credentialsPath ) ) ) { mkdir( dirname( $credentialsPath ), 0700, true ); } // Save the $accessToken object to the credentials.json file for re-use file_put_contents( $credentialsPath, json_encode( $accessToken ) ); } // Provide client with API access token $client->setAccessToken( $accessToken ); // If the $accessToken is expired then we'll need to refresh it if ( $client->isAccessTokenExpired() ) { $client->fetchAccessTokenWithRefreshToken( $client->getRefreshToken() ); file_put_contents( $credentialsPath, json_encode( $client->getAccessToken() ) ); } return $client; } // Get the API client and construct the service object. $client = getClient(); $service = new Google_Service_Sheets( $client ); // Get values from a spreadheet and print // https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/get $spreadsheetId = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'; $range = 'Class Data!A2:E'; $response = $service->spreadsheets_values->get($spreadsheetId, $range); $values = $response->getValues(); if (empty($values)) { print "No data found.\n"; } else { print "Name, Major:\n"; foreach ($values as $row) { // Print columns A and E, which correspond to indices 0 and 4. printf("%s, %s\n", $row[0], $row[4]); } } 
+3
source

Source: https://habr.com/ru/post/1240276/


All Articles