카카오 로그인 에러 unsupported_grant_type

앱 아이디: 1036609
개발환경: PHP, Apache, Mysql

서버나 스크립트 변경이 없는데 오늘 갑자기 “인증토큰 요청 실패” 에러가 발생합니다.

Array
(
    [error] => unsupported_grant_type
    [error_description] => Unsupported grant type: authorization_code,authorization_code
    [error_code] => KOE310
)

에러 발생 코드: 다음 코드의 가장 아랫줄에서 에러가 발생합니다.
<?php 
	include_once dirname(__FILE__)."/kakao_lib.php";

	$kakaologin = new kakaoRestAPI();
	if( $kakaologin->auth_apply !== true){ die("카카오로그인을 사용할 수 없습니다."); }

	// 로그아웃일경우
	if( !empty($_GET['logout'])){
		// 사용자 정보 호출 
		$userLogout =  @json_decode($kakaologin->getLogout($_SESSION['kakao_token_info']['access_token']),true);
		// 에러
		if( !empty($userLogout['msg']) ){
			echo '사용자 로그아웃 요청실패'; print_r($userLogout); echo '</pre>';
			exit;
		}	
		die(header("Location:".$kakaologin->result_uri));
	}

	// 받은 코드로 처리
	$code = empty($_GET['code']) ? '': $_GET['code'];
	$token = @json_decode($kakaologin->getToken($code),true);

	// 에러
	if( !empty($token['error']) ){
		echo '인증토큰 요청 실패'; print_r($token); echo '</pre>';
		exit;
	} 


kakao_lib.phip : 라이브러리 파일 중 상단입니다. 


<?php 
/*
	@ 카카오 로그인 REST API 샘플
	© 2022 REDINFO <webmaster@redinfo.co.kr>
*/
@session_save_path("../data/session");
@session_start();
//session_start();
class kakaoRestAPI{


	// <수정필요> REST API 키값 : kakao developers > 내 애플리케이션 > 요약정보 > 앱 키 > REST API 키\
	var $restapi_key = 'a27638d1470b2d64daace4c015aaf061'; 

	// <수정필요> 리다렉트 URL : kakao developers > 내 애플리케이션 > 제품설정 > 카카오 로그인 > Redirect URI 
	var $redirect_uri = 'https://koreanastrology.org/gnuboard5/bbs/kakao_login.php';

	// <수정필요> 카카오 로그인 인증 후 이동할 페이지
	var $result_uri = 'https://koreanastrology.org/pro/';

	// api 사용가능 여부
	var $auth_apply = false;

	// 디버깅시 결과 볼지 여부 (true or false)
	var $debug_view = true;

	// 디버깅시 결과 테스트 (true or false)
	var $debug_txt = '';

	// 요청 URL 정의
	var $request_url = array(
		'code'=>'https://kauth.kakao.com/oauth/authorize?response_type=code&client_id={REST_API_KEY}&redirect_uri={REDIRECT_URI}', // get
		'token'=>'https://kauth.kakao.com/oauth/token', // 토큰 받기 // (only post)
		'userInfo'=>'https://kapi.kakao.com/v2/user/me', // 사용자 정보 가져오기(get or post)
		'logout'=>'https://kapi.kakao.com/v1/user/logout', // 사용자 로그아웃 가져오기(only post)
	);

grant_type
authorization_code,authorization_code

grant_type에 값을 두개 전달하고 계신데요. 확인 부탁드려요.

감사합니다. 해결됐습니다. 참고로 제가 어디선가 받아서 사용하는 코드는 다음과 같은데,
$url = $this->request_url[‘token’].“?”.http_build_query($postfields);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER[‘HTTP_USER_AGENT’]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);

여기서 $url = $this->request_url[‘token’].“?”.http_build_query($postfields); 부분이 문제였습니다.
이것을 $url = $this->request_url[‘token’]; 로 수정했더니 이중으로 값이 넘어가는 문제가 해결됐습니다.

1개의 좋아요