Ошибка клиента PHPleague oauth2.0 при доступе с запросом post в access_token

#php #oauth-2.0 #access-token

#php #oauth-2.0 #токен доступа

Вопрос:

В настоящее время я работаю над веб-функцией, которая представляет собой реализацию сервера oauth2 через phpleague. Я думаю, что я хорошо поработал над дизайном своего сервера, но я не знаю, почему клиент выводит ошибку, которую я не понимаю.

Мой клиентский код:

  lt;?php require 'vendor/autoload.php';  $provider = new LeagueOAuth2ClientProviderGenericProvider([  'clientId' =gt; '1', // The client ID assigned to you by the provider  'clientSecret' =gt; 'haha', // The client password assigned to you by the provider  'redirectUri' =gt; 'http://localhost:4444/callback.php',  'urlAuthorize' =gt; 'http://localhost:1337/authorize',  'urlAccessToken' =gt; 'http://localhost:1337/access_token',  'urlResourceOwnerDetails' =gt; 'https://service.example.com/resource' ]);  // If we don't have an authorization code then get one if (!isset($_GET['code'])) {   // Fetch the authorization URL from the provider; this returns the  // urlAuthorize option and generates and applies any necessary parameters  // (e.g. state).  $authorizationUrl = $provider-gt;getAuthorizationUrl();   // Get the state generated for you and store it to the session.  $_SESSION['oauth2state'] = $provider-gt;getState();   // Redirect the user to the authorization URL.  header('Location: ' . $authorizationUrl);  exit;  // Check given state against previously stored one to mitigate CSRF attack } elseif (empty($_GET['state']) || (isset($_SESSION['oauth2state']) amp;amp; $_GET['state'] !== $_SESSION['oauth2state'])) {   if (isset($_SESSION['oauth2state'])) {  unset($_SESSION['oauth2state']);  }   exit('Invalid state');  } else {   try {   // Try to get an access token using the authorization code grant.  $accessToken = $provider-gt;getAccessToken('authorization_code', [  'code' =gt; $_GET['code']  ]);    // We have an access token, which we may use in authenticated  // requests against the service provider's API.  echo 'Access Token: ' . $accessToken-gt;getToken() . "lt;brgt;";  echo 'Refresh Token: ' . $accessToken-gt;getRefreshToken() . "lt;brgt;";  echo 'Expired in: ' . $accessToken-gt;getExpires() . "lt;brgt;";  echo 'Already expired? ' . ($accessToken-gt;hasExpired() ? 'expired' : 'not expired') . "lt;brgt;";   // Using the access token, we may look up details about the  // resource owner.  $resourceOwner = $provider-gt;getResourceOwner($accessToken);   var_export($resourceOwner-gt;toArray());   // The provider provides a way to get an authenticated API request for  // the service, using the access token; it returns an object conforming  // to PsrHttpMessageRequestInterface.  var_dump($access_token);   } catch (LeagueOAuth2ClientProviderExceptionIdentityProviderException $e) {   // Failed to get the access token or user details.  exit($e-gt;getMessage());   }  }  

Ошибка в обратном вызове при вызове getAccessToken.

Вот трассировка стека:

 Fatal error: Uncaught UnexpectedValueException: Failed to parse JSON response:  Syntax error in /opt/lampp/htdocs/oauth2_client/vendor/league/oauth2-client/src/Provider/AbstractProvider.php:645 Stack trace:  #0 /opt/lampp/htdocs/oauth2_client/vendor/league/oauth2-client/src/Provider/AbstractProvider.php(686): LeagueOAuth2ClientProviderAbstractProvider-gt;parseJson()  #1 /opt/lampp/htdocs/oauth2_client/vendor/league/oauth2-client/src/Provider/AbstractProvider.php(626): LeagueOAuth2ClientProviderAbstractProvider-gt;parseResponse()  #2 /opt/lampp/htdocs/oauth2_client/vendor/league/oauth2-client/src/Provider/AbstractProvider.php(537): LeagueOAuth2ClientProviderAbstractProvider-gt;getParsedResponse()  #3 /opt/lampp/htdocs/oauth2_client/callback.php(43): LeagueOAuth2ClientProviderAbstractProvider-gt;getAccessToken() #4 {main} thrown in /opt/lampp/htdocs/oauth2_client/vendor/league/oauth2-client/src/Provider/AbstractProvider.php on line 645  

Я не понимаю, почему у меня эта ошибка…

Комментарии:

1. Ответ, возвращаемый из API, не является JSON. Поэтому он не может быть проанализирован как JSON.

Ответ №1:

Я исправил ошибку. Когда я отправляю запрос на свой access_token, я замечаю ошибку, поэтому, когда мой клиент отправляет запрос post и анализирует json, это вызывает ошибку при анализе, потому что он пытается проанализировать ошибку непосредственно в строку, которая не находится в формате json