1. 所需python库
- cryptography
- jwt
- pytz
2. 所需苹果后台能找到的数据
- app对应的bundleid
- app内购私钥ID
- app内购私钥文件
- app内购的issureID
bundleID 相信大家都知道怎么获取
其它的三项获取位置如下
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)