Не удается получить токен из Uber API с ключом действительного доступа

Я пытаюсь в течение последних нескольких дней интегрировать свое приложение с uber, но по какой-то причине во время аутентификации oauth2 я не могу заставить uber дать мне действительный токен. Я могу получить код доступа, но при использовании curl я не могу получить токен доступа, независимо от того, как я упорядочиваю свой скрипт. Вот что я имею:

<?php echo $_GET['code']."<br>"; $token = curl_init(); $param = array( 'client_secret' => 'MY_SECRET', 'client_id' => 'MY_ID', 'grant_type' => 'authorization_code', 'code' => "{$_GET['code']}" ); $postData = ''; foreach($param as $k => $v) { $postData .= $k . '='.urlencode($v).'&'; } $postData = rtrim($postData, '&'); curl_setopt($token, CURLOPT_URL, 'https://login.uber.com/oauth/token'); curl_setopt($token, CURLOPT_HEADER, true); curl_setopt($token, CURLOPT_RETURNTRANSFER, true); curl_setopt($token, CURLOPT_POST, true); curl_setopt($token, CURLOPT_POSTFIELDS, $postData); $returned_token = curl_exec($token); curl_close($token); echo $returned_token; ?> 

Я дважды проверял свой секрет и идентификатор, оба правильные. Я вижу, что каждый раз, когда я собираюсь получить код доступа, это нечто уникальное, я вижу, что это повторяется на странице авторизации, на которую я перенаправляюсь, но независимо от того, что я получаю от ответа как:

 {"error": "access_denied"} 

Эта ошибка возникает, потому что:

  • Вы не отправляете параметр redirect_uri в конечную точку GET https://login.uber.com/oauth/v2/authorize, а также не устанавливаете URI-редирект в Uber Developers Dashboard для клиентского приложения, которое вы используете в API Запросы.

URL-адрес перенаправления
Эти URL-адреса будут использоваться во время аутентификации OAuth.
Если URL-адрес перенаправления не включен в ваш запрос, будет использоваться URL-адрес по умолчанию.

  • Вы отправляете неверный URL-адрес переадресации (база URI не совпадает с URL-адресом перенаправления, установленным в панели инструментов разработчиков Uber),
    поскольку документация для GET https://login.uber.com/oauth/v2/authorize гласит:

redirect_uri (необязательно)
URI мы перенаправим обратно после авторизации владельцем ресурса.
База URI должна соответствовать redirect_uri, используемой при регистрации вашего приложения.

Прекрасно работает для меня. Убедитесь, что заголовок Content-Type верен. Некоторые службы ожидают этого. (например, Content-Type=x-www-form-urlencoded )

Кроме того, можете поделиться тем, как вы запрашиваете code ? (например, какой scope вы используете при отправке запроса авторизации и т. д.).

Я также столкнулся с этой проблемой, и, похоже, я нашел причину этого.

Попробуйте добавить redirect_uri (то же, что и в настройках приложения) к вашему запросу, поэтому ваш код params должен выглядеть так:

 $param = array( 'client_secret' => 'MY_SECRET', 'client_id' => 'MY_ID', 'redirect_uri' => 'MY_REDIRECT_URI', 'grant_type' => 'authorization_code', 'code' => "{$_GET['code']}" ); 

Это помогло мне, но я надеюсь, что разработчики Uber сделают эту ошибку более конкретной

Это сработало для меня отлично. Моя проблема заключалась в том, что у меня была разница между Url Redirect на приложении Dashboard и параметром, который я отправляю на запрос. Я исправил его, и все работает нормально