You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS Lambda Python中无需google-api-python-client认证Google Play购买API

解决Google Play API 401未授权问题(无需google-api-python-client)

1. 准备服务账号核心信息

从Google Cloud控制台下载的服务账号JSON密钥文件中,提取private_key、client_email字段,同时记住Google的令牌请求地址https://oauth2.googleapis.com/token。将这些信息配置到AWS Lambda的环境变量中(避免硬编码)。

2. 生成JWT认证令牌

使用轻量库pyjwt生成JWT(该库体积极小,不会触发Lambda包体积限制),要指定正确的API权限范围https://www.googleapis.com/auth/androidpublisher:

import jwt
import time
import os
import requests
import logging

# 从环境变量读取服务账号信息
private_key = os.environ.get('GOOGLE_SERVICE_ACCOUNT_PRIVATE_KEY')
client_email = os.environ.get('GOOGLE_SERVICE_ACCOUNT_CLIENT_EMAIL')
token_uri = 'https://oauth2.googleapis.com/token'
google_verify_purchase_endpoint = os.environ.get('GOOGLE_VERIFY_PURCHASE_ENDPOINT')

def generate_jwt():
    # JWT有效期设为1小时(Google要求不超过此时长)
    expiry_time = int(time.time()) + 3600
    payload = {
        'iss': client_email,
        'scope': 'https://www.googleapis.com/auth/androidpublisher',
        'aud': token_uri,
        'exp': expiry_time,
        'iat': int(time.time())
    }
    # 用RS256算法生成JWT
    return jwt.encode(payload, private_key, algorithm='RS256')

3. 获取OAuth2访问令牌

用生成的JWT向Google令牌地址请求可直接使用的访问令牌:

def get_access_token():
    jwt_token = generate_jwt()
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    request_data = {
        'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer',
        'assertion': jwt_token
    }
    response = requests.post(token_uri, headers=headers, data=request_data)
    response.raise_for_status()
    return response.json()['access_token']

4. 带令牌调用购买验证API

将访问令牌放入请求头的Authorization字段,再发起GET请求:

def verify_purchase(product_id, token):
    access_token = get_access_token()
    url = f"{google_verify_purchase_endpoint}/{product_id}/tokens/{token}"
    headers = {'Authorization': f'Bearer {access_token}'}
    
    response = requests.get(url, headers=headers)
    response.raise_for_status()
    data = response.json()
    logging.info(f"Response from Google Play API : {data}")
    return data

关键注意点

  • 必须将服务账号添加到Google Play Console的开发者权限列表中,角色至少设置为「查看者」(建议设为「开发者」以确保权限足够)。
  • 打包Lambda代码时,仅需安装pyjwt和requests两个依赖,总体积远低于250MB限制。
  • 可将访问令牌缓存到Lambda内存中(有效期设为50分钟左右),避免每次请求都重新生成令牌,提升效率。

内容的提问来源于stack exchange,提问作者Tom3652

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:52:14