TikTok业务API:OAuth2授权码总是过期

问题描述 投票:0回答:1

我正在尝试编写一个与 TikTok 的 API 交互的 Python 脚本(错误)。我有一些代码似乎几乎可以工作,但 API 正在响应我的 access_token 请求,授权代码在生成代码后不久就已过期,因此我根本无法获取令牌。

我有以下代码用于获取授权 URL、从中获取身份验证代码并将其发送以交换访问令牌:

# API key details
token_url = "https://open.tiktokapis.com/v2/oauth/token/" 
auth_url =  "https://business-api.tiktok.com/portal/auth"
redirect_uri = "https://my_company_website/"

app_id = "xxxxxxxxxx"
secret_key = "yyyyyyyyyy"

def generate_auth_url():
    csrf_state = secrets.token_hex(16)

    params = {
        'app_id': app_id,
        'scope': 'user.info.basic',
        'redirect_uri': redirect_uri,
        'state': csrf_state,
    }

    url = auth_url + '?' + urllib.parse.urlencode(params)
    
    return url, csrf_state
    
# Function to get the access token
def get_access_token(authorization_code):
    data = {
        'client_key': app_id,
        'client_secret': secret_key,
        'code': authorization_code,
        'grant_type': 'authorization_code',
        'redirect_uri': redirect_uri
    }
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded'
    }

    response = requests.post(token_url, headers=headers, data=urllib.parse.urlencode(data))

    if response.status_code == 200:
        return response.json()
    else:
        print(f"Error: Received status code {response.status_code}")
        print(f"Response content: {response.content.decode()}")
        return None

def manual_test():
    # Generate authorization URL
    print("Generating authorization URL...")
    url, state = generate_auth_url()
    print("URL:", url)
    print("State:", state)
    
    # Prompt user for the redirect URL
    input_ = input("Paste the URL you were redirected to: ")
    
    # Extract authorization code from redirect URL
    code = input_.split("code=")[1].split("&")[0]

    # Decode the code (THAT'S THE EDITING PART) 
    decoded_code = urllib.parse.unquote(code)

    print("Code:", code)
    print("Decoded Code:", decoded_code)
    
    # Fetch access token without delay
    print("Fetching access token...")
    token_info = get_access_token(decoded_code)
    print(token_info)

但是发送令牌请求会导致错误代码:

{'error': 'invalid_grant', 'error_description': 'Authorization code is expired.', 'log_id': '202312191447256251E59DA270380F9108'}

这完全是无稽之谈,因为根据其文档,授权代码应该持续 24 小时。

我知道两个请求中的参数不同(app_id 在访问令牌请求中变为 client_key,而在我的应用程序详细信息中,参数被称为 app_id 和 Secret,而不是 cleint_key 和 client_secret),但它需要在第一部分中引用 app_id 来获取授权 URL,在第二部分中使用除 client_key 和 client_secret 之外的任何参数名称会导致无效参数错误。这让我担心我使用了错误的 access_token URL,但根据 TikTok 的文档,不存在任何其他令牌 URL。

有谁知道这里出了什么问题吗?

python oauth-2.0 tiktok
1个回答
0
投票

我在使用 NodeJS 和 Axios 时遇到了同样的问题。试试这个:

token_url = "https://business-api.tiktok.com/open_api/v1.3/oauth2/access_token/" 

data = {
        'app_id': app_id,
        'secret': secret_key,
        'auth_code': authorization_code,
        'grant_type': 'authorization_code', // you can remove this
        'redirect_uri': redirect_uri // you can remove this
    }
    headers = {
        'Content-Type': 'application/application/json'
    }

    response = requests.post(token_url, headers=headers, data=urllib.parse.urlencode(data))
© www.soinside.com 2019 - 2024. All rights reserved.