소셜 네이버/카카오 로그인 연동 중에 오류가 뜨네요ㅜㅜ.

소셜 네이버/카카오 로그인 연동 중에 오류가 뜨네요ㅜㅜ.

QA

소셜 네이버/카카오 로그인 연동 중에 오류가 뜨네요ㅜㅜ.

본문

1bf1b58a4fd5ccd82919107d0b2bfb43_1441870025_3172.png

 


15 curl_setopt( $ch, CURLOPT_URL, "https://kauth.kakao.com/oauth/token");
16 curl_setopt( $ch, CURLOPT_POST, true);
17 curl_setopt( $ch, CURLOPT_HTTPHEADER, 0);
18 curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);
19 curl_setopt( $ch, CURLOPT_POSTFIELDS, "grant_type=authorization_code&client_id={$apiKey}&redirect_uri=http://{$_SERVER[SERVER_NAME]}/sns_plugin/kakao_oauth&code={$_Code}");
20 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

 

코드와 오류 내역입니다... 정말 해답을 못찾겠어서 이렇게 올리네요.

 

php.ini 설정에서 extension=php_curl.dll 주석제거는 물론 해놓은 상태입니다.

 

무엇이 문제인지를 정확히 모르겠습니다 ㅜㅜㅜㅜㅜ 

 


 

이 질문에 댓글 쓰기 :

답변 2

토큰을 받는단계라면 헤더가 필요없구요
유저정보를 받는단계라면

헤더는 0일수 없으며 배열화된 값이어야 합니다
카카오톡의 경우는 헤더에
Authorization: 인증타입 토큰값 으로 전달하셔야 합니다
이는 카카오톡 개발관련 문서에서 보다 자세히 알수 있으며
보통 인증타입은 Bearer 이며 그뒤에 토큰값을 같이 보내면 됩니다

배열 코드는
$data=array();
$data["Authorization"]="Bearer ".$token;
으로 만들수 있으며 질문내용의 헤더부분에

array("Authorization: ".$data["Authorization"]));
이런식으로 하시거나

$data["Authorization"]="Authorization: Bearer ".$token;
으로 하시고 헤더부분에 그냥 $data 만 넣어주셔도 됩니다.

$ch = curl_init();

curl_setopt( $ch, CURLOPT_URL, "https://nid.naver.com/oauth2.0/token");
curl_setopt( $ch, CURLOPT_POST, true);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt( $ch, CURLOPT_POSTFIELDS, "grant_type=authorization_code&client_id={$config[naver_client_id]}&client_secret={$config[naver_secret_key]}&code={$_GET['code']}");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

$result = curl_exec($ch);
curl_close($ch);
$R_value = json_decode($result);


토큰을 받는 부분이여서, 말씀대로 CURLOPT_HTTPHEADER,0 부분을 삭제처리 하였습니다.

"토큰 오류입니다" 라는 오류를 계속 뿜네요...

도움 부탁드리겠습니다 ㅜㅜ..

===========아래 소스코드 첨부합니다==============================

if($_SESSION[state]==$_GET[state]){

$ch = curl_init();

curl_setopt( $ch, CURLOPT_URL, "https://nid.naver.com/oauth2.0/token");
curl_setopt( $ch, CURLOPT_POST, true);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt( $ch, CURLOPT_POSTFIELDS, "grant_type=authorization_code&client_id={$config[naver_client_id]}&client_secret={$config[naver_secret_key]}&code={$_GET['code']}");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

$result = curl_exec($ch);
curl_close($ch);
$R_value = json_decode($result);

$access_token = $R_value->{'access_token'};///access token
$expires_in =$R_value->{'expires_in'};//////토근 만료시간

if(!empty($access_token) && $expires_in>0 && !empty($expires_in)){

$headers=array("Authorization:Bearer $access_token","Content-Type:application/x-www-form-urlencoded;charset=utf-8");

$url="https://apis.naver.com/nidlogin/nid/getUserProfile.xml";

$ch = curl_init();

curl_setopt( $ch, CURLOPT_URL, $url);
curl_setopt( $ch, CURLOPT_HTTPHEADER,$headers);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

$result = curl_exec($ch);
curl_close($ch);

$xml = simplexml_load_string($result, 'SimpleXMLElement', LIBXML_NOCDATA);

foreach ($xml->result as $value){
$result_code=$value->resultcode;
}
if($result_code=="00"){////00이면 성공
foreach ($xml->response as $value){
$email =  $value->email;
$name= $value->name;
$mid= trim($value->id);

}
//회원아이디 세션 생성
$member = get_member($mid);

if(empty($member[mb_id])){/////카카오톡 에 받은 고유키값을 비교 없으면 회원으로 등록시킨다.
$sql="insert into g5_member (mb_id,mb_password,mb_nick,mb_name,mb_email,mb_level,mb_datetime,mb_open_date)values('$mid',password('$mid'),'$name','$name','$email','{$config['cf_register_level']}','".G5_TIME_YMDHIS."','".G5_TIME_YMD."')";
mysql_query($sql);
}
set_session('ss_mb_id', $mid);
set_session('ss_mb_key', md5($member['mb_datetime'] . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']));

echo"<script>opener.location.href='/';window.close();</script>";

}else{
echo"<script>alert('파싱 오류 입니다.');window.close();</script>";
}

}else{

echo"<script>alert('토큰 오류 입니다.');window.close();</script>";
}
}else{///인증실패

echo"<script>alert('인증 오류 입니다.');window.close();</script>";
}
?>

네이버는 POST 방식보단 GET 방식으로 URL에 붙여서 보내시거나
POST 방식을 이용하시려면
postfields 부분에 배열로 보내세요
배열방법은 위에 설명드린바와 같습니다.
또한 curl opt중 post 는 1이어야 합니다
답변을 작성하시기 전에 로그인 해주세요.
전체 13
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT