현재 저는 카카오 디벨로퍼와 카카오 i 오픈빌더를 함께 사용해서 친구들에게 기온, 미세먼지, 확진자 수를
제가 만든 챗봇을 통해 자신이 알고 싶은 항목들과 시간을 설정하여 알람이 오게끔 하는 앱을 개발하였습니다.
앱을 개발하기전에 앞서서 카카오 데브톡에 디벨로퍼로 만든 자신의 앱을 비즈니스 앱으로 신청해서
비즈앱이 되어야만 친구들에게 메시지를 보낼 수 있습니다.
카카오 디벨로퍼를 사용하는데에 있어서 토큰과 관련해서 어려운점이 많았는데 이부분을 조금 정리해보고자 합니다.
1. 카카오 디벨로퍼에서 앱을 만들었다면 자신의 REST API키를 따로 메모해두는것이 편합니다.
2. 자신이 만든 서버가 있다면 서버의 URL주소를 Redirect URI에 추가해주시고 없으시다면
example.com을 그대로 사용하시면 됩니다.
3. 이렇게
카카오 로그인 url을 만들 수 있습니다.{}를 빼시고 그 안에 KEY와 URI를 넣으시면 카카오 로그인 및 권한 승인 페이지가 뜨게 됩니다. 그 후에 웹페이지 URL을 보면 'https://~~~~~~?code=*******' 이 부분이 있는데 여기서 ****부분이 토큰을 발급받기위해 필요한 code입니다
먼저 앱 개발자인 OWNER의 토큰을 받는 함수입니다.
인자에는 code가 필요한데 위의 code를 인자로 받습니다. 맨 처음에는 할 줄 아는 방법이 없어서 수동으로 코드를 입력하게 끔 input으로 code를 넣어줬습니다.
def kakao_to_friends_get_ownertokens(code):
url = 'https://kauth.kakao.com/oauth/token'
authorize_code = code
data = {
'grant_type':'authorization_code',
'client_id':******,
'redirect_uri':'http://3.35.252.82:5000/kakao_owner_code',
'code': authorize_code,
}
response = requests.post(url, data=data)
tokens = response.json()
with open("kakao_code_friends_owner.json","w") as fp:
json.dump(tokens, fp)
return str(tokens['refresh_token'])
code를 이용해서 OWNER의 토큰이 kakao_code_friends_owner.json파일로 생성되게 됩니다.
return값은 다른 함수에서 사용하려고 넣은것이기에 큰 신경안쓰셔도 됩니다.
이 토큰은 Access 토큰으로 유효기간이 길지가 않습니다. 그렇다고 매번 code를 받아서 토큰을 발급받을 순 없기에 유효기간이 긴 Refresh 토큰을 사용해야됩니다.
def kakao_to_friends_get_refreshtokens():
with open(bot_path_owner,"r") as fp:
token_data = json.load(fp)
refresh = token_data['refresh_token']
url = "https://kauth.kakao.com/oauth/token"
rest_api_key = *****
data = {
"grant_type": "refresh_token",
"client_id": f"{rest_api_key}",
"refresh_token": refresh
}
response = requests.post(url, data=data)
tokens = response.json()
with open(bot_path_refresh, "w") as fp:
json.dump(tokens, fp)
return tokens['access_token']
bot_path_owner 는 OWNER 토큰의 경로이며 이토큰을 읽고 bot_path_refresh 경로에 Refresh 토큰을 생성합니다.
data에 넣은 값들은 여러 실험하다가 넣는 형식이 달라진것입니다.
이렇게 만들어진 Refresh 토큰을 이용하여 계속해서 사용할 수 있습니다. 물론 유효기간이 있지만 긴 편이기에 사용하는것이 좋습니다.
이제 토큰의 유효성 검사를 해야합니다. 그래야지만 원하는 친구목록과 메시지 전송권한등을 받을 수 있습니다.
def kakao_owner_token():
with open(bot_path_refresh,"r") as fp:
tokens = json.load(fp)
url="https://kapi.kakao.com/v1/user/access_token_info"
headers={"Authorization" : "Bearer " + tokens["access_token"]}
response = requests.get(url, headers=headers)
return response.text
Refresh 토큰을 이용하여 아래의 url로 토큰 체크를 합니다.
이렇게 되면 이후에 작성할 친구들에게 카톡 보내기나 저의 카톡친구 목록을 불러온다거나 할 수 있습니다.
다음은 친구들의 권한과 토큰 등 OWNER 토큰이 아닌 USER 토큰에 대해서 작성해보겠습니다.
제가 작업했던 프로젝트의 내용을 그대로 올리는 것이라 미흡한부분이 많지만 이해해주시면 감사하겠습니다.
'Python' 카테고리의 다른 글
파이썬-실습(9) 가변적인 Url 파싱하기, 카카오 인가코드 파싱 (0) | 2021.12.17 |
---|---|
파이썬-실습(8) 카카오 디벨로퍼 인가코드, Friends 토큰 (0) | 2021.12.17 |
파이썬-실습(6) HTML 콤보박스 값을 HTML에 다시 반영하기 (0) | 2021.12.15 |
파이썬-실습(5) HTML에 Flask를 통해 데이터 값을 삽입 (2) | 2021.12.14 |
Flask(플라스크) OSError: [Errno 98] Address already in use (0) | 2021.12.07 |