Может кто-нибудь подскажет, что я делаю не так. Я возился с 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."
";
$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);
Дамп результата - false. Вы можете посмотреть документацию 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
Я обновил весь процесс, поскольку я просто обновлял перенаправление, и бинго, все работает. Код, должно быть, истек.