Php Analytics API返回:错误请求-无效的授权
我正在使用谷歌分析API v3。我现在将解释我的申请流程 我在这里使用了以下文档: 首先,为用户生成OAUTH-URL。URL如下所示Php Analytics API返回:错误请求-无效的授权,php,curl,google-analytics,Php,Curl,Google Analytics,我正在使用谷歌分析API v3。我现在将解释我的申请流程 我在这里使用了以下文档: 首先,为用户生成OAUTH-URL。URL如下所示 https://accounts.google.com/o/oauth2/auth? client_id={CLIENT-ID}& redirect_uri={REDIRECT-URL}& state={CUSTOM-NUMBER}& response_type=code& access_type=offline& app
https://accounts.google.com/o/oauth2/auth?
client_id={CLIENT-ID}&
redirect_uri={REDIRECT-URL}&
state={CUSTOM-NUMBER}&
response_type=code&
access_type=offline&
approval_prompt=force&
scope=https://www.googleapis.com/auth/analytics
string(67) "{ "error": "invalid_grant", "error_description": "Bad Request" } "
当用户单击他验证的链接时。之后,通过代码,我将获得访问和刷新令牌
我正在向https://www.googleapis.com/oauth2/v3/token
带有参数
code = Code from Analytics
grant_type = authorization_code
client_secret = CLIENT_SECRET
client_id = CLIENT_ID
redirect_uri = REDIRECT_URI
我发送的cURL选项如下所示:
CURLOPT\u HTTPHEADER=array('Content-Type:application/x-www-form-urlencoded')
当然,post数据是使用http_build_查询构建的,因此我可以使用该内容类型头
然后,我用这个URL获取用户的所有配置文件
https://www.googleapis.com/analytics/v3/management/accounts/~all/webproperties/~all/profiles
这很有效,我列出了所有的配置文件。然后,用户选择其中一个配置文件,my library为用户获取当前数据(页面浏览、访问等)
我现在遇到的问题是,当我想每天用cron刷新数据时,我会收到错误消息:
'error' => 'invalid_grant',
'error_description' => 'Bad Request'
但我不知道,为什么
我在数据库中保存了配置文件的访问令牌和刷新令牌。然后,在请求访问数据之前重新访问数据时,我检查令牌是否有效。但即使这样也失败了
我在这里做这个请求
它告诉我,访问令牌是无效的(这很神秘,因为我刚刚通过身份验证,5秒后令牌不再有效
无论如何,然后我尝试用这个请求刷新它
URL: https://www.googleapis.com/oauth2/v3/token
Parameters:
client_secret = CLIENT_SECRET
client_id = CLIENT_ID
refresh_token = REFRESH_TOKEN From my database
grant_type = refresh_token
cURL Options: CURLOPT_HTTPHEADER = array('Content-Type: application/x-www-form-urlencoded')
然后,使用http_build_查询生成的参数生成post请求
反应是这样的
https://accounts.google.com/o/oauth2/auth?
client_id={CLIENT-ID}&
redirect_uri={REDIRECT-URL}&
state={CUSTOM-NUMBER}&
response_type=code&
access_type=offline&
approval_prompt=force&
scope=https://www.googleapis.com/auth/analytics
string(67) "{ "error": "invalid_grant", "error_description": "Bad Request" } "
但我不知道为什么。我使用的是5分钟前获得的访问令牌和刷新令牌,以及第一个请求使用的令牌。为什么5分钟后使用相同的令牌不起作用?为什么我甚至不能刷新令牌?无效授权通常有两个可能的原因
我无法从你的代码中找出任何东西。它看起来有点混乱。但我看不到任何看起来确实错误的东西。这就是为什么我猜测它可能是前两个问题之一。我知道这个问题已经过时,但我遇到这个问题是因为斜杠(
/
)在从重定向url提取时,代码有时会出现错误,并且没有正确解码
所以像4/BGrvsJeuc5BoRRN…
这样的令牌像4%2FBGrvsJeuc5BoRRN…
一样出现在我的服务器上
发布此消息,以防其他人会像我一样愚蠢。嗨,谢谢你的回答。回复1.当前日期是
周一1月26日11:31:12 CET 2015
这听起来很正确。2.问题是,我甚至没有生成新的刷新令牌。我想刷新访问令牌,甚至连访问令牌都不起作用。另外,我是我们正在刷新5分钟前发出的访问令牌。这意味着,它应该仍然有效,不是吗?另外,正如我所说,当访问令牌无效时,我正在尝试使用刷新令牌生成一个新的令牌。但是,我没有刷新刷新令牌。只是刷新访问令牌。我的代码中有什么可以更改的,或者我可以提供进一步的代码吗e来帮助您理解它?当您请求一个新的访问令牌时,您使用刷新令牌,它将为您提供一个新的访问令牌,除非您再次请求用户访问,否则您的刷新令牌将永远不会更改。您好。我想这里可能有一点误解。是的,刷新令牌永远不会更改,我知道。我只是指的是第2点你的回答是,你说谷歌只能发行25个刷新令牌。但是,我甚至没有使用新的刷新令牌。我正在对所有其他请求使用当前的刷新令牌。这也会为我生成一个新的访问令牌。但是,即使这样也失败了,标题中出现了错误。只是一个跟进。看起来你的p是对的第2点。问题是,我认为刷新令牌是根据谷歌分析配置文件的。因此,像UA-XXXXX-01和UA-XXXXX-02一样,可能都有25个刷新令牌。但事实是,刷新令牌对这两个帐户都有作用。我只是有一个误解。谷歌说,刷新令牌是根据谷歌用户Ac计算的计数,我认为它们是每个配置文件。感谢您的回答。我现在接受您的答案并投票表决。:)