문의 사항에 따라 필요한 정보를 먼저 입력하시면 더 빠르게 대응해 드릴 수 있습니다.
- 개발 과정에서 문제가 있을 경우
- 앱 아이디(app ID): 1005591
- 호스팅 사:
- 서비스 URL : https://gogorentcar.fifteenh.io
- 오류 내용 :
토큰발급요청(https://kauth.kakao.com/oauth/token) 시 401 오류
‘grant_type’ => ‘authorization_code’,
‘client_id’ => rest api 앱 키,
‘redirect_uri’ => KAKAO_TOKEN_CALLBACK_URL_DEV,
‘code’ => ‘gqpUKZU5mZb9IE3uymP0oAbtp7GXjF1Dm6Fu8gpMcRThpvCn5zfnflceAeQKKw0fAAABjrw_kdio9NUiJo7xnA’,
‘client_secret’ => 발급받은 client_secret,
오류 내용
Array
(
[error] => invalid_client
[error_description] => Bad client credentials
[error_code] => KOE010
)
KOE010 오류면 client_secret 이 일치하지않는 것이라고 알고 있는데, 확인 결과 일치한 것으로 파악됩니다. 다른 부분에서 잘못 설정된 값이 있는지 확인 부탁드립니다.
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
use restfulApi\RestfulApi;
define('FILE_NAME', 'kakaoAuthCallback');
define('KAKAO_TOKEN_URL', 'https://kauth.kakao.com/oauth/token');
define('SERVER_HOST_NAME_PROD', 'homeadmin.grimsys.com');
define('KAKAO_TOKEN_CALLBACK_URL_DEV', 'https://homeadmindev.grimsys.com/backend/api/socialLogin/kakaoTokenCallback.php');
define('KAKAO_TOKEN_CALLBACK_URL_PROD', 'https://homeadmin.grimsys.com/backend/api/socialLogin/kakaoTokenCallback.php');
try
{
require_once $_SERVER['DOCUMENT_ROOT'] . '/backend/common/RestfulApi.php';
$code = $_GET['code'];
$state = $_GET['state'];
$error = $_GET['error'];
$errorDescription = $_GET['error_description'];
if ($error)
{
echo json_encode([
'result' => FALSE,
'code' => $error,
'message' => $errorDescription,
]);
exit();
}
$token = callKakaoTokenApi($code);
} catch (Exception $e)
{
$server_exception = new GogoAdminServerException($e->getMessage(), $e->getCode());
$server_exception->errorReport(PLATFORM_TYPE, FILE_NAME, 0);
echo json_encode(['result' => $e->getCode()]);
}
function callKakaoTokenApi($code)
{
$restfulApi = new RestfulApi();
$isProd = $_SERVER['HTTP_HOST'] === SERVER_HOST_NAME_PROD;
print_r('$code: ');
print_r($code);
$header = ['Content-type: application/x-www-form-urlencoded'];
$requestDataList = [
'grant_type' => 'authorization_code',
'client_id' => '45a3349c334f34cf39fe9eb05fd70fe1',
'redirect_uri' => $isProd ? KAKAO_TOKEN_CALLBACK_URL_PROD : KAKAO_TOKEN_CALLBACK_URL_DEV,
'code' => $code,
'client_secret' => 'eKBVEjT6XScKuKwXUzmDdKPubfdpORhW',
];
$postFields = json_encode($requestDataList);
$tokenResponse = $restfulApi->callPost(KAKAO_TOKEN_URL, $postFields, $header);
print_r('$tokenResponse: ');
print_r($tokenResponse);
if ($tokenResponse->httpCode !== 302)
{
echo json_encode([
'result' => FALSE,
'code' => $tokenResponse->output->error,
'message' => $tokenResponse->output->error_description,
]);
exit();
}
return $tokenResponse->output;
}
php 코드 공유드립니다.
인가 코드 받기 api에 redirect_uri로 전달되는 곳이며, 인가코드로 토큰 발급 요청 api 를 호출하는 코드입니다.
안녕하세요.
토큰 발급은 x-www-form-urlencoded 데이터 형식으로 요청 하셔야 합니다.
curl_setopt($ch, CURLOPT_URL, 'https://kauth.kakao.com/oauth/token');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/x-www-form-urlencoded',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'grant_type=authorization_code'
. '&client_id=' . $cliend_id
. '&redirect_uri=' . urlencode($redirect_uri)
. '&code=' . $code);