我正在使用Google AnalyticsAPI v3。我现在解释我的申请流程
我在这里使用了这个文档:https://developers.google.com/accounts/docs/OAuth2WebServer
首先,为用户生成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&
approval_prompt=force&
scope=https://www.googleapis.com/auth/analytics
当用户点击他进行身份验证的链接时。然后,通过代码,我获得了访问和刷新令牌。
我使用参数
向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_HTTPHEADER = array('Content-Type: application/x-www-form-urlencoded')
当然,post数据是使用http_build_query构建的,所以我可以使用那个内容类型的标题。
然后,我将获取该用户的所有个人资料,并使用此网址
https://www.googleapis.com/analytics/v3/management/accounts/~all/webproperties/~all/profiles
这很有效,我列出了所有个人资料。然后,用户选择其中一个配置文件,我的库将获取用户的当前数据(网页浏览量,访问次数等)
我现在遇到的问题是,当我想每天用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_query
构建的params的post请求响应看起来像这样
string(67) "{ "error": "invalid_grant", "error_description": "Bad Request" } "
但我不明白为什么。我使用了前5分钟获得的访问令牌和刷新令牌以及为第一个请求工作的令牌。为什么5分钟后使用相同的令牌不能正常工作?为什么我甚至不能刷新令牌?
答案 0 :(得分:4)
无效的授权通常有两个可能的原因。
您应该只存储刷新令牌。 Access令牌将在一小时后过期。以下是不同电话Google 3 legged Oauth2 flow的散步。
我无法从你的代码中弄清楚它看起来有点令人困惑。但是我看不出任何真正错误的东西,这就是为什么我猜它可能是前两个问题之一。
答案 1 :(得分:1)
我知道这个问题已经过时,但由于代码有时会出现斜杠(/
)并且在从重定向网址中提取时没有正确解码,因此我遇到了这个问题。
像4/BGrvsJeuc5BoRRN ...
这样的令牌就像4%2FBGrvsJeuc5BoRRN ...
一样在我的服务器上运行。
发布此信息以防其他人像我一样愚蠢。