Apple App store 连接错误 API 无法正常工作

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

我尝试使用以下代码在 Python Jupyter Notebook 中发出 Apple App Store Connect API 请求并收到错误:

错误:401,未授权,身份验证凭据丢失或无效。

#make API request
url = "https://api.appstoreconnect.apple.com/v1/salesReports"

params = {
    'filter[frequency]': 'DAILY',
    'filter[reportType]': 'SALES',
    'filter[reportSubType]': 'SUMMARY',
    'filter[vendorNumber]': 'XXXXXXXX' 
}

headers = {
    'Authorization': f"Bearer {token}",
    'Content-type': 'application/json'
}

response = requests.get(url, headers=headers)

#apps = response.json()
print(response.text)

我按照苹果为 App Store Connect API 创建 API 密钥 https://developer.apple.com/documentation/appstoreconnectapi/creating_api_keys_for_app_store_connect_api 提供的步骤创建了不记名令牌,并为 api 请求生成令牌https://developer .apple.com/documentation/appstoreconnectapi/generate_tokens_for_api_requests 我使用以下代码创建了以下常量和 JWT 令牌,并编写了代码来查看生成的令牌是否仍然有效:

#Constants
Issuer_ID = "XXXXXXXXx"
Key_ID = "XXXXXXX" 
Secret_key = "/Users/home/Desktop/Apple_API_Key" 
Audience = "appstoreconnect-v1"
token_duration = 1200 #cannot exceed this max amount of else apple will reject request

#创建 jwt 令牌

with open(Secret_key, 'r') as f:
    Secret_key = f.read()

header = {
    'alg':'ES256',
    'kid':Key_ID,
    'typ':'JWT'
}
payload = {
    'iss':Issuer_ID,
    'exp': time.time() + token_duration,
    'aud': Audience
}

token = jwt.encode(payload, Secret_key, algorithm = 'ES256', headers = header)
print(token)

decoded_token = jwt.decode(token, options={"verify_signature": False})
expiration_timestamp = decoded_token['exp']

if time.time() > expiration_timestamp:
    print("The token is expired!")
else:
    print("The token is still valid.")
python app-store
2个回答
1
投票

我遇到了类似的问题。要解决此问题,请确保您在私钥创建过程中授予Admin访问权限。此外,您可以尝试从请求标头中删除

Content-type
。我在苹果论坛上看到它对某些用户有帮助。


0
投票

以防万一有人不关心所使用的语言:

当使用 PHP 也适合你时,这个就很好用。

https://github.com/ikool-cn/appstoreconnectapi-php-jwt-sign

它需要一个名为

ECSign.php
的文件。您可以从 Github 上的同一作者那里获取:https://github.com/ikool-cn/appstoreconnectapi-php-jwt-sign/blob/master/ECSign.php

只需插入您的私钥、密钥 ID 和颁发者 ID,将

ECSign.php
文件放在同一目录中即可。

© www.soinside.com 2019 - 2024. All rights reserved.