문의 시, 사용하시는 개발환경과 디벨로퍼스 앱ID를 알려주세요.
앱아이디 924229
사용환경 WEB
개발환경 PHP
갑자기 사용자profile을 못가져오는데 이유를 알 수 있을까요?
기존앱(924229) 에서 안되길래
테스트용으로 새로운앱(942791)을 생성해서 로그인API 테스트 해보았더니 잘 됩니다.
설정문제 아니면 알 수 없는 이유로 카카오에서 차단한게 아닐까 싶습니다.
확인 부탁드립니다.
문의 시, 사용하시는 개발환경과 디벨로퍼스 앱ID를 알려주세요.
앱아이디 924229
사용환경 WEB
개발환경 PHP
갑자기 사용자profile을 못가져오는데 이유를 알 수 있을까요?
기존앱(924229) 에서 안되길래
테스트용으로 새로운앱(942791)을 생성해서 로그인API 테스트 해보았더니 잘 됩니다.
설정문제 아니면 알 수 없는 이유로 카카오에서 차단한게 아닐까 싶습니다.
확인 부탁드립니다.
924229 디벨로퍼스앱은 차단되지 않았고 최근 7일간 에러 발생 이력도 없습니다.
카카오로부터 받은 응답이 어떻게 되는지 확인 부탁드립니다.
개발자가 아니시라면, 사이트 URL 알려주세요.
https://enrichkor.com
입니다.
그누보드를 사용하였고
버전은 5.5 입니다.
Fatal error : Uncaught Exception: User profile request failed! Kakao returned an error: Exception: The Authorization Service has return: in /home/enrichkor/www/plugin/social/Hybrid/Providers/Kakao.php:120 Stack trace: #0 /home/enrichkor/www/plugin/social/Hybrid/Providers/Kakao.php(52): Hybrid_Providers_Kakao->authenticate() #1 /home/enrichkor/www/plugin/social/Hybrid/Endpoint.php(173): Hybrid_Providers_Kakao->loginFinish() #2 /home/enrichkor/www/plugin/social/includes/g5_endpoint_class.php(52): Hybrid_Endpoint->processAuthDone() #3 /home/enrichkor/www/plugin/social/Hybrid/Endpoint.php(55): G5_Hybrid_Endpoint->processAuthDone() #4 /home/enrichkor/www/plugin/social/Hybrid/Endpoint.php(72): Hybrid_Endpoint->__construct() #5 /home/enrichkor/www/plugin/social/includes/g5_endpoint.php(27): Hybrid_Endpoint::process() #6 /home/enrichkor/www/plugin/social/index.php(22): G5_Hybrid_Authentication::hybridauth_endpoint() #7 {main} in /home/enrichkor/www/plugin/social/Hybrid/Auth.php:169 Stack trace: #0 /home/enrichkor/www/plugin/social/Hybrid/Auth.php(55): Hybrid_Auth::initialize() #1 /home/enrichkor/www/plugin/social/includes/functions.php(91): Hybrid_Auth->__construct() #2 /home/enrichkor/www/plugin/social/includes/functions.php(479): social_login_get_provider_adapter() #3 /home/enrichkor/www/plugin/social/popup.php(20): social_check_login_before() #4 {main} thrown in /home/enrichkor/www/plugin/social/Hybrid/Auth.php on line 169
확인해보니 카카오측에는 에러가 없고, 기재해주신 error 를 보니
유저 정보 항목에 profile은 없고 profile_nickname, profile_image로 세분화되어 있는데 profile 값을 조회하다 해당 소셜 플러그인에서 에러 발생한 것으로 보입니다. (plugin/social/Hybrid/Providers/Kakao.php)
2021년 6월에 동의 항목 '프로필(닉네임/프로필 사진)'이 ‘닉네임’, '프로필 사진’으로 분리되었는데
해당 플러그인에 사용자 정보 가져오는 부분 예전 버전인듯하네요. 확인 부탁드려요.
호출주소 :
https://kauth.kakao.com/oauth/token
POST값
Array
(
[grant_type] => authorization_code
[client_id] => e768a7bd261588348d683bf9a9a9ef11
[redirect_uri] => https://enrichkor.com/plugin/social/?hauth.done=kakao
[code] => lO4yWw3w5lIGnNUSpQ7R1Yib9I3zrQ_UFI0yaGQzgG6ofhsq_lJsY9ZKncGTkjf6_ZAQsQopyNgAAAGJdlWQrQ
)
curl 에러 :
SSL: no alternative certificate subject name matches target host name ‘kauth.kakao.com’
리턴값은 빈값으로 나오는데 이거랑 관련이 있을까요?
이 내용은 해당 웹사이트에서 반환한 정보인가요?
curl로 호출할때 반환한 값입니다.
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
curl 7.81.0 (x86_64-pc-linux-gnu) libcurl/7.81.0 OpenSSL/3.0.2 zlib/1.2.11 brotli/1.0.9 zstd/1.4.8 libidn2/2.3.2 libpsl/0.21.0 (+libidn2/2.3.2) libssh/0.9.6/openssl/zlib nghttp2/1.43.0 librtmp/2.3 OpenLDAP/2.5.14
Release-Date: 2022-01-05
서버에 설치되어있는 openssl과 curl버전입니다.
로그를 보니 ‘kauth.kakao.com’에 /oauth/authorize 는 잘 처리되었고
/oauth/token 이 없는 걸 보니
https://enrichkor.com/plugin/social/?hauth.done=kakao 에서
호출을 못했거나 잘못한것으로 같긴하네요.
/oauth/token 호출하는 코드 블럭 공유 부탁드려요.
Kakao.php 에서 호출하였습니다.
private function authenticate($code)
{
$params = array(
"grant_type" => "authorization_code",
"client_id" => $this->api->client_id,
"redirect_uri" => $this->api->redirect_uri,
"code" => $code
);
if( $this->api->client_secret && ($this->api->client_secret !== $this->api->client_id) ){
$params['client_secret'] = $this->api->client_secret;
}
$response = $this->request($this->api->token_url, $params, $this->api->curl_authenticate_method);
$response = $this->parseRequestResult($response);
if ( ! $response || ! isset($response->access_token) ) {
throw new Exception("The Authorization Service has return: " . $response->error);
}
if ( isset($response->access_token) ) $this->api->access_token = $response->access_token;
if ( isset($response->refresh_token) ) $this->api->refresh_token = $response->refresh_token;
if ( isset($response->expires_in) ) $this->api->access_token_expires_in = $response->expires_in;
// calculate when the access token expire
if ( isset($response->expires_in) ) {
$this->api->access_token_expires_at = time() + $response->expires_in;
}
return $response;
}
private function request($url, $params=false, $type="GET")
{
if(Class_exists('Hybrid_Logger')){
Hybrid_Logger::info("Enter OAuth2Client::request( $url )");
Hybrid_Logger::debug("OAuth2Client::request(). dump request params: ", serialize( $params ));
}
$this->http_info = array();
$ch = curl_init();
echo print_r2($this->api->curl_header);
echo $url."<BR>";
curl_setopt($ch, CURLOPT_URL , $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT , $this->api->curl_time_out);
curl_setopt($ch, CURLOPT_USERAGENT , $this->api->curl_useragent);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->api->curl_connect_time_out);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $this->api->curl_ssl_verifypeer);
curl_setopt($ch, CURLOPT_HTTPHEADER , $this->api->curl_header);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
if ( $this->api->curl_proxy ) {
curl_setopt( $ch, CURLOPT_PROXY, $this->curl_proxy);
}
if ( $type == "POST" ) {
curl_setopt($ch, CURLOPT_POST, 1);
if ($params) curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query($params) );
}
$response = curl_exec($ch);
echo print_r2($params);
echo print_r2($response);
echo curl_error($ch);
if(Class_exists('Hybrid_Logger')){
Hybrid_Logger::debug( "OAuth2Client::request(). dump request info: ", serialize(curl_getinfo($ch)) );
Hybrid_Logger::debug( "OAuth2Client::request(). dump request result: ", serialize($response ));
}
$this->http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$this->http_info = array_merge($this->http_info, curl_getinfo($ch));
curl_close ($ch);
exit;
return $response;
}
authenticate 메소드에서
$response = $this->request($this->api->token_url, $params, $this->api->curl_authenticate_method);
윗 부분에서 카카오 curl로 요청하는데 값이 없어서 인증을 못받고 에러가 나는거 같습니다.
확인완료 (1) $this->api->curl_authenticate_method 는 어떤 값을 전달하나요?
(2) ‘kauth.kakao.com’ 관련 현재 인증서 문제는 리포팅된바 없어서
운영하시는 서버 환경 종속적문제일듯한데요.
(3) 개발하신 코드상 변수가 있을지 확인 위해 아래 예제 정상 작동하는지 우선 확인 부탁드립니다.
확인완료 (4) echo curl_error($ch); 는 어떤 값이 나오나요?
확인완료 (5) $response = curl_exec($ch); 결과를 var_dump($response); 로 출력한 값도 공유 부탁드려요.
$this->api->curl_authenticate_method 는 POST입니다.
네이버로그인도 사용중이긴 한데
같은 curl 코드로 호출하고 있습니다만
리턴값이 나오는거 보면 curl 코드만의 문제는 아닌것 같거든요.
https://devtalk.kakao.com/t/rest-api-php/11
접속하면 이 페이지가 존재하지 않거나 비공개입니다. 라고 나옵니다.
$response = curl_exec($ch); 결과 => bool(false)
echo curl_error($ch); => SSL: no alternative certificate subject name matches target host name ‘kauth.kakao.com’
0:
https://kapi.kakao.com/v2/user/me
0:
내 애플리케이션>제품 설정>카카오 로그인> 동의항목 : profile 필수 설정
예제를 실행한 결과 입니다.
curl_error 응답보면, kauth.kakao.com 호출을 못하는 문제는 맞는것 같은데…
예제 코드로도 curl_error 동일 한 에러 발생하는지 확인 부탁드려요.
서버에서 kauth.kakao.com로 ping은 가나요?
traceroute kauth.kakao.com 결과도 확인 부탁드려요.
ping은 멈춰있습니다.
ping kauth.kakao.com
PING kauth-51la0hs1.kgslb.com (27.0.237.15) 56(84) bytes of data.
traceroute to kauth.kakao.com (203.133.166.32), 30 hops max, 60 byte packets
1 _gateway (175.126.176.1) 0.634 ms 0.706 ms 1.273 ms
2 10.2.1.57 (10.2.1.57) 0.807 ms 0.865 ms 0.920 ms
3 172.16.123.25 (172.16.123.25) 0.541 ms 0.627 ms 0.784 ms
4 172.16.122.129 (172.16.122.129) 6.311 ms 6.373 ms 6.332 ms
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
curl문제인거 같아서 guzzle로도 시도해보았는데 guzzle에서도 curl을 사용하더라고요
카카오톡 로그인이 7월20일까지 되고 안되길래
curl을 사용하는 다른 api들도 확인해보니 일부는 같은 증상으로 안되더라고요.
그래서 서버에 apt install libcurl4-openssl-dev 를 설치해줬더니 해결 되었습니다.
아직까지도 7월20일(어제) 까지는 되었는데 오늘 왜 안되었는지는 모르겠지만요…
친절한 응대 너무나 감사드립니다.
덕분에 해결되었습니다.