OAuth署名生成 PHP実装サンプル
OAuth署名生成 PHP実装サンプル
OAuth署名生成のPHPによる実装サンプルを以下に示します。
/*** OAuth HMAC-SHA1方式の署名を作成する.** @param string http_method HTTPメソッドを指定* @param array parameter クエリパラメータとOAuthパラメータをマージしたもの* @param string uri 実際にリクエストするURI(リクエストパラメータは含めない)* @param string secret 秘密鍵** @return string 作成した署名。作成失敗した場合はNULL*/function make_signature_hmac($http_method, $parameter, $uri, $secret){// http_method$http_method = strtoupper($http_method);// uri$parts = parse_url($uri);$scheme = (isset($parts['scheme'])) ? $parts['scheme'] : 'http';$port = (isset($parts['port']))? $parts['port'] : (($scheme === 'https') ? '443' : '80');$host = (isset($parts['host'])) ? strtolower($parts['host']) : '';$path = (isset($parts['path'])) ? $parts['path'] : '';if (($scheme === 'https' && $port != '443')|| ($scheme === 'http' && $port != '80')) {$host = "$host:$port";}$uri = "$scheme://$host$path";// paramsif (array_key_exists('oauth_signature', $parameter)) {unset($parameter['oauth_signature']);}if (empty($parameter)) return NULL;$keys = array_map('rawurlencode', array_keys($parameter));$values = array_map('rawurlencode', array_values($parameter));$parameter = array_combine($keys, $values);uksort($parameter, 'strcmp');$pairs = array();foreach ($parameter as $key => $value) {if (is_array($value)) {sort($value, SORT_STRING);foreach ($value as $duplicate_value) {$pairs[] = $key . '=' . $duplicate_value;}} else {$pairs[] = $key . '=' . $value;}}$params = implode('&', $pairs);// base_string$parts = array($http_method, $uri, $params);$parts = array_map('rawurlencode', $parts);$base_string = implode('&', $parts);// 2-leggedではtokenは使わないのでそのまま&を結合$key = $secret . '&';$signature = base64_encode(hash_hmac('sha1', $base_string, $key, true));return ($signature === FALSE) ? NULL : $signature;}