Python生成App Store Server API所需的JWT【附源码】

329 阅读1分钟

1. 所需python库

  • cryptography
  • jwt
  • pytz

2. 所需苹果后台能找到的数据

  • app对应的bundleid
  • app内购私钥ID
  • app内购私钥文件
  • app内购的issureID

bundleID 相信大家都知道怎么获取

其它的三项获取位置如下

1709879385072.jpg

3. 代码如下

亲测可用。 jwt验证地址:jwt.io/

import jwt
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
import datetime
import pytz

# 从 .p8 文件中读取私钥
with open("你的私钥文件名.p8", "rb") as key_file:
    private_key = serialization.load_pem_private_key(
        key_file.read(),
        password=None,
        backend=default_backend()
    )

# 准备 JWT 头部和负载
issuer_id = "你的issure_id"
key_id = "你的私钥id"
audience = "appstoreconnect-v1"
bid = "你的app的bundle id"
# 设置北京时区
beijing_tz = pytz.timezone('Asia/Shanghai')
# 获取当前时间的北京时间表示
now_in_beijing = datetime.datetime.now(beijing_tz)
# 设置 JWT 过期时间为当前时间后1小时(北京时间)
expiration_time = now_in_beijing + datetime.timedelta(hours=1)
# 转换为 UTC 时间戳
exp_timestamp = int(expiration_time.astimezone(pytz.utc).timestamp())
iat_timestamp = int(now_in_beijing.astimezone(pytz.utc).timestamp())
headers = {
    "alg": "ES256",
    "kid": key_id,
    "typ": "JWT"
}

payload = {
    "iss": issuer_id,
    "iat": iat_timestamp,
    "exp": exp_timestamp,
    "aud": audience,
    "bid": bid
}

# 使用 ES256 算法和私钥签名 JWT
encoded_jwt = jwt.encode(
    payload,
    private_key,
    algorithm="ES256",
    headers=headers
)

print(encoded_jwt)