diff --git a/src/Picqer/Financials/Exact/Connection.php b/src/Picqer/Financials/Exact/Connection.php index e72267dc..fb814b81 100644 --- a/src/Picqer/Financials/Exact/Connection.php +++ b/src/Picqer/Financials/Exact/Connection.php @@ -95,6 +95,11 @@ class Connection */ private $acquireAccessTokenUnlockCallback; + /** + * @var callable(Connection) + */ + private $refreshAccessTokenCallback; + /** * @var callable[] */ @@ -484,6 +489,14 @@ private function acquireAccessToken() call_user_func($this->acquireAccessTokenLockCallback, $this); } + if (is_callable($this->refreshAccessTokenCallback)) { + call_user_func($this->refreshAccessTokenCallback, $this); + if (! $this->tokenHasExpired()) { + // the refreshed token has not expired, so we are fine to keep using it + return; + } + } + // If refresh token not yet acquired, do token request if (empty($this->refreshToken)) { $body = [ @@ -632,6 +645,14 @@ public function setTokenUpdateCallback($callback) $this->tokenUpdateCallback = $callback; } + /** + * @param callable $callback + */ + public function setRefreshAccessTokenCallback($callback) + { + $this->refreshAccessTokenCallback = $callback; + } + /** * Parse the reponse in the Exception to return the Exact error messages. *