2014-12-04 3 views
0

Я пытался в течение нескольких дней получить 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

Нет ошибок, ничего. Просто пустая страница ошибки каждый раз. Я пробовал так много примеров по всему Интернету, даже здесь, при переполнении стека, и в конце все, что я получаю, это «Эта веб-страница недоступна». Это происходит в каждом браузере.

enter image description here

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:

enter image description here

ответ

0

Решено путем обновления PHP. Я использовал Softaculous AMPPs 2.3 с PHP 5.4.27. Обновление до AMPPs 2.6 исправило проблему. Мой Open SSL в моей конфигурации сейчас:

enter image description here

Ничего не было сделано для моего кода выше, так как, и теперь он работает. Это определенно была открытая проблема ssl. Любой, получающий ERR_CONNECTION_RESET, должен обновить свою версию open_ssl.

Надеюсь, это поможет любому, кто пытается понять это.

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