Я пытаюсь получить доступ к календарю электронной почты, используя аутентификацию сервера к серверу, мне удалось получить токен, но когда я использую $service->calendarList->listCalendarList()->getItems()
он возвращает пустой массив, и я уверен, что там есть календари
Примечание. Я использую laravel и уже добавил свой ключ API в настройках безопасности администратора Google (широкий диапазон доменов).
class Calendar {
private static $clientId;
private static $emailAddress;
private static $certificateFingerprints;
private static $p12;
private static $scopes;
private static $p12Password;
private static $sub;
private static $grantType;
private static $client;
public static function initiate(){
self::$clientId = $_ENV["google_clientId"];
self::$emailAddress = $_ENV["google_email"];
self::$certificateFingerprints = $_ENV["google_certificate_fingerprints"];
self::$p12 = file_get_contents(storage_path("keys/trotride.p12"));
self::$scopes = array(
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/userinfo.profile",
"https://www.googleapis.com/auth/calendar",
"https://www.googleapis.com/auth/calendar.readonly",
"https://www.google.com/m8/feeds/");
self::$p12Password = "notasecret";
self::$sub = "[email protected]";
self::$grantType = "http://oauth.net/grant_type/jwt/1.0/bearer";
}
public static function connect(){
self::initiate();
$client = new Google_Client();
$client->setApplicationName("AppName");
$client->setClientId(self::$clientId);
$token = Session::get("token");
if(isset($token)){
$client->setAccessToken($token);
}
$credentials = new Google_Auth_AssertionCredentials(
self::$emailAddress,
self::$scopes,
self::$p12,
self::$p12Password,
self::$grantType,
self::$sub
);
$client->setAssertionCredentials($credentials);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion();
}
if($client->getAccessToken()){
Session::set("token",$client->getAccessToken());
self::$client = $client;
$service = new Google_Service_Calendar($client);
echo "<pre>";
var_dump($service->calendarList->listCalendarList()->getItems());
echo "</pre>";
}else{
echo "failed";
}
}}
Переменная $ _ENV [«google_email»] содержит адрес электронной почты *********@developer.gserviceaccount.com
Задача ещё не решена.
Других решений пока нет …