Позвольте мне начать с благодарения за то, что вы нашли время. Я новичок, поэтому дайте мне знать, если вам нужна дополнительная информация.Отладка плохой реакции клиента OAuth. Я использую PHP, Laravel5.3, PHPLeague OAuth Client и Guzzle
Итак, я пытаюсь настроить клиента OAUTH2 в Laravel для подключения до API, предоставляемого CLIO. Я использую PHPLeague's OAuth2 Client Library, который использует GUZZLE для обработки HTTP.
Мне удалось настроить клиента на перенаправление на страницу авторизации Clio, разрешить доступ, перенаправить в мое приложение и получить код авторизации.
На следующем этапе, где мне нужно отправить запрос на получение токена доступа, что-то пойдет не так!
Здесь ошибка я получаю:
Тип ошибки: Аргумент 1 передается Лига \ OAuth2 \ Client \ Provider \ AbstractProvider :: prepareAccessTokenResponse() должен иметь тип массива, строки заданной, называемой в/Users /patrick/Sites/ssacorp/vendor/league/oauth2-client/src/Provider/AbstractProvider.php на линии 565
Теперь для того, чтобы отслеживать его вниз, я знаю, следующий метод вызывается, чтобы начать получение токена доступа:
public function getAccessToken($grant, array $options = [])
{
$grant = $this->verifyGrant($grant);
$params = [
'client_id' => $this->clientId,
'client_secret' => $this->clientSecret,
'redirect_uri' => $this->redirectUri,
];
$params = $grant->prepareRequestParameters($params, $options);
$request = $this->getAccessTokenRequest($params);
$response = $this->getParsedResponse($request);
$prepared = $this->prepareAccessTokenResponse($response);
$token = $this->createAccessToken($prepared, $grant);
return $token;
}
Я сбросила свойства и я получаю:
$ Params
array(5) { ["client_id"]=> string(40) "*************************************" ["client_secret"]=> string(40) "************************************" ["redirect_uri"]=> string(26) "http://app.ssadv.org/oauth" ["grant_type"]=> string(18) "authorization_code" ["code"]=> string(20) "******************" }
Так что все кажется нормальным здесь. Разумеется, я не разделяю эти учетные данные.
$ запрос
object(GuzzleHttp\Psr7\Request)#179 (7) { ["method":"GuzzleHttp\Psr7\Request":private]=> string(4) "POST" ["requestTarget":"GuzzleHttp\Psr7\Request":private]=> NULL ["uri":"GuzzleHttp\Psr7\Request":private]=> object(GuzzleHttp\Psr7\Uri)#181 (7) { ["scheme":"GuzzleHttp\Psr7\Uri":private]=> string(4) "http" ["userInfo":"GuzzleHttp\Psr7\Uri":private]=> string(0) "" ["host":"GuzzleHttp\Psr7\Uri":private]=> string(12) "app.clio.com" ["port":"GuzzleHttp\Psr7\Uri":private]=> NULL ["path":"GuzzleHttp\Psr7\Uri":private]=> string(12) "/oauth/token" ["query":"GuzzleHttp\Psr7\Uri":private]=> string(0) "" ["fragment":"GuzzleHttp\Psr7\Uri":private]=> string(0) "" } ["headers":"GuzzleHttp\Psr7\Request":private]=> array(2) { ["Host"]=> array(1) { [0]=> string(12) "app.clio.com" } ["content-type"]=> array(1) { [0]=> string(33) "application/x-www-form-urlencoded" } } ["headerNames":"GuzzleHttp\Psr7\Request":private]=> array(2) { ["content-type"]=> string(12) "content-type" ["host"]=> string(4) "Host" } ["protocol":"GuzzleHttp\Psr7\Request":private]=> string(3) "1.1" ["stream":"GuzzleHttp\Psr7\Request":private]=> object(GuzzleHttp\Psr7\Stream)#183 (7) { ["stream":"GuzzleHttp\Psr7\Stream":private]=> resource(262) of type (stream) ["size":"GuzzleHttp\Psr7\Stream":private]=> NULL ["seekable":"GuzzleHttp\Psr7\Stream":private]=> bool(true) ["readable":"GuzzleHttp\Psr7\Stream":private]=> bool(true) ["writable":"GuzzleHttp\Psr7\Stream":private]=> bool(true) ["uri":"GuzzleHttp\Psr7\Stream":private]=> string(10) "php://temp" ["customMetadata":"GuzzleHttp\Psr7\Stream":private]=> array(0) { } } } inside Transfer
$ ответ
Это фактически строка происходит в метод prepareAccessTokenResponse(), который, как предполагается, массив и вызывает основную ошибку. Демпинг это показывает, что его на самом деле 404 HTML страницы Клио:
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\n
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n
\n
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\n
\n
<head>\n
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />\n
<title>The page you were looking for doesn't exist (404)</title>\n
</head>\n
\n
<body>\n
<!-- This file lives in public/404.html -->\n
\n
<div class="dialog">\n
<h1>The page you were looking for doesn't exist.</h1>\n
<p>You may have mistyped the address or the page may have moved.</p>\n
</div>\n
</body>\n
\n
</html>
Я проверил ссылку и параметры в Почтальон и подтвердил маркер доступа фактически возвращается с использованием тех же URI и информацию в моих параметрах $. Почему я получаю 404, когда мой URI верен, а $ request говорит, что использует метод POST, как он есть. Чтобы подтвердить это, я попытался использовать инструмент Dev Tools Network от Chrome, но не смог найти запрос POST по этой ссылке. Как еще я должен устранить это, чтобы убедиться, что Guzzle отправляет правильные данные на правильный адрес?