| | |
| | | |
| | | protected function refreshAccessToken(OAuthCredentials $credentials): array |
| | | { |
| | | if (empty($this->getClientID()) || empty($this->getClientSecret()) || empty($credentials->refresh_token)) { |
| | | $this->logError('refreshAccessToken', 'Missing refresh token'); |
| | | return $this->response(false, 'Missing client ID, client Secret, or refresh token'); |
| | | } |
| | | $response = wp_remote_post( |
| | | $this->oauth->getToken(), |
| | | [ |
| | | 'timeout' => 15, |
| | | 'body' => [ |
| | | 'grant_type' => 'refresh_token', |
| | | 'refresh_token' => $credentials->refresh_token, |
| | | 'client_id' =>$this->getClientID(), |
| | | 'client_secret' =>$this->getClientSecret() |
| | | ], |
| | | 'headers' => $this->getOAuthRequestHeaders() |
| | | ] |
| | | ); |
| | | if (is_wp_error($response)) { |
| | | $this->logError( |
| | | 'refreshAccessToken', |
| | | 'Failed to refresh GMB Token', |
| | | [ |
| | | 'error' => $response->get_error_message() |
| | | ] |
| | | ); |
| | | return $this->response(false, 'Failed to refresh GMB Token'); |
| | | } |
| | | |
| | | $data = json_decode(wp_remote_retrieve_body($response), true); |
| | | if (empty($data['access_token'])) { |
| | | $this->logError('refreshAccessToken', 'No access token in response'); |
| | | return $this->response(false, 'No access token in response'); |
| | | } |
| | | $credentials = [ |
| | | 'access_token' => $data['access_token'], |
| | | 'expires_at' => time() + (int)($data['expires_in']??3600), |
| | | // Google usually omits refresh_token on refresh — keep the old one |
| | | 'refresh_token' => $body['refresh_token'] ?? $credentials->refresh_token, |
| | | ]; |
| | | $this->saveCredentials($credentials); |
| | | |
| | | return $this->response(true, 'Successfully refreshed token'); |
| | | } |
| | | |
| | | /********************************************************* |
| | | * UTILITY |
| | | *********************************************************/ |
| | | protected function getClientID():string|false |
| | | { |
| | | $switch = false; |
| | | if ($this->userID !== null) { |
| | | $switch = $this->userID; |
| | | $this->switchUser(null); |
| | | } |
| | | |
| | | $ID = $this->loadCredentials()['client_id']??false; |
| | | if ($switch) { |
| | | $this->switchUser($switch); |
| | | } |
| | | return $ID; |
| | | } |
| | | protected function getClientSecret():string|false |
| | | { |
| | | $switch = false; |
| | | if ($this->userID !== null) { |
| | | $switch = $this->userID; |
| | | $this->switchUser(null); |
| | | } |
| | | |
| | | $ID = $this->loadCredentials()['client_secret']??false; |
| | | if ($switch) { |
| | | $this->switchUser($switch); |
| | | } |
| | | return $ID; |
| | | } |
| | | protected function getAccountID():string|false |
| | | { |
| | | return $this->loadCredentials()['account_id']??false; |