public function getAccessTokenFromCode(string $code)
{
$body = (new FormBody())->addField("redirect_uri", $this->redirectUri)->addField("client_id", $this->clientId)->addField("client_secret", $this->clientSecret)->addField("code", $code);
$request = (new Request())->setMethod("POST")->setUri($this->accessTokenUrl)->setBody($body);
/** @var HttpResponse $response */
$response = (yield $this->client->request($request));
$body = $response->getBody();
parse_str($body, $data);
if (!isset($data["access_token"])) {
throw new OAuthException($data["error_description"] ?? $data["error"] ?? "no access token provided");
}
return $data["access_token"];
}