12 KiB
Google API Client Upgrade Guide
2.x to 2.10.0
Namespaces
The Google API Client for PHP now uses namespaces for all classes. Code using the legacy classnames will continue to work, but it is advised to upgrade to the underspaced names, as the legacy classnames will be deprecated some time in the future.
Before
$client = new Google_Client();
$service = new Google_Service_Books($client);
After
$client = new Google\Client();
$service = new Google\Service\Books($client);
Service class constructors
Service class constructors now accept an optional Google\Client|array parameter
as their first argument, rather than requiring an instance of Google\Client.
Before
$client = new Google_Client();
$client->setApplicationName("Client_Library_Examples");
$client->setDeveloperKey("YOUR_APP_KEY");
$service = new Google_Service_Books($client);
After
$service = new Google\Service\Books([
'application_name' => "Client_Library_Examples",
'developer_key' => "YOUR_APP_KEY",
]);
1.0 to 2.0
The Google API Client for PHP has undergone major internal changes in 2.0. Please read through
the list below in order to upgrade to the latest version:
Installation now uses Composer
Before
The project was cloned in your project and you would run the autoloader from wherever:
// the autoload file was included
require_once 'google-api-php-client/src/Google/autoload.php'; // or wherever autoload.php is located
// OR classes were added one-by-one
require_once 'Google/Client.php';
require_once 'Google/Service/YouTube.php';
After
This library now uses composer (We suggest installing composer globally). Add this library by running the following in the root of your project:
$ composer require google/apiclient:~2.0
This will install this library and generate an autoload file in vendor/autoload.php in the root
of your project. You can now include this library with the following code:
require_once 'vendor/autoload.php';
Access Tokens are passed around as arrays instead of JSON strings
Before
$accessToken = $client->getAccessToken();
print_r($accessToken);
// would output:
// string(153) "{"access_token":"ya29.FAKsaByOPoddfzvKRo_LBpWWCpVTiAm4BjsvBwxtN7IgSNoUfcErBk_VPl4iAiE1ntb_","token_type":"Bearer","expires_in":3593,"created":1445548590}"
file_put_contents($credentialsPath, $accessToken);
After
$accessToken = $client->getAccessToken();
print_r($accessToken);
// will output:
// array(4) {
// ["access_token"]=>
// string(73) "ya29.FAKsaByOPoddfzvKRo_LBpWWCpVTiAm4BjsvBwxtN7IgSNoUfcErBk_VPl4iAiE1ntb_"
// ["token_type"]=>
// string(6) "Bearer"
// ["expires_in"]=>
// int(3593)
// ["created"]=>
// int(1445548590)
// }
file_put_contents($credentialsPath, json_encode($accessToken));
ID Token data is returned as an array
Before
$ticket = $client->verifyIdToken($idToken);
$data = $ticket->getAttributes();
$userId = $data['payload']['sub'];
After
$userData = $client->verifyIdToken($idToken);
$userId = $userData['sub'];
Google_Auth_AssertionCredentials has been removed
For service accounts, we now use setAuthConfig or useApplicationDefaultCredentials
Before
$client_email = '1234567890-a1b2c3d4e5f6g7h8i@developer.gserviceaccount.com';
$private_key = file_get_contents('MyProject.p12');
$scopes = array('https://www.googleapis.com/auth/sqlservice.admin');
$credentials = new Google_Auth_AssertionCredentials(
$client_email,
$scopes,
$private_key
);
After
$client->setAuthConfig('/path/to/service-account.json');
// OR use environment variables (recommended)
putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json');
$client->useApplicationDefaultCredentials();
Note: P12s are deprecated in favor of service account JSON, which can be generated in the Credentials section of Google Developer Console.
In order to impersonate a user, call setSubject when your service account
credentials are being used.
Before
$user_to_impersonate = 'user@example.org';
$credentials = new Google_Auth_AssertionCredentials(
$client_email,
$scopes,
$private_key,
'notasecret', // Default P12 password
'http://oauth.net/grant_type/jwt/1.0/bearer', // Default grant type
$user_to_impersonate,
);
After
$user_to_impersonate = 'user@example.org';
$client->setSubject($user_to_impersonate);
Additionally, Google_Client::loadServiceAccountJson has been removed in favor
of Google_Client::setAuthConfig:
Before
$scopes = [ Google_Service_Books::BOOKS ];
$client->loadServiceAccountJson('/path/to/service-account.json', $scopes);
After
$scopes = [ Google_Service_Books::BOOKS ];
$client->setAuthConfig('/path/to/service-account.json');
$client->setScopes($scopes);
Google_Auth_AppIdentity has been removed
For App Engine authentication, we now use the underlying google/auth and
call useApplicationDefaultCredentials:
Before
$client->setAuth(new Google_Auth_AppIdentity($client));
$client->getAuth()
->authenticateForScope('https://www.googleapis.com/auth/sqlservice.admin')
After
$client->useApplicationDefaultCredentials();
$client->addScope('https://www.googleapis.com/auth/sqlservice.admin');
This will detect when the App Engine environment is present, and use the appropriate credentials.
Google_Auth_Abstract classes have been removed
google/auth is now used for authentication. As a result, all
Google_Auth-related functionality has been removed. The methods that were a part of
Google_Auth_Abstract have been moved into the Google_Client object.
Before
$request = new Google_Http_Request();
$client->getAuth()->sign($request);
After
// create an authorized HTTP client
$httpClient = $client->authorize();
// OR add authorization to an existing client
$httpClient = new GuzzleHttp\Client();
$httpClient = $client->authorize($httpClient);
Before
$request = new Google_Http_Request();
$response = $client->getAuth()->authenticatedRequest($request);
After
$httpClient = $client->authorize();
$request = new GuzzleHttp\Psr7\Request('POST', $url);
$response = $httpClient->send($request);
NOTE:
$requestcan be any class implementingPsr\Http\Message\RequestInterface
In addition, other methods that were callable on Google_Auth_OAuth2 are now called
on the Google_Client object:
Before
$client->getAuth()->refreshToken($token);
$client->getAuth()->refreshTokenWithAssertion();
$client->getAuth()->revokeToken($token);
$client->getAuth()->isAccessTokenExpired();
After
$client->refreshToken($token);
$client->refreshTokenWithAssertion();
$client->revokeToken($token);
$client->isAccessTokenExpired();
PHP 5.6 is now the minimum supported PHP version
This was previously PHP 5.2. If you still need to use PHP 5.2, please continue to use
the v1-master branch.
Guzzle and PSR-7 are used for HTTP Requests
The HTTP library Guzzle is used for all HTTP Requests. By default, Guzzle 6
is used, but this library is also compatible with Guzzle 5. As a result,
all Google_IO-related functionality and Google_Http-related functionality has been
changed or removed.
- Removed
Google_Http_Request - Removed
Google_IO_Abstract,Google_IO_Exception,Google_IO_Curl, andGoogle_IO_Stream - Removed methods
Google_Client::getIoandGoogle_Client::setIo - Refactored
Google_Http_BatchandGoogle_Http_MediaFileUploadfor Guzzle - Added
Google_Client::getHttpClientandGoogle_Client::setHttpClientfor getting and setting the GuzzleGuzzleHttp\ClientInterfaceobject.
NOTE:
PSR-7-compatible libraries can now be used with this library.
Other Changes
PSR 3LoggerInterfaceis now supported, and Monolog is used for all logging. As a result, allGoogle_Logger-related functionality has been removed:- Removed
Google_Logger_Abstract,Google_Logger_Exception,Google_Logger_File,Google_Logger_Null, andGoogle_Logger_Psr Google_Client::setLoggernow requiresPsr\Log\LoggerInterface
- Removed
firebase/jwtis now used for all JWT signing and verifying. As a result, the following classes have been changed or removed:- Removed
Google_Signer_P12 - Removed
Google_Verifier_Pem - Removed
Google_Auth_LoginTicket(see below)
- Removed
- The following classes and methods have been removed in favor of
google/auth:- Removed methods
Google_Client::getAuthandGoogle_Client::setAuth - Removed
Google_Auth_AbstractGoogle_Auth_Abstract::signandGoogle_Auth_Abstract::authenticatedRequesthave been replaced byGoogle_Client::authorize. See the above examples for more details.
- Removed
Google_Auth_AppIdentity. This is now supported ingoogle/authand is used automatically whenGoogle_Client::useApplicationDefaultCredentialsis called. - Removed
Google_Auth_AssertionCredentials. UseGoogle_Client::setAuthConfiginstead. - Removed
Google_Auth_ComputeEngine. This is now supported ingoogle/auth, and is used automatically whenGoogle_Client::useApplicationDefaultCredentialsis called. - Removed
Google_Auth_Exception - Removed
Google_Auth_LoginTicket. Calls toGoogle_Client::verifyIdTokennow returns the payload of the ID Token as an array if the verification is successful. - Removed
Google_Auth_OAuth2. This functionality is now supported ingoogle/authand wrapped inGoogle_Client. These changes will only affect applications callingGoogle_Client::getAuth, as the methods onGoogle_Clienthave not changed. - Removed
Google_Auth_Simple. This is now supported ingoogle/authand is used automatically whenGoogle_Client::setDeveloperKeyis called.
- Removed methods
Google_Client::signhas been replaced byGoogle_Client::authorize. This function now takes aGuzzleHttp\ClientInterfaceobject and uses the following decision tree for authentication:- Uses Application Default Credentials when
Google_Client::useApplicationDefaultCredentialsis called
- Looks for
GOOGLE_APPLICATION_CREDENTIALSenvironment variable if set - Looks in
~/.config/gcloud/application_default_credentials.json - Otherwise, uses
GCECredentials
- Uses API Key if set (see
Client::setDeveloperKey) - Uses Access Token if set (call
Client::setAccessToken) - Automatically refreshes access tokens if one is set and the access token is expired
- Uses Application Default Credentials when
- Removed
Google_Config - Removed
Google_Utils PSR-6cache is used for all caching. As a result:- Removed
Google_Cache_Abstract - Classes
Google_Cache_Apc,Google_Cache_File,Google_Cache_Memcache, andGoogle_Cache_Nullnow implementGoogle\Auth\CacheInterface. - Google Auth provides simple caching utilities which are used by default unless you provide alternatives.
- Removed
- Removed
$boundaryconstructor argument forGoogle_Http_MediaFileUpload