Dropbox不再提供檢索新的長期存取權(quán)杖的選項。相反,它發(fā)放短期訪問令牌和可選的刷新令牌,而不是長期訪問令牌。
應(yīng)用程式仍然可以透過要求“離線”存取來獲得長期存取權(quán)限,此時應(yīng)用程式會收到一個“刷新令牌”,可以根據(jù)需要檢索新的短期存取令牌,而無需進一步手動使用者乾預(yù)。您可以在OAuth指南和授權(quán)文件中找到更多資訊。
無法完全自動化檢索存取令牌和可選刷新令牌的過程。這需要用戶手動進行至少一次。如果您的應(yīng)用程式需要在不需要使用者重複手動重新授權(quán)的情況下保持長期訪問權(quán)限,則應(yīng)該請求「離線」訪問,以獲得刷新令牌。刷新令牌不會過期,可以儲存並重複使用,以在需要時取得新的短期存取令牌,而無需使用者手動重新授權(quán)應(yīng)用程式。
我找到了解決方案
步驟1:首次透過授權(quán)/登入URL登錄,完成身份驗證後,您將獲得存取權(quán)杖和刷新令牌,將刷新令牌保存在資料庫或環(huán)境文件中。它的壽命很長。 (https://github.com/kunalvarma05/dropbox-php-sdk/wiki/Authentication-and-Authorization)
步驟2:使用刷新令牌,使用下列程式碼產(chǎn)生新的存取令牌
public function refreshToken() { $arr = []; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://api.dropbox.com/oauth2/token'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=refresh_token&refresh_token=<refresh_token_here>"); curl_setopt($ch, CURLOPT_USERPWD, '<APP_KEY>'. ':' . '<APP_SECRET>'); $headers = array(); $headers[] = 'Content-Type: application/x-www-form-urlencoded'; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $result = curl_exec($ch); $result_arr = json_decode($result,true); if (curl_errno($ch)) { $arr = ['status'=>'error','token'=>null]; }elseif(isset($result_arr['access_token'])){ $arr = ['status'=>'okay','token'=>$result_arr['access_token']]; } curl_close($ch); return $arr; }
呼叫此函數(shù)以取得新的存取令牌