有別於其他的API,使用google的API時,需要使用Google Client Library,除了使用composer載入以外,也可以透過此連結直接下載,要記得選擇與當前 PHP 框架對應的檔案才能正常使用,本篇文章會說明如何使用Google Client Library,包含前置設定,引用功能到實際使用google drive的API上傳檔案。
前置作業
1.首先到google專案頁面建立一個專案,建立完成後點選左側的API和服務
2.左側跳轉到憑證頁面,建立OAuth用戶端ID
3.應用程式類型選取網頁應用程式,授權的JavaScript 來源以及授權的重新導向 URI,分別對應送出OAuth以及接受OAuth結果的網址,這個網址是可以使用localhost的
4.點選左側選單程式庫,並搜尋要啟用的API點選啟用
5.點選剛剛申請好的OAuth 用戶端ID,點選用戶端密鑰旁的下載,會得到一個json檔
6.至此設定就完成了,接下來是程式面的開發,我們需要建立一個送出請求的 php 頁面
- 建立一個google client物件
→$client = new Google\Client(); - 將上一步的json檔案載入
→$client ->setAuthConfig(“json檔的相對或絕對路徑”); - 加入這次要使用的API範圍,這個步驟要跟上面的第4步開啟API相呼應,只設定這邊還是會無法使用該API
→$client ->addScope(Google_Service_Drive::DRIVE_FILE); - 加入這兩個設定,讓之後其可以自動刷新憑證,不加的話每隔一段時間就得重複開啟OAuth頁面做授權
→$client->setAccessType(‘offline’);
→$client->setApprovalPrompt(‘force’); - 設定用戶給予權限後要重導向回我們系統的處理頁面
→$redirect_uri =”處理頁面url”;
→$client ->setRedirectUri($redirect_uri); - 取得要給客戶同意授權的頁面url,並用js或其他方式將用戶導向到這個頁面
→$auth_url = $client ->createAuthUrl();
→echo(“<script>location.href = ‘”.$auth_url.”‘</script>”);
7.接下來要建立授權接收端的頁面
- 經過實測後證實用同一個$client物件做授權行不通,所以得另外宣告一次
→$client = new Google\Client(); - 加上client端的設定
→$client ->setAuthConfig(“json檔的相對或絕對路徑”); - 範圍跟重導向的設定也要加上
- 用得到的code獲得token,並設定給client物件,這個token最好另外存放,資料庫或實體檔案皆可,用來權限過期刷新
→$token = $client -> fetchAccessTokenWithAuthCode($_GET[‘code’]);
→$client -> setAccessToken($token); - 使用前確保物件沒過期
→if(!$client->isAccessTokenExpired()) - 如果過期的刷新方式
→$client = new Google\Client();
→$client ->setAuthConfig(“json檔的相對或絕對路徑”);
→$client->setAccessToken(“前一次認證儲存的token”);
→$refresh_token = $client->getRefreshToken();
→$token = $client->fetchAccessTokenWithRefreshToken($refresh_token); - 若確認沒過期即可使用我們授權範圍的API物件
→$service = new Google_Service_Drive($client); - 上傳檔案到指定的資料夾範例
→$file = new Google_Service_Drive_DriveFile();
→$file->setName(‘test.jpg’); // 這裡你可以設定你想要的文件名稱
→$file->setParents(array(‘google資料夾的ID’));
→資料夾的ID=點進資料夾的網址,最後面的那串18~tP
→$result = $service->files->create($file, array(
'data' => file_get_contents("要上傳的檔案路徑"),
'mimeType' => mime_content_type("要上傳的檔案路徑"),
'uploadType' => 'multipart'
));
→ $file_id = $result->id;
$permission = new Google_Service_Drive_Permission(array(
'type' => 'anyone',
'role' => 'reader',
));
$service->permissions->create($file_id, $permission);
結論
在現代的網頁開發中,Google提供的API無疑是不可或缺的工具。雖然Google將API相關的套件模組化,極大地簡化了實際使用時所需的開發時間,但這也使得開發前的準備和設定變得更加複雜。Google的OAuth認證作為使用所有API模組的前置作業,稍有不慎的設定錯誤就可能導致認證失效,進而中斷自動化程式的運行。為了幫助開發者更好地應對這些挑戰,撰寫此篇文章記錄了使用 PHP 與Google Client Library的步驟。本文將詳細介紹從開發環境的設置、Google API的啟用、OAuth 2.0認證的配置到實際範例程式碼的編寫,讓讀者能夠全方位掌握整個流程。這篇文章的目的不僅僅是提供一個指南,更是為了建立一個開發過程中的參考,讓未來在使用Google API進行開發時,能夠更加順利和高效。希望此文能為大家帶來幫助,讓相關開發工作變得更順利。