Using stream_context_create to do a POST - Result is false:(

Может кто-нибудь подскажет, что я делаю не так. Я возился с 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

Я обновил весь процесс, поскольку я просто обновлял перенаправление, и бинго, все работает. Код, должно быть, истек.

9
задан Throttlehead 3 January 2012 в 10:11
поделиться