如何使用谷歌API获取服务帐户的身份验证令牌?

时间:2016-08-11 13:05:02

标签: php oauth-2.0 google-api

我有一个Wordpress网站(运行PHP),需要使用google-api向访问者显示自己的分析数据。我想用Javascript创建图表,所以我需要从PHP代码中获取一个auth令牌,然后将其传递给Javascript代码。我无法弄清楚如何获得身份验证令牌。

到目前为止,我的代码与使用我的服务帐户相似: https://github.com/google/google-api-php-client/blob/master/examples/service-account.php

我的代码:

$client = new Google_Client();
$client->setAuthConfig($credentialsFilePath);

$client->addScope('https://www.googleapis.com/auth/analytics.readonly');
$client->setApplicationName("GoogleAnalytics");


$analytics = new Google_Service_Analytics($client);
$ga = $analytics->data_ga;

$start = date('Y-m-d', strtotime('-7 days'));
$end   = date('Y-m-d');

$views = $ga->get('ga:'.$myAnalyticsId,
                $start,
                $end,
                'ga:pageviews,ga:sessions,ga:newUsers',
                array(
                    'dimensions' => 'ga:date',
                    'sort' => 'ga:date'
                ));

一切正常,我可以连接到Google_Service_Analytics并获取分析数据。但是,我无法弄清楚如何使用我的凭据获取服务访问令牌,我可以将其移交给Javascript代码,以便我可以使用Javascript中的Google AnalyticsAPI。

这不起作用:

$token = $client->getAccessToken();

令牌最终变为空。我需要做什么才能获取令牌?

3 个答案:

答案 0 :(得分:2)

想出来:

$client->refreshTokenWithAssertion();
$token = $client->getAccessToken();
$accessToken = $token['access_token'];

答案 1 :(得分:2)

这是我的有效代码。 服务帐户具有用于生成访问令牌的不同类型的过程。 它不遵循oauth客户端api。

//include_once 'vendor/autoload.php';
$credentialsFilePath = 'test.json';
$client = new Google_Client();
$client->setAuthConfig($credentialsFilePath);

$client->addScope('https://www.googleapis.com/auth/analytics.readonly');
$client->setApplicationName("GoogleAnalytics");
$client->refreshTokenWithAssertion();
$token = $client->getAccessToken();
print_r($token);
$accessToken = $token['access_token'];

答案 2 :(得分:0)

第一个答案在 2021 年仍然有效(谢谢!),但不推荐使用一个使用过的函数(尽管仍然可用) 这对我有用

public function getToken() {
    $client = new Client(); // use Google\Client;
    $client->setAuthConfig('securejsonfile.json');
    $client->addScope('https://www.googleapis.com/auth/cloud-platform');
    $client->setApplicationName('appname');
    $client->fetchAccessTokenWithAssertion();

    return $client->getAccessToken(); //array
}