PAYATHON 2026

如何通过 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、许可证分配数据和管理员维护的合同上限。

建议的实现方式

监控所需的数据可以分别获取:

  1. 通过 Directory API 统计域内用户。
  2. 从配置文件、数据库或采购系统读取订阅上限和续订日期。
  3. 如果能够访问许可证分配信息,再用 Enterprise License Manager API 核对已分配的许可证数量。
  4. 当用户数量达到阈值或续订日期临近时发送告警。

例如,可以把合同数据保存在内部配置中:

{
  "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 的许可证计算方式可能不同。
  • 弹性方案不一定有传统意义上的固定续订日。年度或定期方案更适合按照合同日期设置提醒。
  • 自动续订日期、合同终止日期和下一次扣款日期可能并不相同。
  • 不要抓取管理控制台网页来获取账单数据。页面结构可能变化,也难以保证授权、安全性和稳定性。
  • 如果续订日期由内部配置维护,还应记录数据来源和最后确认时间,以免合同变更后仍在使用过期数据。

备注:内容仅供参考。