_getAccessTokenFromDb(); $accessTokenObject = $this->_getAccessTokenObject($accessToken); $oauthProvider = $this->_getOAuthProvider(); $result = $this->_refreshAccessToken($oauthProvider, $accessToken); return $result; } private function _getAccessTokenFromDb() { $accessToken = (new Query()) ->select(['id','accessToken', 'refreshToken', 'expiresOn', 'expired']) ->from('in_raisersedge_creds')->one(); return $accessToken; } private function _getAccessTokenObject($accessTokenFromDb) { $accessToken = new \League\OAuth2\Client\Token\AccessToken([ 'access_token' => $accessTokenFromDb["accessToken"], 'refresh_token' => $accessTokenFromDb["refreshToken"], 'expires' => strtotime($accessTokenFromDb["expiresOn"]), ]); return $accessToken; } private function _getOAuthProvider() { $provider = new \League\OAuth2\Client\Provider\GenericProvider([ 'clientId' => 'e3a0d34d-3e1c-493c-947f-2ac9ee485b6b', 'clientSecret' => 'paILlFIuAO8afrLQ7d5dGaXyhkvwm/7NHQKIN7c/mWI=', 'redirectUri' => UrlHelper::cpUrl() . "/connect-raisers-edge", 'urlAuthorize' => 'https://oauth2.sky.blackbaud.com/authorization', 'urlAccessToken' => 'https://oauth2.sky.blackbaud.com/token', 'urlResourceOwnerDetails' => '' ]); return $provider; } /** * @return AccessTokenInterface */ private function _refreshAccessToken($provider, $accessToken) { $oauth = $provider->getAccessToken('refresh_token', [ 'refresh_token' => $accessToken["refreshToken"] ]); Craft::$app->db->createCommand() ->update('in_raisersedge_creds', array( 'accessToken' => $oauth->getToken(), 'refreshToken' => $oauth->getRefreshToken(), 'expiresOn' => date("Y-m-d H:i:s", $oauth->getExpires()), 'expired' => $oauth->hasExpired() ), ['id' => (int)$accessToken["id"]] )->execute(); return $oauth; } }