테스트 사이트 - 개발 중인 베타 버전입니다

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

switecode 10년 전 조회 5,345

 


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개

채택된 답변
+20 포인트
슈퍼노비스
토큰을 받는단계라면 헤더가 필요없구요<br />
유저정보를 받는단계라면<br />
<br />
헤더는 0일수 없으며 배열화된 값이어야 합니다<br />
카카오톡의 경우는 헤더에<br />
Authorization: 인증타입 토큰값 으로 전달하셔야 합니다<br />
이는 카카오톡 개발관련 문서에서 보다 자세히 알수 있으며<br />
보통 인증타입은 Bearer 이며 그뒤에 토큰값을 같이 보내면 됩니다<br />
<br />
배열 코드는<br />
$data=array();<br />
$data[&quot;Authorization&quot;]=&quot;Bearer &quot;.$token;<br />
으로 만들수 있으며 질문내용의 헤더부분에<br />
<br />
array(&quot;Authorization: &quot;.$data[&quot;Authorization&quot;]));<br />
이런식으로 하시거나<br />
<br />
$data[&quot;Authorization&quot;]=&quot;Authorization: Bearer &quot;.$token;<br />
으로 하시고 헤더부분에 그냥 $data 만 넣어주셔도 됩니다.
로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

단지얍
10년 전
추가로 질문내용의 오류는 헤더부분의 인자가 배열인수가 아니라 발생된 오류입니다.
s
switecode
10년 전
$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에 붙여서 보내시거나<br />
POST 방식을 이용하시려면 <br />
postfields 부분에 배열로 보내세요<br />
배열방법은 위에 설명드린바와 같습니다.<br />
또한 curl opt중 post 는 1이어야 합니다
로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

단지얍
10년 전
배열 방법이 같은것이지 설명에 나온 내용이 같은건 아닙니다.
s
switecode
10년 전
아직 실력이 많이 부족한지라, 단지님 소셜로그인으로 다시 해보아야겠습니다..
웹의 세계는 어렵고도 또 어렵네요ㅜㅜ!!

답변해주셔서 감사합니다.
단지얍
10년 전
에구 제가 지금 폰이라 답변이 디테일하지 못해서 죄송하네요 ㅠㅠ
화이팅하세요^^

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인