<?
//管理ドメイン
$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 件のコメント:
コメントを投稿