/** * 商品検索をリクエストするendpointのURLを生成 * * @param array $my_params 検索APIのパラメータを指定 * @param string $secret_access_key シークレットキー * @return string 商品検索をリクエストするURL */ public function getUrl($my_params, $secret_access_key) { // リクエストを作成 $baseurl = 'http://webservices.amazon.co.jp/onca/xml'; $params = array(); $params['Service'] = 'AWSECommerceService'; $params['Version'] = '2013-08-01'; $params = array_merge($params, $my_params); // Timestamp パラメータを追加 // - 時間の表記は ISO8601 形式、タイムゾーンは UTC(GMT) $params['Timestamp'] = gmdate('Y-m-d\\TH:i:s\\Z'); // パラメータの順序を昇順に並び替え ksort($params); // canonical string を作成 $canonical_string = ''; foreach ($params as $k => $v) { $canonical_string .= '&' . urlencode_rfc3986($k) . '=' . urlencode_rfc3986($v); } $canonical_string = substr($canonical_string, 1); // 署名を作成 // - 規定の文字列フォーマットを作成 // - HMAC-SHA256 を計算 // - BASE64 エンコード $parsed_url = parse_url($baseurl); $string_to_sign = "GET\n{$parsed_url['host']}\n{$parsed_url['path']}\n{$canonical_string}"; $signature = base64_encode(hash_hmac('sha256', $string_to_sign, $secret_access_key, true)); // URL を生成 // - リクエストの末尾に署名を追加 $url = $baseurl . '?' . $canonical_string . '&Signature=' . urlencode_rfc3986($signature); return $url; }
function get_xml_url($params) { global $access_secret; $baseurl = 'http://ecs.amazonaws.jp/onca/xml'; ksort($params); $canonical_string = ''; foreach ($params as $k => $v) { $canonical_string .= '&' . urlencode_rfc3986($k) . '=' . urlencode_rfc3986($v); } $canonical_string = substr($canonical_string, 1); $parsed_url = parse_url($baseurl); $string_to_sign = "GET\n{$parsed_url['host']}\n{$parsed_url['path']}\n{$canonical_string}"; $signature = base64_encode(hash_hmac('sha256', $string_to_sign, $access_secret, true)); $url = $baseurl . '?' . $canonical_string . '&Signature=' . urlencode_rfc3986($signature); return $url; }
/** * Display a listing of the resource. * * @return Response */ public function index(Request $request) { // RFC3986 形式で URL エンコードする関数 function urlencode_rfc3986($str) { return str_replace('%7E', '~', rawurlencode($str)); } $response = NULL; if ($request['keyword']) { // ベースとなるリクエストURL $baseurl = 'https://app.rakuten.co.jp/services/api/IchibaItem/Search/20140222'; // リクエストパラメータの作成 $params = array(); $params['format'] = 'json'; //レスポンスをXML形式 $params['keyword'] = $request['keyword']; //$_REQUEST['keyword']; // 任意のキーワード。文字コードは UTF-8 // $params['genreId'] = '559887'; //$params['shopCode'] = 'rakuten24'; $params['applicationId'] = '1006734213224224132'; //アプリID/デベロッパーID //$params['affiliateId'] = '自分のアフィリエイトID入力'; //アフィリエイトID //$params['version'] = '2013-08-05'; $params['hits'] = 10; // 1~30 // パラメータを昇順に並び替え ksort($params); // canonical string を作成 $canonical_string = ''; foreach ($params as $k => $v) { $canonical_string .= '&' . urlencode_rfc3986($k) . '=' . urlencode_rfc3986($v); } // 先頭の'&'を除去 $canonical_string = substr($canonical_string, 1); // リクエストURL を作成 $url = $baseurl . '?' . $canonical_string; $contents = file_get_contents($url); $data = json_decode($contents, true); $response['keyword'] = $data; $response['word'] = $request; } return view('select/index')->with('indata', $response); // }
function get_url($param) { ksort($param); $canonical_string = ''; foreach ($param as $k => $v) { $canonical_string .= '&' . urlencode_rfc3986($k) . '=' . urlencode_rfc3986($v); } $canonical_string = substr($canonical_string, 1); $parsed_url = parse_url(URL); $string_to_sign = "GET\n{$parsed_url['host']}\n{$parsed_url['path']}\n{$canonical_string}"; $signature = base64_encode(hash_hmac('sha256', $string_to_sign, SEC, true)); // 返り値のURLにアクセスするとXMLが取得できます。 return URL . '?' . $canonical_string . '&Signature=' . urlencode_rfc3986($signature); }