Google有提供很多的API方便妳去存取他們的服務,例如Google Contacts API就需要先取得權限才能使用,而在這篇文章中要教的ClientLogin是我個人覺得最簡單的一種取得權限方式,它的運作原理很簡單,就是透過http傳送帳號、密碼給Google,然後Google就會送回一串資料,其中就包含了授權碼,透過授權碼妳就可以去存取Google的各項服務(例如聯絡人、日曆、筆記本等等)

ClientLogin這種方式其實比較適合桌面程式或手機應用程式使用,因為他們不像其他認證方式一樣需要開啟一個授權頁面,所以你可以設計自己的登入介面讓使用者輸入帳號密碼,但這種方式也有一個缺點就是使用者未必會想輸入帳號密碼,因為他們會懷疑妳是釣魚網站…

ClientLogin基本知識

傳送指令格式:

GET https://www.google.com/accounts/ClientLogin?accountType=A&Email=B&Passwd=C&service=D

以上這行就是說透過http協定傳送GET的意思,請注意大小寫是有差別的

參數解釋:

  • accountType要取得權限的帳戶類型,使用HOSTED_OR_GOOGLE是最保險的方式,可以田的選項有:GOOGLE、HOSTED、HOSTED_OR_GOOGLE
  • Email:要取得權限的帳號,需包含@後面那一串資料,以我為例:linroex@gmail.com
  • Passwd:使用者的密碼
  • service:要使用該權限的服務代號,例如我要取得Google日曆的權限,則這裡就輸入cl,各項服務的代碼可以在Google Code上面找到
  • source:可填可不填,就只是讓Google可以記錄是誰在存取該項服務
範例:
https://www.google.com/accounts/ClientLogin?accountType=GOOGLE&Email=admin@gmail.com&Passwd=123456789&service=cl
傳回值解釋:

正常來講ClientLogin的傳回值應該會包含SID、LSID、Auth這三項資料,其中的Auth就是授權碼,透過Auth妳可以去存取其他的Google服務,但如果認證失敗的話就會傳回其他代碼,而這些代碼的意義我會在下面做解釋

  • BadAuthentication:帳號或密碼錯誤
  • NotVerified:此帳戶尚未驗證
  • CaptchaRequired:缺少驗證碼
  • Unknown:未知錯誤
  • AccountDeleted:該用戶被刪除
  • AccountDisabled:該用戶被禁用
  • ServiceDisabled:指定的Google服務不存在
  • ServiceUnavailable:指定的服務無法連線,稍後在試

PHP-ClientLogin範例

下載點:Box.netDropboxGoogle4Shared

程式碼:

	$connect=curl_init();		//建立curl
	$user="linroex@gmail.com";		//設定帳號
	$passwd="";		//設定密碼
	$service="cl";			//設定要認證的服務
	curl_setopt($connect,CURLOPT_URL,"https://www.google.com/accounts/ClientLogin?accountType=HOSTED_OR_GOOGLE&Email=$user&Passwd=$passwd&service=$service");
	curl_setopt($connect,CURLOPT_RETURNTRANSFER,true);			//設定以字串格式傳回資料
	curl_setopt($connect, CURLOPT_SSL_VERIFYHOST, true);		//設定使用SSL連線
	curl_setopt($connect, CURLOPT_SSL_VERIFYPEER, false);		//設定使用SSL連線
	$re=curl_exec($connect);		//進行連線並將回傳值存在$re中
	$re=explode("n",$re);		//將資料解析
	echo $re[2];		//顯示Auth
	curl_close($connect);		//關閉curl