hasAuthHeader($request) && ! $this->isAuthRequest($request)) { if (is_null($this->accessToken) || $this->accessToken->isExpired()) { $this->accessToken = $this->fetchAccessToken(); } $request->headers['Authorization'] = "Bearer {$this->accessToken->token}"; } } /** * Returns an AccessToken. * * @since 2.32.0 use client credentials to fetch access token. * @since 2.25.0 */ protected function fetchAccessToken(): AccessToken { $merchantDetail = give(MerchantDetails::class)->getDetails(); $accessToken = give(PayPalAuth::class)->getTokenFromClientCredentials( $merchantDetail->clientId, $merchantDetail->clientSecret ); $this->registerRefreshTokenCronJob($accessToken); return AccessToken::fromArray($accessToken); } /** * Return true if the request is an AccessTokenRequest or RefreshTokenRequest. * * @since 2.25.0 */ private function isAuthRequest($request): bool { return $request instanceof AccessTokenRequest || $request instanceof RefreshTokenRequest; } /** * Return true if the request has an Authorization header. * * @since 2.25.0 */ private function hasAuthHeader(HttpRequest $request): bool { return array_key_exists("Authorization", $request->headers); } /** * Should save new access token and add a cron job to refresh token. * * @since 2.32.0 Get latest merchant details from database. * @since 2.25.0 * * @return void */ private function registerRefreshTokenCronJob(array $accessToken) { $refreshToken = give(RefreshToken::class); $merchantDetailRepository = give(MerchantDetails::class); $merchantDetail = $merchantDetailRepository->getDetails(); $merchantDetail->setTokenDetails($accessToken); $merchantDetailRepository->save($merchantDetail); $refreshToken->deleteRefreshTokenCronJob(); $refreshToken->registerCronJobToRefreshToken($accessToken['expiresIn']); } }