Я пытался в течение нескольких дней получить API-интерфейс Google Calendar PHP на моем локальном сайте развития Laravel. Вот проблема:API Календаря Google с проблемами учетной записи службы
Я использую учетную запись службы, поэтому я могу выполнять функции на один календарь (календарь учетных записей службы). Я не аутентифицирую пользователей и не запрашиваю доступ к их календарю.
Я проверил все, начиная с моего идентификатора клиента, служебного адреса электронной почты, файла key.P12
, все равно ничего не происходит.
Вот мой код:
$key = File::get($this->key);
$credentialObj = new \Google_Auth_AssertionCredentials(
$this->serviceAccountName,
array('https://www.googleapis.com/auth/calendar'),
$key,
'notasecret'
);
$client = new \Google_Client();
$client->setApplicationName($this->applicationName);
$client->setClientId($this->clientId);
$client->setAssertionCredentials($credentialObj);
\session_start();
$calendarServiceObj = new \Google_Service_Calendar($client);
$events = $calendarServiceObj->events->listEvents('[email protected]');
dd($events->getItems());
Я даже попытался использовать собственный пример Google здесь:
https://github.com/google/google-api-php-client/blob/master/examples/service-account.php
Нет ошибок, ничего. Просто пустая страница ошибки каждый раз. Я пробовал так много примеров по всему Интернету, даже здесь, при переполнении стека, и в конце все, что я получаю, это «Эта веб-страница недоступна». Это происходит в каждом браузере.
Laravel установлен в режиме разработки, так отображаются все ошибки, и я даже заставить установить INI с помощью ini_set("display_errors", 1);
.
Я знаю, что все работает нормально, пока я не запрошу ничего от объекта услуги. Все настройки api в календаре установлены на on
в моей учетной записи разработчика. Должен ли мой локальный домен разработки поддерживать SSL?
Было бы так хорошо, если бы я мог выяснить, по крайней мере, то, что происходит, но с этой неясной ошибкой я понятия не имею.
Если у кого есть какие-либо советы, я бы очень признателен. Благодаря!!
EDIT: Я рыскал по коду Googles API, и это именно то, если запрос не удается:
vendor\google\apiclient\src\Google\Signer\P12.php
Линия 77 до 92:
public function sign($data)
{
if (version_compare(PHP_VERSION, '5.3.0') < 0) {
throw new Google_Auth_Exception(
"PHP 5.3.0 or higher is required to use service accounts."
);
}
$hash = defined("OPENSSL_ALGO_SHA256") ? OPENSSL_ALGO_SHA256 : "sha256";
//If I die(); here, I receive the response
if (!openssl_sign($data, $signature, $this->privateKey, $hash)) {
//Something happens here, or inside the openssl_sign command, I never reach the exception
throw new Google_Auth_Exception("Unable to sign data");
}
//It never reaches here
return $signature;
}
В моем PHP Info: