2

ユーザーの連絡先を取得できる Google People API を使用しようとしています。これが私のコードです:

$scriptUri = "http://".$_SERVER["HTTP_HOST"].$_SERVER['PHP_SELF'];
$client = new Google_Client();
$client->setClientId('OMITTED');
$client->setClientSecret('OMITTED');
$client->setRedirectUri($scriptUri);
//$client->setAccessType('offline');

$client->setScopes(array('https://www.googleapis.com/auth/plus.login', 'https://www.googleapis.com/auth/contacts.readonly', 'profile'));

if (isset($_GET['oauth'])) {
  // Start auth flow by redirecting to Google's auth server
  $auth_url = $client->createAuthUrl();
  header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
} else if (isset($_GET['code'])) {
  // Receive auth code from Google, exchange it for an access token, and
  // redirect to your base URL
  $client->authenticate($_GET['code']);
  $_SESSION['access_token'] = $client->getAccessToken();
  $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/';
  header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
} else if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
  // You have an access token; use it to call the People API
  $client->setAccessToken($_SESSION['access_token']);
  $people_service = new Google_Service_People($client);
  $connections = $people_service->people->get('people/me');
  // TODO: Use service object to request People data
} else {
  $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/?oauth';
  header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}

$connections 行が呼び出されると、次のエラーがスローされます。

メッセージ「GET の呼び出し中にエラーが発生しましたhttps://people.googleapis.com/v1/people/me : (403) 呼び出し元に、"people/me" を要求する権限がありません。リクエストには、[profile, https://www.googleapis.com/auth/plus.login]のいずれかのスコープが必要です。

スコープが上に設定されているため、エラーが発生する理由がわかりません。

すべての助けに感謝します!

4

1 に答える 1

1

私はあなたのコードを問題なく使用しました。私の推測では$_SESSION['access_token']、正しいスコープが承認されていないアクセストークンが含まれています。認証フローをもう一度実行して、正しいスコープが承認された新しいアクセス トークンを取得していることを確認します。

于 2016-06-02T00:00:23.287 に答える