P粉0662240862023-08-27 00:33:27
Dropbox不再提供檢索新的長期存取權杖的選項。相反,它發放短期訪問令牌和可選的刷新令牌,而不是長期訪問令牌。
應用程式仍然可以透過要求“離線”存取來獲得長期存取權限,此時應用程式會收到一個“刷新令牌”,可以根據需要檢索新的短期存取令牌,而無需進一步手動使用者乾預。您可以在OAuth指南和授權文件中找到更多資訊。
無法完全自動化檢索存取令牌和可選刷新令牌的過程。這需要用戶手動進行至少一次。如果您的應用程式需要在不需要使用者重複手動重新授權的情況下保持長期訪問權限,則應該請求「離線」訪問,以獲得刷新令牌。刷新令牌不會過期,可以儲存並重複使用,以在需要時取得新的短期存取令牌,而無需使用者手動重新授權應用程式。
P粉3646420192023-08-27 00:13:53
我找到了解決方案
步驟1:首次透過授權/登入URL登錄,完成身份驗證後,您將獲得存取權杖和刷新令牌,將刷新令牌保存在資料庫或環境文件中。它的壽命很長。 (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; }
呼叫此函數以取得新的存取令牌