多くの人が同様のエラーを抱えています...私の質問には誰も答えません。ユーザーに Google Plus にログインして更新トークンを保存してもらい、ユーザーに代わって Moments に投稿できるようにしようとしています。トークンの認証を通過することさえできません。これが私のコードです:
require $_SERVER['DOCUMENT_ROOT'] . '/members/assets/lib/google/Google_Client.php';
require $_SERVER['DOCUMENT_ROOT'] . '/members/assets/lib/google/contrib/Google_PlusService.php';
$client = new Google_Client();
$client->setApplicationName("Americal Lose Weight");
$client->setClientId($oauth2_client_id);
$client->setClientSecret($oauth_client_secret);
$client->setRedirectUri($oauth2_redirect_uri);
$plus = new Google_PlusService($client);
if (isset($_REQUEST['logout'])) {
unset($_SESSION['access_token']);
}
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
}
if (isset($_SESSION['access_token'])) {
$client->setAccessToken($_SESSION['access_token']);
}
if ($client->getAccessToken()) {
$me = $plus->people->get('me');
$url = filter_var($me['url'], FILTER_VALIDATE_URL);
$img = filter_var($me['image']['url'], FILTER_VALIDATE_URL);
$name = filter_var($me['displayName'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
$personMarkup = "<a rel='me' href='$url'>$name</a><div><img src='$img'></div>";
$optParams = array('maxResults' => 100);
$activities = $plus->activities->listActivities('me', 'public', $optParams);
$activityMarkup = '';
foreach($activities['items'] as $activity) {
$url = filter_var($activity['url'], FILTER_VALIDATE_URL);
$title = filter_var($activity['title'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
$content = filter_var($activity['object']['content'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
$activityMarkup .= "<div class='activity'><a href='$url'>$title</a><div>$content</div></div>";
}
// The access token may have been updated lazily.
$_SESSION['access_token'] = $client->getAccessToken();
} else {
$authUrl = $client->createAuthUrl();
}
if(isset($authUrl)) {
header("Location: $authUrl");
} else {
var_dump($_SESSION);
}
もちろん、クライアント ID とクライアント シークレットは構成ファイルに保存されており、このファイルが呼び出される前に呼び出されます。
認証URLが読み込まれ、Google Plusアカウントを選択できます...しかし、コールバックでそれが表示されます
例外「Google_AuthException」がキャッチされず、「OAuth2 アクセス トークンの取得中にエラーが発生しました。メッセージ:「invalid_request」」
http://members.americaloseweight.com/auth/login.php?app=googleで試すことができます。 私のリダイレクト URL はこのページを指しています。
それで、私は何を間違っていますか?
編集
Google_OAuth2.php の 97 行目で、makeRequest 関数を呼び出します。
$request = Google_Client::$io->makeRequest(new Google_HttpRequest(self::OAUTH2_TOKEN_URI, 'POST', array(), array(
'code' => $code,
'grant_type' => 'authorization_code',
'redirect_uri' => $this->redirectUri,
'client_id' => $this->clientId,
'client_secret' => $this->clientSecret
)));
リクエストとして返されたものをダンプすると、次のようになります。
Google_HttpRequest Object
(
[batchHeaders:Google_HttpRequest:private] => Array
(
[Content-Type] => application/http
[Content-Transfer-Encoding] => binary
[MIME-Version] => 1.0
[Content-Length] =>
)
[url:protected] => https://accounts.google.com/o/oauth2/token
[requestMethod:protected] => POST
[requestHeaders:protected] => Array
(
[content-type] => application/x-www-form-urlencoded
[content-length] => 272
)
[postBody:protected] => code=4%2FPWcMMWU80cd20kvppA0mlA8ldCYl.grjspKy0hxAUshQV0ieZDAq-J97AgwI&grant_type=authorization_code&redirect_uri=http%3A%2F%2Fmembers.americaloseweight.com%2Fauth%2Flogin.php%3Fapp%3Dgoogle&client_id=344482743517-2pn1hngv5sv3mf4bk70pjvq2ufkf2uii.apps.googleusercontent.com
[userAgent:protected] => Americal Lose Weight google-api-php-client/0.6.5
[responseHttpCode:protected] => 400
[responseHeaders:protected] => Array
(
[cache-control] => no-cache, no-store, max-age=0, must-revalidate
[pragma] => no-cache
[expires] => Fri, 01 Jan 1990 00:00:00 GMT
[date] => Tue, 22 Oct 2013 13:49:18 GMT
[content-type] => application/json
[x-content-type-options] => nosniff
[x-frame-options] => SAMEORIGIN
[x-xss-protection] => 1; mode=block
[server] => GSE
[alternate-protocol] => 443:quic
[transfer-encoding] => chunked
)
[responseBody:protected] => {
"error" : "invalid_request"
}
[accessKey] =>
)