Может быть, кто-то может указать, что я здесь делаю неправильно. Я возиться с Google API и OAuth, чтобы я мог зарегистрировать пользователей через Google для моего приложения. Я нашел PHP, который они предоставляют, довольно громоздким, поэтому решил больше попрактиковаться в выполнении запросов https и тому подобное. До сих пор у меня был некоторый успех, но последний шаг в получении токена для обмена на пользовательскую информацию требует метода POST. Простое перенаправление браузера, копирование окончательного URL-адреса методом GET возвращает ошибку. Я собираюсь начать копаться в расширении cURL дальше, но, возможно, кто-то может определить, что не так с этим кодом?
$url = "https://accounts.google.com/o/oauth2/token";
$fields = array(
'code' => $_GET['code'],
'client_id' => $google['clientID'],
'client_secret' => $google['clientSecret'],
'redirect_uri' => "http://www.qwiku.com/scripts/php/google/reg_response.php",
'grant_type' => "authorization_code"
);
$data = http_build_query($fields);
echo $data."<br />";
$context = stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => 'Content-Type: application/x-www-form-urlencoded',
'content' => $data
)
));
$result = file_get_contents($url, false, $context);
var_dump($result);
Дамп результата ложен. Вы можете увидеть документацию Google здесь, но я на 99% уверен, что данные сформулированы правильно. http://code.google.com/apis/accounts/docs/OAuth2WebServer.html#formingtheurl
UPDATE
Я сейчас использую curl, и он работает. Единственная проблема - Google возвращает ошибку «invalid_grant». Не уверен, почему, поскольку он установлен точно так, как они указывают.
$url = 'https://accounts.google.com/o/oauth2/token';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
Обновление 2
Я обновил весь процесс, так как я только что обновил перенаправление и бинго, он работает. Срок действия кода истек.