如何使用GoogleAPI客戶端刷新令牌?我一直在玩GoogleAnalyticsAPI(V3),并且遇到了一些錯誤。首先,所有的設置都是正確的,并與我的測試帳戶一起工作。但是當我想從另一個配置文件ID(相同的Googleaccont/GA帳戶)獲取數據時,我會得到一個403錯誤。奇怪的是,來自某些GA帳戶的數據將返回數據,而其他帳戶將生成此錯誤。我已經撤銷了令牌并再次進行了身份驗證,現在我似乎可以從我的所有帳戶中獲取數據。問題解決了?不。由于訪問密鑰將過期,我將再次遇到相同的問題。如果我對事情的理解是正確的,人們可以使用新的Token獲得一個新的身份驗證Tooken。問題是,當我跑:$client->refreshToken(refresh_token_key) 返回以下錯誤:Error refreshing the OAuth2 token, message: '{ "error" : "invalid_grant" }'我檢查了刷新方法背后的代碼,并將請求跟蹤到“apoAuth2.php”文件中。所有參數都正確發送。Grant_type在方法中被硬編碼為“REFRESH_TOKEN”,所以我很難理解出了什么問題。參數數組如下所示:Array ( [client_id] => *******-uqgau8uo1l96bd09eurdub26c9ftr2io.apps.googleusercontent.com [client_secret] => ******** [refresh_token] => 1\/lov250YQTMCC9LRQbE6yMv-FiX_Offo79UXimV8kvwY [grant_type] => refresh_token )程序如下。$client = new apiClient();$client->setClientId($config['oauth2_client_id']);$client->setClientSecret($config['oauth2_client_secret']);$client->setRedirectUri($config['oauth2_redirect_uri']);$client->setScopes('https://www.googleapis.com/auth/analytics.readonly');$client->setState('offline');$client->setAccessToken($config['token']); // The access JSON object.$client->refreshToken($config['refreshToken']); // Will return error here這是一個錯誤,還是我完全誤解了什么?
3 回答

九州編程
TA貢獻1785條經驗 獲得超4個贊
$client->refreshToken($refreshToken)
//pull token from database$tokenquery="SELECT * FROM token WHERE type='original'";$tokenresult = mysqli_query($cxn,$tokenquery);if($tokenresult!=0){ $tokenrow=mysqli_fetch_array($tokenresult); extract($tokenrow);}$time_created = json_decode($token)->created;$t=time();$timediff=$t-$time_created;echo $timediff."<br>";$refreshToken= json_decode($token)->refresh_token;//start google client note:$client = new Google_Client();$client->setApplicationName('');$client->setScopes(array());$client->setClientId('');$client->setClientSecret('');$client->setRedirectUri('');$client->setAccessType('offline');$client->setDeveloperKey('');//resets token if expiredif(($timediff>3600)&&($token!='')){ echo $refreshToken."</br>"; $refreshquery="SELECT * FROM token WHERE type='refresh'"; $refreshresult = mysqli_query($cxn,$refreshquery); //if a refresh token is in there... if($refreshresult!=0) { $refreshrow=mysqli_fetch_array($refreshresult); extract($refreshrow); $refresh_created = json_decode($token)->created; $refreshtimediff=$t-$refresh_created; echo "Refresh Time Diff: ".$refreshtimediff."</br>"; //if refresh token is expired if($refreshtimediff>3600) { $client->refreshToken($refreshToken); $newtoken=$client->getAccessToken(); echo $newtoken."</br>"; $tokenupdate="UPDATE token SET token='$newtoken' WHERE type='refresh'"; mysqli_query($cxn,$tokenupdate); $token=$newtoken; echo "refreshed again"; } //if the refresh token hasn't expired, set token as the refresh token else { $client->setAccessToken($token); echo "use refreshed token but not time yet"; } } //if a refresh token isn't in there... else { $client->refreshToken($refreshToken); $newtoken=$client->getAccessToken(); echo $newtoken."</br>"; $tokenupdate="INSERT INTO token (type,token) VALUES ('refresh','$newtoken')"; mysqli_query($cxn,$tokenupdate); $token=$newtoken; echo "refreshed for first time"; } }//if token is still good.if(($timediff<3600)&&($token!='')){ $client->setAccessToken($token);}$service = new Google_DfareportingService($client);

縹緲止盈
TA貢獻2041條經驗 獲得超4個贊
if (isset($_GET['code'])) { $client->authenticate(); $_SESSION['access_token'] = $client->getAccessToken();}
$google_token= json_decode($_SESSION['access_token']);$client->refreshToken($google_token->refresh_token);
$_SESSION['access_token']= $client->getAccessToken()
- 3 回答
- 0 關注
- 1110 瀏覽
添加回答
舉報
0/150
提交
取消