“Google_Exception”,消息为“经过身份验证后无法添加服务”

2024-02-25

我正在使用 Oauth 2.0 开发带有 Google Analytics 的 WP 插件。

我所有的身份验证和数据提取都工作正常,除了这个问题:第一次获得新的 Google 授权代码(例如:“4/-xbSbg....”)并进行身份验证,然后尝试调用new Google_AnalyticsService() 对象,它会返回错误:

“Google_Exception”,消息为“经过身份验证后无法添加服务”

这是第 109 行:http://code.google.com/p/google-api-php-client/source/browse/trunk/src/apiClient.php?r=258 http://code.google.com/p/google-api-php-client/source/browse/trunk/src/apiClient.php?r=258

一旦我刷新调用此代码的页面,它就可以正常工作 - 即 check_login() 的第一个分支可以,但身份验证调用无法正常工作。

您会看到代码似乎在抱怨,因为我首先进行了身份验证,并且消息说我不应该这样做。评论和代码确实让我很困惑我的问题是什么(我意识到登录代码还不是很干净)。

重要提示:我正在对已安装的应用程序使用 Google 身份验证,因此我们要求用户提供身份验证代码,并使用它来获取身份验证令牌。

get_option()、set_option() 和 update_option() 是 WP 本机函数,不是问题的一部分

这是我的代码:

class GoogleAnalyticsStats
{
var $client = false;

function GoogleAnalyticsStats()
{       
$this->client = new Google_Client();

$this->client->setClientId(GOOGLE_ANALYTICATOR_CLIENTID);
$this->client->setClientSecret(GOOGLE_ANALYTICATOR_CLIENTSECRET);
$this->client->setRedirectUri(GOOGLE_ANALYTICATOR_REDIRECT);  
$this->client->setScopes(array(GOOGLE_ANALYTICATOR_SCOPE));

// Magic. Returns objects from the Analytics Service instead of associative arrays.
$this->client->setUseObjects(true);
}

function checkLogin()
{
$ga_google_authtoken  = get_option('ga_google_authtoken');
if (!empty($ga_google_authtoken)) 
{
        $this->client->setAccessToken($ga_google_authtoken);
}
else
{
    $authCode = get_option('ga_google_token');

    if (empty($authCode)) return false;

    $accessToken = $this->client->authenticate($authCode);
    $this->client->setAccessToken($accessToken);
    update_option('ga_google_authtoken', $accessToken);         

}   

return true;
 }

function getSingleProfile()
{
$analytics = new Google_AnalyticsService($this->client);
}

}

你需要搬家$analytics = new Google_AnalyticsService($this->client); inside function GoogleAnalyticsStats(),并且最好将 $analytics 转换为成员变量。

class GoogleAnalyticsStats
{
  var $client = false;
  var $analytics = false;

  function GoogleAnalyticsStats()
  {       
    $this->client = new Google_Client();

    $this->client->setClientId(GOOGLE_ANALYTICATOR_CLIENTID);
    $this->client->setClientSecret(GOOGLE_ANALYTICATOR_CLIENTSECRET);
    $this->client->setRedirectUri(GOOGLE_ANALYTICATOR_REDIRECT);  
    $this->client->setScopes(array(GOOGLE_ANALYTICATOR_SCOPE));

    // Magic. Returns objects from the Analytics Service instead of associative arrays.
    $this->client->setUseObjects(true);

    $this->analytics = new Google_AnalyticsService($this->client);
  }
  ...

现在,您可以从内部调用分析 APIgetSingleProfile.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“Google_Exception”,消息为“经过身份验证后无法添加服务” 的相关文章

随机推荐

  • 如何在 iOS 之外创建 Apple Music 用户令牌

    我试图让人们通过网页喜欢 Apple Music 上的曲目 专辑或播放列表 我理解此页上的手册 https developer apple com library content documentation NetworkingIntern
  • Flask中的链式下拉菜单,从sqlite数据库获取数据

    我正在尝试获取不同县的 html 选择标签 从数据库获取 当用户选择一个县时 我想要另一个选择标签来启用并显示该县的城市 我在 sqlite 数据库中有数据 其中县 ID 位于城市数据库中 我在 Pycharm 中使用 python 和 F
  • 适用于 Windows 的便携式 Ruby on Rails 环境

    有人问了同样的问题 https stackoverflow com questions 258801 portable ruby on rails environment大约两年前 当时的答案是InstantRails 但 InstantR
  • 如何在 Objective-C 中测试相等性?

    比较顶视图时 第一个 无法执行 相等测试失败 In init i self setCurrentPuzzleView p1 后来 我 if self currentPuzzleView p1 NSLog Removing P1 from S
  • Google Cloud ML Engine 错误 429 内存不足

