🔗 카카오 메시지 api 를 사용한 나에게 메시지 보내는 방법
⚠️ 만약 약관 동의를 하지 않은 사용자가 추가 동의를 받고싶을 경우
🔗 카카오 Rest api - 친구목록 가져오기 공식 문서
https://kapi.kakao.com/v1/api/talk/friends - GET
Authorization: Bearer ${ACCESS_TOKEN}
GET
요청은 message body 를 사용할 수 없어서 쿼리 파라미터 방식으로 추가 정보를 전송해줘야 한다.limit
로 나눔 - 친구 수 가 limit
보다 클 경우 페이징 처리됨after_url
로 GET 요청하면 다음 페이지 리스트를 받을 수 있음order
와 friend_order
로 설정 가능order
는 ‘asc’ 로,friend_order
는 ‘favorite’ 으로 지정하면 된다.JSON
elements
- Friend[]
:친구 정보를 담은 JSON 배열implementation group: 'org.json', name: 'json', version: '20210307' // json 파서
elements
를 매핑하기 위한 dtoimport lombok.Data;
@Data
public class KakaoFriendListDto {
private String id;
private String uuid;
private boolean favorite;
private String profile_nickname;
private String profile_thumbnail_image;
}
httpRequest
를 호출해 전송하는 객체@Service
public class KakaoMessageService extends HttpCallService {
private static final String FRIENDS_LIST_SERVICE_URL = "https://kapi.kakao.com/v1/api/talk/friends";
...
//-- 내 친구 목록 가져오기 --//
public List<KakaoFriendListDto> getFriendsList(String accessToken) {
HttpHeaders header = new HttpHeaders();
header.set("Authorization", "Bearer " + accessToken);
HttpEntity<String> entity = new HttpEntity<>(header);
ResponseEntity<String> response = httpRequest(FRIENDS_LIST_SERVICE_URL, HttpMethod.GET, entity);
List<KakaoFriendListDto> list = new ArrayList<>();
JSONObject jsonObject = new JSONObject(response.getBody());
JSONArray elements = (JSONArray) jsonObject.get("elements");
for (Object element : elements) {
KakaoFriendListDto dto = new KakaoFriendListDto();
JSONObject obj = (JSONObject) element;
dto.setId(obj.get("id").toString());
dto.setUuid(obj.get("uuid").toString());
dto.setFavorite((boolean) obj.get("favorite"));
dto.setProfile_nickname(obj.get("profile_nickname").toString());
dto.setProfile_thumbnail_image(obj.get("profile_thumbnail_image").toString());
list.add(dto);
}
return list;
}
@RestController
@RequestMapping("/kakao")
@RequiredArgsConstructor
public class KakaoMessageController {
private final KakaoMessageService kakaoService;
private final Rq rq;
//-- 내 친구 목록 가져오기 테스트 --//
@GetMapping("/list")
public List<KakaoFriendListDto> getList() {
String accessToken = rq.getMember().getAccessToken();
return kakaoService.getFriendsList(accessToken);
}
element
값이 모두 null 로 나온다…