2017-02-17 26 views
1

Позвольте мне начать с благодарения за то, что вы нашли время. Я новичок, поэтому дайте мне знать, если вам нужна дополнительная информация.Отладка плохой реакции клиента 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 отправляет правильные данные на правильный адрес?

ответ

0

Похоже, проблема заключалась в том, что я должен использовать https vs http для запроса POST для прохождения. Токен предоставлен. Проблема решена.

0

Я была такая же проблема с Curl мне пришлось CURLOPT_SSL_VERIFYPEER, false);

 Смежные вопросы

  • Нет связанных вопросов^_^