CI 묻고 답하기

제목 oauth 구현관련 질문입니다.
글쓴이 예나아범 작성시각 2014/10/17 19:09:37
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 21532   RSS
중국 SNS와 로그인연동을 위해 oauth 구현하고 있습니다.

일단 사용자가 동의하면 나오는 키는 받았는데 이걸 토스해서 access token을 받는데서 계속 에러가 나네요.
웅파님이 올려주신 네이버 로그인 참조해서 만들어 보기는 했는데....

제 호스팅에서는 file_get_contents 함수를 쓰면 에러가 발생해서 curl로 구현을 해봤습니다.
일단 값이 넘어가니까 뭔가 에러값이 돌아오는거 같은데 도저히 어디가 잘못된건지 모르겠네요. ㅠㅠ
소스 보시고 답변부탁드립니다.
 
public function weibo()
 {
  $this->config->load('oauth');
  $key = $this->config->item('weibo');
  $key['response_type'] = 'code';
  $key['redirect_url'] = site_url('oauth/weibo');

  $url = 'https://api.weibo.com/oauth2/authorize?client_id='.urlencode($key['client_id']).'&response_type=code&redirect_uri='.urlencode($key['redirect_url']);

  if(!$_GET['code']) {
   header('Location: '.$url);
  }

  if($_GET['code'])
  {
   $key['code'] = $_GET['code'];
  }

  $url2 = 'https://api.weibo.com/oauth2/access_token';
  $access_token_parameters = array (
   'client_id'     => $key['client_id'],
   'client_secret' => $key['client_secret'],
   'grant_type'    => 'authorization_code',
   'redirect_uri'  => $key['redirect_url'],
   'code'          => $key['code']
  );

  $ch = curl_init($url2);
        curl_setopt ($ch, CURLOPT_POST, true);
        curl_setopt ($ch, CURLOPT_POSTFIELDS, $access_token_parameters);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
        $json = curl_exec($ch);
        curl_close($ch);

  $data = json_encode($json, true);

  echo $data;
 }

아래는 해당 개발 문서 내용입니다.
1. 引导需要授权的用户到如下地址:권한을 받고자 하는 사용자에게 아래 주소를 보낸다.
https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI


2. 如果用户同意授权,页面跳转至  만약 사용자가 동의를 하게 되면 화면이 아래주소로 이동한다.
YOUR_REGISTERED_REDIRECT_URI/?code=CODE


3. 换取Access Token        Access Token과 교환

https://api.weibo.com/oauth2/access_token?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=authorization_code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&code=CODE

(其中client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET可以使用basic方式加入header中)
   그중 client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET는 header에 삽입하여 basic방식으로 사용해도 된다.)


返回值  회신값

{ "access_token":"SlAV32hkKG", "remind_in ":3600, "expires_in":3600 }


4. 使用获得的OAuth2.0 Access Token调用API     얻은 OAuth2.0 Access Token을 사용하여 API를 사용한다.

에러내용은
영어로는 miss client id or secre 이고, 중국어로는 잘못된 접근이라고 나오네요....

이걸 해야 이것과 연동된 다른 기능들도 구현할 수 있는데.... 아시는 분들 답변 부탁드립니다 ㅠ

 

 다음글 쇼핑몰에서 파일 업로드 할떄... (5)
 이전글 중복 로그인 이벤트 발생 시 로그인 시간 딜레이? (2)

댓글

변종원(웅파) / 2014/10/17 19:17:57 / 추천 0
소스상로 첫번째, 두번째 변수값을 선언한 곳이 없습니다.
예나아범 / 2014/10/17 19:26:46 / 추천 0
웅파님 어떤 변수값 말씀하시는지요?  $key['client_id'],$key['client_secret'] 라면 config에 파일로 $key = $this->config->item('weibo'); 이런식으로 먼저 불러왔습니다.
예나아범 / 2014/10/17 20:37:39 / 추천 0
$url2 = 'https://api.weibo.com/oauth2/access_token?client_id='.urlencode($key['client_id']).'&client_secret='.urlencode($key['client_secret']).'&grant_type=authorization_code&redirect_uri='.urlencode($key['redirect_url']).'&code='.urlencode($key['code']);

  $ch = curl_init();
  curl_setopt ($ch, CURLOPT_URL, $url2);
  curl_setopt ($ch, CURLOPT_POST, true);
  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
        $json = curl_exec($ch);
  $a = curl_error($ch);
        curl_close($ch);

  $data = json_encode($json, true);
이걸로 해결됐네요... 힘들다 ㅠㅠ