1

Я пытаюсь использовать API календаря Google с библиотекой php, и я сталкиваюсь с проблемами при аутентификации пользователя в google api.Google API и OAuth 2.0

У меня вопрос. Я видел, как кто-то пришел, где вам нужно было установить ключ ключа/ключа Api для объекта Google_Client с помощью метода setDeveloperKey(), но я также видел некоторых людей, которые этого не делают. Может кто-нибудь объяснить мне, какая разница?

Вещь, которую я хотел бы сделать, - это подключить пользователя, у которого есть учетная запись google для моего приложения, чтобы он мог добавлять, списывать, удалять и т. Д. Из календаря. Это то, что я делаю на данный момент для аутентификации:

$client = new Google_Client(); 
$client->setApplicationName("Test GCAL"); 
$client->setClientId($clientid); 
$client->setClientSecret($clientsecret); 
$client->setRedirectUri($callback_url); 
$client->setAccessType("offline"); 
$client->setApprovalPrompt("force"); 

$client->setScopes("https://www.googleapis.com/auth/calendar"); 
$service = new Google_Service_Calendar($client); 

Я делаю это правильно?

У кого-то есть рабочий код, который я могу проанализировать? Я не могу найти тот, который работает в Интернете .. Или, может быть, учебник, который объясняет все о google api и oauth. Я так запутался в токенах, и никто, кажется, не использует обновленные токены, и для меня это важно. Но может быть, я ошибаюсь?

Спасибо за ваши ответы

ответ

1

Я не думаю, что вы НЕОБХОДИМОСТЬ использовать setDeveloperKey я подозреваю, что его только для публичного API, чтобы вы могли использовать их, но я на самом деле не тестировал или думал о это раньше. Мне придется заглянуть в это немного больше.

Это код, который я использую для подключения к Календарю Google с помощью Oauth2. ripped непосредственно из руководства Accessing Google Calendar with PHP – Oauth2

<?php  
require_once 'Google/Client.php'; 
require_once 'Google/Service/Calendar.php'; 
require_once 'CalendarHelper.php'; 
session_start(); 
$client = new Google_Client(); 
$client->setApplicationName("Client_Library_Examples"); 
$client->setDeveloperKey("AIzaSyBBH88dIQPjcl5nIG-n1mmuQ12J7HThDBE"); 
$client->setClientId('2046123799103-i6cjd1hkjntu5bkdkjj5cdnpcu4iju8p.apps.googleusercontent.com'); 
$client->setClientSecret('6s4YOx3upyJhtwnetovfK40e'); 
$client->setRedirectUri('http://localhost/google-api-php-client-samples/Calendar/oauth2Pure.php'); 
$client->setAccessType('offline'); // Gets us our refreshtoken 

$client->setScopes(array('https://www.googleapis.com/auth/calendar.readonly')); 


//For loging out. 
if (isset($_GET['logout'])) { 
    unset($_SESSION['token']); 
} 


// Step 2: The user accepted your access now you need to exchange it. 
if (isset($_GET['code'])) { 

    $client->authenticate($_GET['code']); 
    $_SESSION['token'] = $client->getAccessToken(); 
    $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; 
    header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL)); 
} 

// Step 1: The user has not authenticated we give them a link to login  
if (!isset($_SESSION['token'])) { 

    $authUrl = $client->createAuthUrl(); 

    print "<a class='login' href='$authUrl'>Connect Me!</a>"; 
}  
// Step 3: We have access we can now create our service 
if (isset($_SESSION['token'])) { 
    $client->setAccessToken($_SESSION['token']); 
    print "<a class='logout' href='".$_SERVER['PHP_SELF']."?logout=1'>LogOut</a><br>"; 

    $service = new Google_Service_Calendar($client);  

    $calendarList = $service->calendarList->listCalendarList();; 
    print_r($calendarList); 
    while(true) { 
     foreach ($calendarList->getItems() as $calendarListEntry) { 
      echo $calendarListEntry->getSummary()."<br>\n"; 
     } 
     $pageToken = $calendarList->getNextPageToken(); 
     if ($pageToken) { 
      $optParams = array('pageToken' => $pageToken); 
      $calendarList = $service->calendarList->listCalendarList($optParams); 
     } else { 
      break; 
     } 
    } 
} 
?> 
+0

Благодарим за ваш ответ! Я попробую и скажу. (спрячьте свою информацию о приложении, хотя вы не должны показывать ее так: p) Но вы, кажется, не используете обновленные токены, это нормально? ваш перенаправление uri приводит к этой странице? – Devz

+0

, что информация о приложении изменена, но только я знаю, как ее изменение облегчает меня при работе с учебниками :) URI перенаправления настроен в консоли разработчика. Я использую localhost при работе над учебниками. Клиент lib обрабатывает все обновления токенов. думаю, вы можете это увидеть, если вы напечатаете_r токен сеанса – DaImTo

+1

Хорошо .. он работает. СПАСИБО БОЛЬШОЕ ! Я сделаю некоторое изменение, поместив все это в класс. На самом деле, это довольно просто. Я был на этом в течение нескольких дней ахаха! – Devz

Смежные вопросы