我有一个网络应用程序,可让用户选择授予其离线访问用户的Google Analytics帐户的权限。我遇到的问题是,当我需要立即从多个Google Analytics帐户输出数据时。当我更新每个用户的访问令牌并尝试检索数据时,我总是从存储的第一个访问令牌中接收数据。
下面是循环浏览2个刷新令牌的示例PHP代码,为每个令牌创建和设置访问令牌,并提取每个用户有权访问的配置文件ID。由于我在循环中重置了访问令牌,我希望它能够输出每个用户有权访问的配置文件,而是输出第一个用户有权访问两次的配置文件。同样,如果我将循环更改为以第二个刷新令牌开头,则第二个用户访问的配置文件将打印两次:
$refresh_token1 = "123";
$refresh_token2 = "456";
foreach(array($refresh_token1,$refresh_token2) as $r){
$access_token = array( "access_token" => "", "token_type" => "Bearer", "expires_in" => 0, "refresh_token" => $r, "created" => 0 );
$client->setAccessToken($access_token);
$analytics = new Google_Service_Analytics($client);
$obj = $analytics->management_profiles->listManagementProfiles('~all', '~all');
if (count($obj->getItems()) > 0) {
$items = $obj->getItems();
foreach($items as $item){
echo $item->getId()."<BR>";
}
}
}
我也尝试在第一个循环之后调用“$ client-&gt; refreshToken($ r)”命令,但这似乎也不起作用。
答案 0 :(得分:1)
更新访问令牌是不够的。需要在循环中创建新客户端以为每个用户提取唯一数据。以下是可以使用的代码的更新版本:
$refresh_token1 = "123";
$refresh_token2 = "456";
foreach(array($refresh_token1,$refresh_token2) as $r){
$client = new Google_Client();
$client->setAuthConfig(__DIR__ . '/client_secrets.json');
$client->addScope(Google_Service_Analytics::ANALYTICS_READONLY);
$access_token = array( "access_token" => "", "token_type" => "Bearer", "expires_in" => 0, "refresh_token" => $r, "created" => 0 );
$client->setAccessToken($access_token);
$analytics = new Google_Service_Analytics($client);
$obj = $analytics->management_profiles->listManagementProfiles('~all', '~all');
if (count($obj->getItems()) > 0) {
$items = $obj->getItems();
foreach($items as $item){
echo $item->getId()."<BR>";
}
}
}