I am trying to get accessToken using refreshToken, below I have posted my code please someone guide me.
It is from a wordpress plugin I am developing, I only need to retrieve pageViews
and pagePath so not preferring using a available plugin.
Taken reference from Use OAuth Refresh Token to Obtain New Access Token – Google API
if( isset( $this->options['authenication_code'] ) ){ //plugin setting page settings
global $wpdb;
$resultset = $wpdb->get_row( 'SELECT `refreshToken` FROM ' . $wpdb->prefix . 'analyticaAnalytics WHERE authenication_code ="' . $this->options["authenication_code"] . '"', ARRAY_A );
var_dump( $resultset['refreshToken'] ); //retrieved refreshToken from database
if ($client->isAccessTokenExpired()) { //boolean true
$client->refreshToken( $resultset['refreshToken'] );
var_dump( $client );//getting blank
}
}
../google-api-php-client/src/Google/Auth/oauth2.php
private function refreshTokenRequest($params)
{
if (isset($params['assertion'])) {
$this->client->getLogger()->info(
'OAuth2 access token refresh with Signed JWT assertion grants.'
);
} else {
$this->client->getLogger()->info('OAuth2 access token refresh');
}
$http = new Google_Http_Request(
self::OAUTH2_TOKEN_URI,
'POST',
array(),
$params
);
$http->disableGzip();
$request = $this->client->getIo()->makeRequest($http);
//var_dump( $request );exit;//response 400, invalid grant
$code = $request->getResponseHttpCode();
$body = $request->getResponseBody();
if (200 == $code) {
$token = json_decode($body, true);
if ($token == null) {
throw new Google_Auth_Exception("Could not json decode the access token");
}
if (! isset($token['access_token']) || ! isset($token['expires_in'])) {
throw new Google_Auth_Exception("Invalid token format");
}
if (isset($token['id_token'])) {
$this->token['id_token'] = $token['id_token'];
}
$this->token['access_token'] = $token['access_token'];
$this->token['expires_in'] = $token['expires_in'];
$this->token['created'] = time();
} else {
throw new Google_Auth_Exception("Error refreshing the OAuth2 token, message: '$body'", $code);
}
}
After spending a lot of time I got the error is responsecode 400 for $request = $this->client->getIo()->makeRequest($http);
and that is invalid grant.
This is how , I solved the problem, We need to store the refreshToken in our database and using that refreshToken, We can get another accessToken .which can be used to get the result and it does not need another authentication .