OAuth 2.0 인증 기반의 API를 사용하는 방법에 대해 설명합니다. PHP에서도 OAuth 2.0를 위한 라이브러리가 있지만 여기서는 CURL 라이브러리를 사용하여 인증하는 방법을 설명하겠습니다.
우선 인증키 신청합니다. 그러면 Key/Secret을 얻을 수 있습니다.
진행순서
1. URL 및 Oauth 정보 설정 2. Request Token 요청 3. Access Token으로 교환 요청 4. Access Token을 싣고 API 호출하면, 보호된 자원으로 접근
인증키 관리 및 통계에서 Key/Secret, CallBack경로 정보를 확인 후 api.config.php를 작성합니다. 전체 코드는 아래와 같습니다.
api.config.php
<?php // Request Token 요청 주소 $request_token_url = 'https://api.ecplaza.net/oauth/requestToken'; // Access Token URL $access_token_url = 'https://api.ecplaza.net/oauth/accessToken'; $oauth_key = '[발급받 apikey의 Key를 넣으세요]'; $oauth_secret = '[발급받 apikey의 Secret을 넣으세요.]'; $callback_url = '[발급받은 apikey의 CallBack경로를 넣으세요.]'; // API prefix (보호된 자원이 있는 URL의 prefix) $api_url = 'https://api.ecplaza.net/apis/1/'; ?>
index.php
<?php require_once('api.config.php'); session_start(); // Access Token 정보가 존재하지 않거나 Access Token 정보가 만료되었다면 OAuth 인증 절차 시작 if( ! isset($_SESSION['access_token_info']) || $_SESSION['access_token_info']['expires'] < time()) { try { $parm = array(); $parm['client_id'] = $oauth_key; $parm['client_secret'] = $oauth_secret; $parm['redirect_uri'] = $callback_url; $parm['response_type'] = 'code'; // 고정 값 (상수) $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $request_token_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Request Token 요청에서 정상적으로 처리되면 인증키 신청 시 지정한 Callback 경로로 // Redirect되어 Access Token으로 교환 요청을 합니다. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); $res = curl_exec($ch); // 결과 값은 JSON 형식입니다. curl_close($ch); $token_info = json_decode($res, TRUE); if(isset($token_info['error'])) { // Access Token을 얻지 못하고 에러가 발생했을 경우 에러 출력 echo $token_info['error'] . ' => ' . $token_info['error_description']; exit; } else { // 얻어온 Access Token을 session에 저장 $_SESSION['access_token_info'] = $token_info; } } catch(Exception $e) { print_r($e); exit; } } $parm = array(); $parm['client_id'] = $oauth_key; $parm['client_secret'] = $oauth_secret; $parm['redirect_uri'] = $callback_url; $parm['access_token'] = $_SESSION['access_token_info']['access_token']; $parm['q'] = '[검색 옵션을 넣으세요]'; // 검색옵션은 각 API정보를 참고하세요. $url = $api_url . '/offer'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $parm); $search_res = curl_exec($ch); // 결과 값은 JSON 형식입니다. curl_close($ch); $result = json_decode($search_res, TRUE); if(isset($result['error'])) { // echo $result['error'] . ' => ' . $result['error_message']; } else { if($result['total_count'] > 0) { foreach ($result['data'] as $info) { foreach ($info as $k => $v) { echo $k . ' = ' . $v . '<br/>'; } } } } ?>
Request Token 요청 주소에서 인증키 신청에서 지정했던 Callback 경로로 넘어 갑니다.
api_callback.php
<?php require_once('api.config.php'); $parm = array(); $parm['client_id'] = $oauth_key; $parm['client_secret'] = $oauth_secret; $parm['redirect_uri'] = $callback_url; $parm['code'] = $_GET['code']; // Request Token 요청 주소에서 얻어온 Request Token입니다. $parm['api_type'] = 'web'; // 고정 값 (상수) $parm['grant_type'] = 'authorization_code'; // 고정 값 (상수) $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $access_token_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_POST, TRUE); // Access Token으로 교환 요청은 POST방식만 지원이 됩니다. curl_setopt($ch, CURLOPT_POSTFIELDS, $parm); $res = curl_exec($ch); // 결과 값은 JSON 형식입니다. // 결과를 출력합니다. if($res == FALSE) echo json_encode(array('error' => 'curl_failed', 'error_message' => curl_error($ch))); else echo $res; curl_close($ch); ?>
소스코드 형식 | 다운로드 링크 |
---|---|
PHP (WEB용) | 다운로드 |