使用Google_Client在Google AnalyticsAPI中签署OAUTH2错误

时间:2012-08-07 17:45:36

标签: php oauth-2.0 google-analytics-api google-api-client

尝试使用OATH2对Google AnalyticsAPI(v3)进行身份验证时,我遇到以下错误:

警告:openssl_sign()期望参数4为long,在第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从trunk获得的,而不是通过我认为有不支持服务帐户的旧版本的下载页面。感谢。

1 个答案:

答案 0 :(得分:0)

根据openssl_sign() PHP文档,第4个参数应为 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");
}

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

您需要做的是定义自己的OPENSSL_ALGO_SHA256,就像您在此代码中看到的那样:http://pastebin.com/qdCyC0Pe

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