Dropbox不再提供檢索新的長期訪問令牌的選項。相反,它發(fā)放短期訪問令牌和可選的刷新令牌,而不是長期訪問令牌。
應(yīng)用程序仍然可以通過請求“離線”訪問來獲得長期訪問權(quán)限,此時應(yīng)用程序會收到一個“刷新令牌”,可以根據(jù)需要檢索新的短期訪問令牌,而無需進一步手動用戶干預(yù)。您可以在OAuth指南和授權(quán)文檔中找到更多信息。
無法完全自動化檢索訪問令牌和可選刷新令牌的過程。這需要用戶手動進行至少一次。如果您的應(yīng)用程序需要在不需要用戶重復(fù)手動重新授權(quán)的情況下保持長期訪問權(quán)限,則應(yīng)該請求“離線”訪問,以獲得刷新令牌。刷新令牌不會過期,可以存儲并重復(fù)使用,以在需要時獲取新的短期訪問令牌,而無需用戶手動重新授權(quán)應(yīng)用程序。
我找到了解決方案
步驟1:首次通過授權(quán)/登錄URL登錄,完成身份驗證后,您將獲得訪問令牌和刷新令牌,將刷新令牌保存在數(shù)據(jù)庫或環(huán)境文件中。它的壽命很長。 (https://github.com/kunalvarma05/dropbox-php-sdk/wiki/Authentication-and-Authorization)
步驟2:使用刷新令牌,使用以下代碼生成新的訪問令牌
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; }
調(diào)用此函數(shù)以獲取新的訪問令牌