ДЛЯ ТОГО, ЧТОБЫ НАЙТИ ЭТО — эта ошибка произошла из-за повреждения .p12 после загрузки на коробку win7. После загрузки на Unix-машину сертификат работал.
Я проследил около миллиона разных гидов, пытаясь заставить это работать.
Я пытаюсь подключиться к API Google Analytics с учетная запись службы.
У меня есть соответствующий «проект», созданный в консоли, учитывая, что указанный проект требует доступа к соответствующему API.
В учетные данные я добавил служебную учетную запись в разделе OAuth, скачал ключ p12 и сохранил на сервере.
Когда я запускаю код:
//start the google v3 api server authorization with the .p12 key
$client = new \Google_Client();
$client->setApplicationName("AnalyticsAPI");
$key = __DIR__ . '/google-keys/AnalyticsAPI-XXXXXX.p12';
$credentials = new \Google_Auth_AssertionCredentials(
'[email protected]',
array('https://www.googleapis.com/auth/analytics.readonly'),
$key
);
$client->setAssertionCredentials($credentials);
//auto refresh if old
if($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($credentials);
}
//start the analytics shtuff
$service = new \Google_Service_Analytics($client);
$accounts = $service->management_accountSummaries->listManagementAccountSummaries();
//Adding Dimensions
$params = array('dimensions' => 'ga:pagePath');
// requesting the data
$data = $service->data_ga->get("ga:$profile_id", $start_date, $end_date, "ga:users,ga:sessions", $params );
print_r($data);
Ошибка выдается из «Google / Signer / P12.php на линии 52»
Unable to parse the p12 file. Is this a .p12 file? Is the password correct? OpenSSL error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag in /XXXXX/classes/google-api-php-client-master/src/Google/Signer/P12.php on line 52
Ошибка выдается из … Signer / P12.php @ 49:
// This throws on error
$certs = array();
if (!openssl_pkcs12_read($p12, $certs, $password)) {
throw new Google_Auth_Exception(
"Unable to parse the p12 file. " .
"Is this a .p12 file? Is the password correct? OpenSSL error: " .
openssl_error_string()
);
}
Когда я извлекаю соответствующий код, пытающийся прочитать файл .p12 и запустить его самостоятельно, я получаю ту же ошибку:
$certs = array();
openssl_pkcs12_read($key, $certs, 'notasecret');
print_r($certs);
echo openssl_error_string();
die(x);Array ( ) error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
Я полностью в тупике. Читая некоторые другие сообщения по этому вопросу, как этот:
Получение "Невозможно разобрать файл p12 …" Ошибка с google-api-php-client
я пытался
file_get_contents($key)
а затем переходя к openssl_pkcs12_read
который дает такие же результаты!У кого-нибудь есть какие-нибудь подсказки?
Попробуйте этот урок Сервисный аккаунт Google с PHP
session_start();
require_once 'Google/Client.php';
require_once 'Google/Service/Analytics.php';
/************************************************
The following 3 values an befound in the setting
for the application you created on Google
Developers console. Developers console.
The Key file should be placed in a location
that is not accessable from the web. outside of
web root. web root.
In order to access your GA account you must
Add the Email address as a user at the
ACCOUNT Level in the GA admin.
************************************************/
$client_id = '1046123799103-nk421gjc2v8mlr2qnmmqaak04ntb1dbp.apps.googleusercontent.com';
$Email_address = '1046123799103-nk421gjc2v8mlr2qnmmqaak04ntb1dbp@developer.gserviceaccount.com';
$key_file_location = '629751513db09cd21a941399389f33e5abd633c9-privatekey.p12';
$client = new Google_Client();
$client->setApplicationName("Client_Library_Examples");
$key = file_get_contents($key_file_location);
// seproate additional scopes with a comma
$scopes ="https://www.googleapis.com/auth/analytics.readonly";
$cred = new Google_Auth_AssertionCredentials(
$Email_address,
array($scopes),
$key
);
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}
$service = new Google_Service_Analytics($client);
$accounts = $service->management_accountSummaries->listManagementAccountSummaries();
//calulating start date
$date = new DateTime(date("Y-m-d"));
$date->sub(new DateInterval('P10D'));
//Adding Dimensions
$params = array('dimensions' => 'ga:userType');
// requesting the data
$data = $service->data_ga->get("ga:78110423", $date->format('Y-m-d'), date("Y-m-d"), "ga:users,ga:sessions", $params );
?><html>
<?php echo $date->format('Y-m-d') . " - ".date("Y-m-d"). "\n";?>
<table>
<tr>
<?php
//Printing column headers
foreach($data->getColumnHeaders() as $header){
print "<td>".$header['name']."</td>";
}
?>
</tr>
<?php
//printing each row.
foreach ($data->getRows() as $row) {
print "<tr><td>".$row[0]."</td><td>".$row[1]."</td><td>".$row[2]."</td></tr>";
}
//printing the total number of rows
?>
<tr><td colspan="2">Rows Returned <?php print $data->getTotalResults();?> </td></tr>
</table>
</html>
код извлечен из ранее упомянутого урока.
Других решений пока нет …