<? //管理ドメイン $consumer_key = "mydomain.mygbiz.com"; //ドメイン管理画面(https://www.google.com/a/管理ドメイン)の //セキュリティ > 詳細設定 > OAuthドメインキーを管理する > OAuthコンシューマシークレット //(※「このコンシューマキーを有効にする」と「すべてのAPIへのアクセスを許可する」をチェック) $consumer_secret = "AbCdEfGhIjKlMnOpQrStUvWx"; //管理者ID $requestor_id = "admin@$consumer_key"; //上管理者IDのAPIコンソール(https://code.google.com/apis/console)の //API Access > API key //(※ Services > Admin SDK の Status を ON に設定) $api_key = "AbCdEfGhIjKlMnOpQrStUvWxYzAbCdEfGhIjKlM"; //ユーザ管理用URL $users = "https://www.googleapis.com/admin/directory/v1/users"; //接続先 //直接接続する場合 $host = "ssl://www.googleapis.com"; $port = 443; //プロキシ経由の場合 //$host = "proxy.mydomain.com"; //$port = 8080; //OAuthパラメタ $oauth = array(); $oauth["oauth_consumer_key"]=$consumer_key; $oauth["oauth_nonce"]=uniqid(); $oauth["oauth_timestamp"]=time(); $oauth["oauth_signature_method"]="HMAC-SHA1"; $oauth["oauth_version"]="1"; //クエリパラメタ $query = array(); $query["xoauth_requestor_id"]=$requestor_id; $query["key"]=$api_key; //引数の確認 function usage() { die($GLOBALS["argv"][0]." -m <get|list|insert|update|delete> (-u <userid> -n <fullname> -p <password>)\n"); } $opt = getopt("m:u:n:p:"); switch (strtolower($opt["m"]{0})) { case "l"://一覧 $method = "GET"; $url = $users; $content = ""; $query["customer"]="my_customer"; break; case "g"://確認 if (!$opt["u"]) usage(); $method = "GET"; $url = "$users/{$opt["u"]}@$consumer_key"; $content = ""; break; case "i"://登録 if (!$opt["u"] || !$opt["n"] || !$opt["p"]) usage(); $method = "POST"; $url = $users; $a = array(); list($f,$g) = preg_split("/(\\s| )+/",$opt["n"],2); $a["name"] = array("familyName"=>$f,"givenName"=>($g ? $g : $f)); $a["password"] = $opt["p"]; $a["primaryEmail"] = "{$opt["u"]}@$consumer_key"; $content = json_encode($a); break; case "u"://変更 if (!$opt["u"] || (!$opt["n"] && !$opt["p"])) usage(); $method = "PUT"; $url = "$users/{$opt["u"]}@$consumer_key"; $a = array(); if ($opt["n"]) { list($f,$g) = preg_split("/(\\s| )+/",$opt["n"],2); $a["name"] = array("familyName"=>$f,"givenName"=>($g ? $g : $f)); } if ($opt["p"]) { $a["password"] = $opt["p"]; } $content = json_encode($a); break; case "d"://削除 if (!$opt["u"]) usage(); $method = "DELETE"; $url = "$users/{$opt["u"]}@$consumer_key"; $content = ""; break; default: usage(); break; } //署名用パラメタ(OAuth+クエリ)作成 $a = array(); $b = $oauth + $query; ksort($b); foreach ($b as $k=>$v) { $a[] = $k."=".urlencode($v); } $param = join("&",$a); //OAuth用署名作成 $data = $method."&".urlencode($url)."&".urlencode($param); $key = $consumer_secret."&"; $signature = base64_encode(hash_hmac("sha1",$data,$key,true)); $oauth["oauth_signature"]=$signature; //クエリパラメタ作成 $a = array(); foreach ($query as $k=>$v) { $a[] = $k."=".urlencode($v); } $param = join("&",$a); //要求データ $request = "$method $url?$param HTTP/1.1\r\n"; //OAuthパラメタ作成 $a = array(); foreach ($oauth as $k=>$v) { $a[] = $k."=\"".urlencode($v)."\""; } $param = join(", ",$a); $request .= "Authorization: OAuth $param\r\n"; //レスポンス遅延対策 $request .= "Connection: Close\r\n"; //ポストデータ(JSON) if ($content) { $request .= "Content-Type: application/json; charset=utf-8\r\n"; $request .= "Content-Length: ".strlen($content)."\r\n\r\n"; $request .= $content; } $request .= "\r\n"; //要求送信と返答出力 $fp = fsockopen($host,$port,$errno,$errstr,3); if (!$fp) { die("$errstr ($errno)"); } fwrite($fp,$request); while (!feof($fp)) { echo fgets($fp); } fclose($fp);
2013年10月21日月曜日
Google Admin SDK Directory API (2LO) の PHPサンプル
新しい API でユーザを管理するための PHP サンプル
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