Kakao Login & Friends API

 Kakao Developer setting

1. 카카오 디벨로퍼 사이트에서 (https://developers.kakao.com/) -> 내 애플리케이션 -> 애플리케이션 추가하기

2. 앱 이름 등록후 플랫폼 등록

3. 앱 키에서 REST API 키 복사해서 저장해두기

4.  카카오 로그인 활성화 & Redirect URI 등록

인가코드를 받을 spring controller URI를 적으면 된다.

5. 카카오 로그인 API 참고해서 필요한 것들 & 필수 정보 동의하기 

https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api

 

Kakao Login API

https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

1. 인가 코드를 받아올 간단한 html 폼 작성

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <a href="https://kauth.kakao.com/oauth/authorize?client_id=09201921cd5e210ee03ddd019e256454&redirect_uri=http://127.0.0.1:8080/kakao-login&response_type=code"><img src="/kakao_login_medium_narrow.png" alt=""></a>
</body>
</html>

2. 토큰 발급 

package com.example.userservice.Login.token;

import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Flux;

// 인가코드를 이용하여 Token ( Access , Refresh )를 받는다.
@Component
@RequiredArgsConstructor
public class KakaoTokenData {
    private final WebClient webClient = WebClient.create();
    private static final String TOKEN_URI = "https://kauth.kakao.com/oauth/token";
    private static final String REDIRECT_URI = "http://127.0.0.1:8080/kakao-login";
    private static final String GRANT_TYPE = "authorization_code";
    private static final String CLIENT_ID = {REST API KEY};

    public KakaoToken getToken(String code) {
        String uri = TOKEN_URI + "?grant_type=" + GRANT_TYPE + "&client_id=" + CLIENT_ID + "&redirect_uri=" + REDIRECT_URI + "&code=" + code;

        Flux<KakaoToken> response = webClient.post()
                .uri(uri)
                .contentType(MediaType.APPLICATION_JSON)
                .retrieve()
                .bodyToFlux(KakaoToken.class);

        return response.blockFirst();
    }
}
package com.example.userservice.Login.token;

import lombok.Data;

@Data
public class KakaoToken {
    private String token_type;
    private String access_token;
    private Integer expires_in;
    private String refresh_token;
    private Integer refresh_token_expires_in;
}

 

3. 토큰으로 로그인 

package com.example.userservice.Login.service;

import com.example.userservice.Login.dto.ResponseKakaoUserInfo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;

@RequiredArgsConstructor
@Component
public class KakaoUserService {
    private final WebClient webClient = WebClient.create();
    private static final String USER_INFO_URI = "https://kapi.kakao.com/v2/user/me";

    public ResponseKakaoUserInfo getUserInfo(String token) {
        String uri = USER_INFO_URI;

        Mono<ResponseKakaoUserInfo> response = webClient.get()
                .uri(uri)
                .header("Authorization", "Bearer " + token)
                .retrieve()
                .bodyToMono(ResponseKakaoUserInfo.class);

        return response.block();
    }
}

 

Kakao Friends API

https://developers.kakao.com/docs/latest/ko/kakaotalk-social/rest-api

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

1. 친구 목록 불러오기

 

package com.example.userservice.Friends.service;

import com.example.userservice.Friends.vo.KakaoFriendInfo;
import com.example.userservice.Friends.vo.ResponseKakaoFriends;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.util.DefaultUriBuilderFactory;

import java.util.List;

@RequiredArgsConstructor
@Component
public class KakaoFriendService {
    private final WebClient webClient = WebClient.create();
    private static final String FRIENDS_INFO_URI = "https://kapi.kakao.com/v1/api/talk/friends";

    public List<KakaoFriendInfo> getFriendsInfo(String token, Integer offset ) {
        String uri = FRIENDS_INFO_URI;

        DefaultUriBuilderFactory factory = new DefaultUriBuilderFactory(uri);
        factory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);

        WebClient webClient = WebClient.builder().uriBuilderFactory(factory).baseUrl(uri).build();

        return  webClient.get()
                .uri(uriBuilder -> uriBuilder
                        .queryParam("limit", 20)
                        .queryParam("offset", offset)
                        .build())
                .header("Authorization", "Bearer " + token)
                .retrieve()
                .bodyToMono(ResponseKakaoFriends.class)
                .block()
                .getFriends();
    }
}

친구 객체는 required와 본인이 원하는 데이터로 작성하면 된다.

 

 

참고자료

https://velog.io/@hwan2da/Spring-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0

 

[Spring] 카카오 로그인 구현하기

[Spring] 카카오 로그인 구현하기

velog.io

https://devtalk.kakao.com/t/faq-api-api/82152

 

[faq] 친구 목록 api, 메시지 전송 api를 연동하는 과정에서 자주 겪는 에러

1. 파라미터를 잘못 넣은 경우 {"msg":"Constraints on the parameter [receiver_uuids] are unsatisfied. The input receiver id(s) is invalid format.","code":-2} {"msg":"Constraints on the parameter [receiver_uuids] are unsatisfied. Not allowed to sen

devtalk.kakao.com

 

'개발 > API' 카테고리의 다른 글

[spring] Naver Session Login  (0) 2023.07.31
[Spring] Google Session Login  (0) 2023.07.31