Я пытаюсь в течение последних нескольких дней интегрировать свое приложение с 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"}
Эта ошибка возникает, потому что:
URL-адрес перенаправления
Эти URL-адреса будут использоваться во время аутентификации OAuth.
Если URL-адрес перенаправления не включен в ваш запрос, будет использоваться URL-адрес по умолчанию.
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 и параметром, который я отправляю на запрос. Я исправил его, и все работает нормально