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

15 curl_setopt( $ch, CURLOPT_URL, "https://kauth.kakao.com/oauth/token">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}">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개
유저정보를 받는단계라면<br />
<br />
헤더는 0일수 없으며 배열화된 값이어야 합니다<br />
카카오톡의 경우는 헤더에<br />
Authorization: 인증타입 토큰값 으로 전달하셔야 합니다<br />
이는 카카오톡 개발관련 문서에서 보다 자세히 알수 있으며<br />
보통 인증타입은 Bearer 이며 그뒤에 토큰값을 같이 보내면 됩니다<br />
<br />
배열 코드는<br />
$data=array();<br />
$data["Authorization"]="Bearer ".$token;<br />
으로 만들수 있으며 질문내용의 헤더부분에<br />
<br />
array("Authorization: ".$data["Authorization"]));<br />
이런식으로 하시거나<br />
<br />
$data["Authorization"]="Authorization: Bearer ".$token;<br />
으로 하시고 헤더부분에 그냥 $data 만 넣어주셔도 됩니다.
답변에 대한 댓글 2개
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 방식을 이용하시려면 <br />
postfields 부분에 배열로 보내세요<br />
배열방법은 위에 설명드린바와 같습니다.<br />
또한 curl opt중 post 는 1이어야 합니다
답변에 대한 댓글 3개
웹의 세계는 어렵고도 또 어렵네요ㅜㅜ!!
답변해주셔서 감사합니다.
화이팅하세요^^
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인