    我将模型上传到 ML engine 当尝试进行预测时 我收到以下错误 ERROR gcloud ml engine predict HTTP request failed Response error code 429 message Pr
  • 将数组的内容打印为字符串

    我正在尝试编写一个小函数 它接受整数数据并将其转换为 char 数组内的十六进制值 我想做的是 取int数组数据 将其转换为另一个数组中的十六进制 将十六进制数组的内容转换为字符串 打印字符串的内容 int main int data 40
  • phpmailer如何向两个不同的用户发送两条不同的消息

    我正在向两个不同的人发送邮件 两封不同的消息 一封发送给用户 一封发送给管理员 message1 hello user message2 hello admin email email protected cdn cgi l email p
  • Clojure 测试框架的优势?

    您更喜欢哪一个 为什么 各自的优点和缺点是什么 在什么情况下 每个人都比其他人更胜一筹 我对 midje 与 clojure test 特别感兴趣 但也可以随意提出其他 Clojure 测试框架 也可以看看Clojure 的最佳单元测试框架
  • 在静态方法中在 UIView 上用清晰的颜色绘制(切一个洞)

    我有一个iPhone应用程序 我需要实现以下方法 UITextView textView UITextView withCuttedRect CGRect r 此方法必须剪切 填充 UIColor clearColor 矩形r from U
  • 在同一套接字上并行调用 send/recv 是否有效?

    我们可以在同一个套接字上从一个线程调用 send 并从另一个线程调用 receive 吗 我们可以从同一套接字上的不同线程并行调用多个发送吗 我知道好的设计应该避免这种情况 但我不清楚这些系统 API 的行为方式 我也找不到同样的好的文档
  • 表单不提交动态生成的输入(jQuery)

    您好 我正在尝试为我的表单动态生成一些输入 但它没有发布生成的新输入 到目前为止我一直在四处搜索 我唯一能找到的就是使表单成为body 标签 并且在我的应用程序的设计中这是不可能的 所以有人可能知道会发生什么以及如何解决它 不 它不适用于
  • 如何在 Visual Studio Code 中显示 Jupyter Notebook 中的所有输出?

    在 VS Code 中的 Jupyter Notebook 中 当我运行在某个时刻打印大量输出的代码时 剩余的输出将被抑制并显示一条消息 显示更多 在文本编辑器中打开原始输出数据 如何使所有输出可见 我认为你在这里使用内部构建是正确的设置
  • Flink:处理数据早于应用程序水印的键控流

    我正在使用带有运动源和事件时间键控窗口的 F link 该应用程序将监听实时数据流 窗口 事件时间窗口 并处理每个键控流 我有另一个用例 我还需要能够支持某些关键流的旧数据的回填 这些将是事件时间 鉴于我正在使用水印 这会成为一个问题 因为
  • Azure Functions - Blob 流动态输入绑定

    我正在 azure 上运行一个 C 函数 它需要从容器中获取文件 唯一的问题是输入文件的路径每次都会 可能 不同 并且输入文件的数量将从 1 到大约 4 或 5 不等 因此 我不能只使用默认的输入 blob 绑定据我所知 我的选择是给予容器
  • 通过Ajax发送FormData + js变量

    我有这个 Ajax 来发送多个图像 btn on click function var formData new FormData form1 0 var path php upload adm prodpictures php ajax
  • 如何转到 Eclipse 中的“下一个出现”

    在 Eclipse 中 您可以打开 标记出现次数 然后它将突出显示当前范围内给定变量的每次出现 那太好了 但我真的很想从一次这样的事件转移到下一次 到目前为止 我已经找到了两个关于如何执行此操作的建议 但都没有奏效 首先有这样的帖子 Ecl
  • 使用 configparser 添加注释

    我可以使用 python 中的 ConfigParser 模块使用 add section 和 set 方法创建 ini 文件 请参阅示例http docs python org library configparser html http
  • 调试 $rootScope:infdig

    这是一个常见问题 已达到 5 次 digest 迭代 流产 观察者在最近 5 次迭代中被解雇 文档 https docs angularjs org error https docs angularjs org error rootScop
  • 自动更新 HTML 画布宽度和高度属性

    我想将 HTML5 画布与 Flexbox 结合使用 当用户调整窗口大小时 我需要自动设置 canvas width 和 canvas height 我尝试使用 jQuery 来实现 cnvs attr width cnvs width c
  • “Google_Exception”,消息为“经过身份验证后无法添加服务”

    我正在使用 Oauth 2 0 开发带有 Google Analytics 的 WP 插件 我所有的身份验证和数据提取都工作正常 除了这个问题 第一次获得新的 Google 授权代码 例如 4 xbSbg 并进行身份验证 然后尝试调用new