From e55fdf50f8003be8f03a85a7e5a5b7c5716f4c9a Mon Sep 17 00:00:00 2001 From: "Bostin.wang" Date: Tue, 10 Jan 2023 22:29:55 +0800 Subject: [PATCH] implement refreshToken() for feishu/lark (#258) * implement refreshToken() for feishu/lark * fix for pint Co-authored-by: bostin.wang --- src/Providers/Base.php | 2 +- src/Providers/FeiShu.php | 27 +++++++++++++++++++++++++++ src/Providers/Lark.php | 1 + 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/Providers/Base.php b/src/Providers/Base.php index 4bb93e1..e3d6c20 100644 --- a/src/Providers/Base.php +++ b/src/Providers/Base.php @@ -125,7 +125,7 @@ public function tokenFromCode(string $code): array /** * @throws Exceptions\MethodDoesNotSupportException */ - public function refreshToken(string $refreshToken): void + public function refreshToken(string $refreshToken): mixed { throw new Exceptions\MethodDoesNotSupportException('refreshToken does not support.'); } diff --git a/src/Providers/FeiShu.php b/src/Providers/FeiShu.php index 89b047a..6581cc7 100644 --- a/src/Providers/FeiShu.php +++ b/src/Providers/FeiShu.php @@ -75,6 +75,33 @@ protected function getTokenFromCode(string $code): array return $this->normalizeAccessTokenResponse($response['data']); } + protected function getRefreshTokenUrl(): string + { + return $this->baseUrl.'/authen/v1/refresh_access_token'; + } + + /** + * @see https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/authen-v1/authen/refresh_access_token + */ + public function refreshToken(string $refreshToken): array + { + $this->configAppAccessToken(); + $responseInstance = $this->getHttpClient()->post($this->getRefreshTokenUrl(), [ + 'json' => [ + 'app_access_token' => $this->config->get('app_access_token'), + Contracts\RFC6749_ABNF_REFRESH_TOKEN => $refreshToken, + Contracts\RFC6749_ABNF_GRANT_TYPE => Contracts\RFC6749_ABNF_REFRESH_TOKEN, + ], + ]); + $response = $this->fromJsonBody($responseInstance); + + if (empty($response['data'] ?? null)) { + throw new Exceptions\AuthorizeFailedException('Invalid token response', $response); + } + + return $this->normalizeAccessTokenResponse($response['data']); + } + /** * @throws Exceptions\BadRequestException */ diff --git a/src/Providers/Lark.php b/src/Providers/Lark.php index e19192d..7f52433 100644 --- a/src/Providers/Lark.php +++ b/src/Providers/Lark.php @@ -8,5 +8,6 @@ class Lark extends FeiShu { public const NAME = 'lark'; + protected string $baseUrl = 'https://open.larksuite.com/open-apis'; }