1

尝试使用 OATH2 对 Google Analytics API (v3) 进行身份验证时出现以下错误:

警告:openssl_sign() 期望参数 4 很长,字符串在第 60 行的 google-api-php-client/src/auth/Google_P12Signer.php 中给出

Google_AuthException:无法在第 61 行的 google-api-php-client/src/auth/Google_P12Signer.php 中签署数据

这是我的 PHP 代码:

// api dependencies
require_once(dirname(__FILE__) . '/../../vendor/google-api-php-client/src/Google_Client.php');
require_once(dirname(__FILE__) . '/../../vendor/google-api-php-client/src/contrib/Google_AnalyticsService.php');

session_start();

// create client object and set app name
$client = new Google_Client();
$client->setApplicationName(APP_NAME);

// set assertion credentials
$client->setAssertionCredentials(
  new Google_AssertionCredentials(
    'xxxxxxx@developer.gserviceaccount.com',
    array('https://www.googleapis.com/auth/analytics.readonly'),
          file_get_contents('xxxxxxxxxx-privatekey.p12')  // keyfile
));

// other settings
$client->setClientId('xxxxxxx.apps.googleusercontent.com');
$client->setAccessType('offline_access');

// create service
$service = new Google_AnalyticsService($client);

$properties = $service->management_webproperties->listManagementWebproperties("~all");
print_r($properties);

如果我 print_r($service) 我得到一个没有错误的有效对象。生成错误的是 listManagementWebproperties() 调用。

请问有人有解决办法吗?看起来 Google_Client 可能在不断变化,因为它是在几天前编辑的。我通过 SVN 从主干获得它,而不是通过下载页面获得它,我相信它有一个不支持服务帐户的旧版本。谢谢。

4

1 回答 1

0

根据openssl_sign()PHP 文档,第四个参数应该是int

http://php.net/manual/en/function.openssl-sign.php

bool openssl_sign ( string $data , string &$signature , mixed $priv_key_id [, int $signature_alg = OPENSSL_ALGO_SHA1 ] )

Google_P12Signer的代码中,他们像这样使用它:

if (!openssl_sign($data, $signature, $this->privateKey, "sha256")) {
  throw new Google_AuthException("Unable to sign data");
}

传递显然不是 INT 的“sha256”。没有根据以下内容为sha256定义 OPENSSL_ALGO_* :http ://www.php.net/manual/en/openssl.signature-algos.php这意味着它不起作用。

你需要做的是定义你自己的 OPENSSL_ALGO_SHA256,有点像你在这段代码中看到的:http: //pastebin.com/qdCyC0Pe

有人还写了一个补丁来帮助:http: //php.it2y.info/missing-sha256-sha512-families-of-signature-algorithms.html

于 2012-08-07T17:54:23.457 回答