Mus*_*abe 3 php curl google-analytics
我正在使用Google Analytics(分析)API v3。我现在将解释我的申请流程
我在这里使用了此文档:https : //developers.google.com/accounts/docs/OAuth2WebServer
首先,为用户生成一个OAUTH-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
Run Code Online (Sandbox Code Playgroud)
当用户单击链接时,他将进行身份验证。然后,通过代码,我获得了访问和刷新令牌。
我正在发送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
Run Code Online (Sandbox Code Playgroud)
我发送的cURL选项如下:
CURLOPT_HTTPHEADER = array('Content-Type: application/x-www-form-urlencoded')
当然,发布数据是使用http_build_query构建的,因此我可以使用该内容类型标头。
然后,使用该网址获取用户的所有个人资料
https://www.googleapis.com/analytics/v3/management/accounts/~all/webproperties/~all/profiles
这有效,我列出了所有配置文件。然后,用户选择一个配置文件,然后我的图书馆为该用户获取当前数据(浏览量,访问量等)
我现在遇到的问题是,当我想每天使用cron刷新数据时,我收到了错误消息:
'error' => 'invalid_grant',
'error_description' => 'Bad Request'
Run Code Online (Sandbox Code Playgroud)
但是我不知道为什么?
我在数据库中保存了配置文件的访问令牌和刷新令牌。然后,在我提出访问数据请求之前重新访问数据时,我检查令牌是否有效。但是,即使失败了。
我在这里做这个要求
它告诉我,访问令牌无效(这很神秘,因为我刚刚进行了身份验证,并且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')
Run Code Online (Sandbox Code Playgroud)
然后,发布请求,并使用http_build_query构建参数
响应看起来像这样
string(67) "{ "error": "invalid_grant", "error_description": "Bad Request" } "
Run Code Online (Sandbox Code Playgroud)
但是我不知道为什么。我使用的是5分钟前获得的访问令牌和刷新令牌,以及那些用于第一个请求的令牌。为什么使用相同的令牌5分钟后不能正常工作?为什么我什至不能刷新令牌?
无效的授予通常有两个可能的原因。
您应该只存储刷新令牌。一个小时后,访问令牌将过期。尽管这是Google 3腿式Oauth2流的不同调用方式,但仍可沿用。
我无法从您的代码中找出任何东西,这看起来有些混乱。但是我看不到真正看起来不对的地方,这就是为什么我猜测这可能是前两个问题之一。
我知道这个问题已经过时了,但是我遇到了这个问题,因为/代码有时有斜杠 ( ),并且在从重定向 url 中提取时没有正确解码它。
所以令牌就像4/BGrvsJeuc5BoRRN ...在我的服务器上一样4%2FBGrvsJeuc5BoRRN ...。
发布这个以防其他人会像我一样愚蠢。