【问题标题】:How to fetch auth token for service account using google API?如何使用谷歌 API 获取服务帐户的身份验证令牌?
【发布时间】:2016-08-11 13:05:01
【问题描述】:

我有一个 Wordpress 网站(运行 PHP),它需要使用 google-api 向访问者显示自己的分析数据。我想用 Javascript 创建图表,所以我需要从 PHP 代码中获取一个身份验证令牌,然后将其传递给 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 Analytics API。

这不起作用:

$token = $client->getAccessToken();

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

【问题讨论】:

    标签: php oauth-2.0 google-api


    【解决方案1】:

    这是我的工作代码。 服务帐户具有用于生成访问令牌的不同类型的过程。 它没有遵循 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】:

    想通了:

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

    【讨论】:

    • 我在做噩梦的自动取款机上遇到了同样的事情......请你帮我 XD fb.com/jmt193 ty!
    【解决方案3】:

    第一个答案在 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      相关资源
      最近更新 更多