반응형

어제 받은 토큰으로 메세지 발송 시도~~~ 하였으나

 

코드는 돌았는데...메세지 무반응....

알아보니

 

"로그인 시 카카오계정 세션의 인증 시간은 기본 24시간이며, 최초 인증 후 세션 시간은 변경되지 않습니다. 사용자가 로그인 유지를 선택한 경우에는 인증 시간이 1입니다. "

뚜둥..쓰 

 

우선 토큰 부터 다시 파해치자.

# https://kauth.kakao.com/oauth/authorize?client_id={api값}&redirect_uri={설정하신 리다이렉션 url}&response_type=code 

위 url로 접속하면  code 값을 반환해줍니다.

 

====================코드===============================

import requests
import json

url = "https://kauth.kakao.com/oauth/token"

data = {
"grant_type" : "authorization_code",
"client_id" : "{apt값}",
"redirect_uri" : '설정하신 리다이렉션 url',
"code" : "반환 된 code 값"
}

response = requests.post(url, data=data)
tokens = response.json()


if "access_token" in tokens:
    with open("kakao_token.json", "w") as fp:
        json.dump(tokens, fp)
        print("Tokens saved successfully")
else:
    print(tokens)

====================코드===============================

실행해주세요.

토큰을 저장 하였습니다 석세스~~

 

생성 된 토큰에 유효기간이 있음

딕셔너리 형태 반환 값 중 , "expires_in": 12333, 숫자 초단위  잔여 유효시간을 전달 합니다!-

 

아래 코드로 토큰을 리프레시하실 수 있습니다.

====================코드===============================

import requests
import json

rest_api_key = 'aa462514c84043fba37df1f82aaf6f4b'
redirect_uri = 'https://localhost:3000'
url_token = 'https://kauth.kakao.com/oauth/token'
authorize_code = 'CK5cVxsxO6I4zBsMaMgo1AWl7wf9vMGhzsACPuD7phtO_aQx8jjk_91O5O-PbD7RnFFdvgo9c00AAAGI4mjg8A'

try:
    with open("kakao_token.json","r") as fp: # 기존에 저장된 token 파일이 있는지 찾아봅니다.
        tokens = json.load(fp)
        if "error_code" in tokens:
            tokens={}
except Exception as e:
    print(e)
    tokens={}

if tokens == {}:
    # 신규 발급이 필요한 경우
    param = {
        'grant_type':'authorization_code',
        'client_id':rest_api_key,
        'redirect_uri':redirect_uri,
        'code': authorize_code, # 한번 발급되면 authorize_code는 무효화됩니다. 
    }

    response = requests.post('https://kauth.kakao.com/oauth/token', data=param)
    tokens = response.json() # token 발급 api로 발급된 정보들을 kakao_token.json 파일에 저장합니다.
    if "error_code" in tokens:
        print(tokens["error_code"])
    else:
        with open("kakao_token.json","w") as fp:
            json.dump(tokens, fp)
            print("파일로 토큰 정보 저장!")
else:
# 기존 발급된 정보가 있을 경우
    headers = {
        "Authorization": "Bearer " + tokens["access_token"]
    }
    # access_token_info의 결과가 계속 -401로 돌아옵니다. 추후 수정할 예정입니다.
    response = requests.get('https://kapi.kakao.com/v1/user/access_token_info', headers=headers)
    result = response.json()
    if "error_code" in result:
     # -401은 유효하지 않은 값 혹은 유효기간이 지난 토큰일 경우 발생하는 에러입니다.
        # api로 token 갱신을 요청합니다.
        param = {
            "grant_type":"refresh_token",
            "client_id" : rest_api_key,
            "refresh_token" : tokens["refresh_token"]
        }
        response = requests.post('https://kauth.kakao.com/oauth/token', data=param)
        new_token = response.json()
        
        # 새로 발급된 token을 다시 저장합니다.
        if "error_code" in new_token:
            print("ERROR :", new_token["error_code"])
        else:
            with open("kakao_token.json", "w") as fp:
                json.dump(new_token, fp)
                print("파일로 새로운 토큰 정보 저장!")
    else:
        print("정상 토큰")

====================코드===============================

반응형

+ Recent posts