如何通过 Google Apps API 获取订阅详情?
结论
普通 Google Workspace(原 Google Apps)管理员无法通过公开的管理 API 获取完整的订阅信息,包括续订日期、付款记录、账单金额和付款方式。
Reseller API 能查询订阅及续订相关字段,但只适用于经销商管理的客户订阅。域超级管理员不会因此自动获得访问权限。如果订阅是直接向 Google 购买的,这些信息通常只能在 Google 管理控制台的”结算”页面查看。
实际可以采用以下方案:
- 通过管理 API 监控用户数量和许可证分配情况。
- 由管理员配置续订日期,或者从内部采购、合同系统同步。
- 在管理控制台中查看账单详情。
- 如果订阅由经销商管理,请经销商调用
Reseller API或提供相应的数据接口。
为什么其他管理 API 查不到
Google Workspace 的管理接口各有用途:
- Admin SDK Directory API 用于管理用户、群组和组织单位等目录数据。
- Enterprise License Manager API 用于查询和管理用户的许可证分配。
- Reports API 用于审计和使用情况报告。
- Reseller API 用于管理经销商客户的订阅。
- 付款方式、发票和交易记录等结算数据不属于普通 Admin SDK 的公开资源。
Enterprise License Manager API 可以统计已分配的许可证,但不会返回续订日期、账单金额或付款记录。已分配的许可证数量也不一定等于合同购买数量,因为可能还有许可证尚未分配。
问题中提到的 Admin Settings API 及其 MaximumNumberOfUsers、CurrentNumberOfUsers 字段属于旧接口,不适合作为新工具的长期依赖。应根据实际订阅模式,优先使用 Directory API、许可证分配数据和管理员维护的合同上限。
建议的实现方式
监控所需的数据可以分别获取:
- 通过 Directory API 统计域内用户。
- 从配置文件、数据库或采购系统读取订阅上限和续订日期。
- 如果能够访问许可证分配信息,再用 Enterprise License Manager API 核对已分配的许可证数量。
- 当用户数量达到阈值或续订日期临近时发送告警。
例如,可以把合同数据保存在内部配置中:
{
"licensed_user_limit": 500,
"renewal_date": "2026-12-31",
"user_warning_ratio": 0.9,
"renewal_warning_days": 30
}
下面的 Python 示例只演示告警判断逻辑。current_users 应根据 Directory API 的分页查询结果计算;订阅上限和续订日期来自内部配置,不是 Google 的账单 API:
from datetime import date, datetime
subscription = {
"licensed_user_limit": 500,
"renewal_date": "2026-12-31",
"user_warning_ratio": 0.9,
"renewal_warning_days": 30,
}
current_users = 456
limit = subscription["licensed_user_limit"]
usage_ratio = current_users / limit
if usage_ratio >= subscription["user_warning_ratio"]:
print(
f"用户数量告警:{current_users}/{limit},"
f"使用率为 {usage_ratio:.1%}"
)
renewal_date = datetime.strptime(
subscription["renewal_date"], "%Y-%m-%d"
).date()
days_until_renewal = (renewal_date - date.today()).days
if 0 <= days_until_renewal <= subscription["renewal_warning_days"]:
print(
f"续订告警:订阅将在 {days_until_renewal} 天后续订,"
f"续订日期为 {renewal_date.isoformat()}"
)
统计 Directory API 返回的用户列表时,必须处理分页,不能只计算第一页。可以按以下方式累计:
current_users = 0
page_token = None
while True:
response = directory_service.users().list(
customer="my_customer",
maxResults=500,
pageToken=page_token,
orderBy="email"
).execute()
current_users += len(response.get("users", []))
page_token = response.get("nextPageToken")
if not page_token:
break
使用 Reseller API 的前提
只有当订阅确实由具备相应权限的 Google Workspace 经销商管理,而且调用身份符合 Reseller API 的授权要求时,才能通过该 API 查询订阅资源。普通客户无法仅凭超级管理员权限绕过这项限制。
如果域是通过经销商购买的,可以询问经销商能否:
- 提供订阅数量和续订日期;
- 定期导出订阅数据;
- 提供 Webhook 或内部 API;
- 代为发送续订提醒。
注意事项
- “域内用户数”、“已分配许可证数”和”购买的许可证数”是三个不同的指标,不能混用。
- 暂停用户、归档用户、Cloud Identity 用户,以及不同 SKU 的许可证计算方式可能不同。
- 弹性方案不一定有传统意义上的固定续订日。年度或定期方案更适合按照合同日期设置提醒。
- 自动续订日期、合同终止日期和下一次扣款日期可能并不相同。
- 不要抓取管理控制台网页来获取账单数据。页面结构可能变化,也难以保证授权、安全性和稳定性。
- 如果续订日期由内部配置维护,还应记录数据来源和最后确认时间,以免合同变更后仍在使用过期数据。
备注:内容仅供参考。
