Google Merchant API 认证与 GCP 项目配置指南:IAM 发证、registerGcp 注册与零停机切换
Google Merchant API 认证与 GCP 项目配置指南:IAM 发证、registerGcp 注册与零停机切换
迁移注意:仅在 GMC 添加服务账号已无法通过认证
在旧版 Content API for Shopping 中,开发者可以直接在 Merchant Center 后台进入「设置 -> Content API -> 身份验证」,一键生成 JSON 密钥并调通接口。
升级到 Merchant API 后,Google 按照《Configure API authentication from Merchant Center》与《Manage and transition GCP projects》两份规范调整了认证架构:
- GMC 后台移除了直接生成 API 密钥的按钮。新建服务账号(Service Account)、配置 OAuth 2.0 客户端以及启用
merchantapi.googleapis.com服务,全部移交 Google Cloud Console(GCP 控制台)管理。 - 新增强制执行的
developerRegistration:registerGcp注册步骤。即使服务账号已在 GMC 拥有管理员权限,只要所属 GCP 项目未调用registerGcp完成开发者绑定,所有业务请求都会返回401 UNAUTHENTICATED。
Google Merchant API 迁移系列导航
- 系列一(架构与停用时间表):《Google Merchant API 架构解析:取代 Content API for Shopping、2026 停用时间表与模块化升级指南》
- 系列二(迁移排期与读写分离):《Google Merchant API 迁移手册(Start Your Migration):子 API 排期、ProductInput 读写分离与防 Offer Stealing 指南》
- 系列三(本篇,认证与 GCP 架构):《Google Merchant API 认证与 GCP 项目配置指南:IAM 发证、registerGcp 注册与零停机切换》
- 系列四(高并发与配额治理):《Google Merchant API 高并发代码重构:替代 custombatch、突破 gRPC 100 并发流限制与动态配额治理》
第一章:存量密钥复用与 GCP 新凭证配置流程
旧版 GMC 后台创建的 Service Account JSON 密钥仍然有效,可以直接复用。你只需在该密钥所属的 GCP 项目中补做两步:启用 Merchant API 服务,再执行一次 registerGcp 注册。
如果要为新独立站或新 ERP 服务创建认证凭证,请按 Google Cloud Console 的 4 个步骤操作:
| 配置步骤 | 操作位置与命令 | 必备权限(IAM Role / GMC Access)与注意事项 |
|---|---|---|
| Step 1:定位或新建 GCP 项目 | 打开 Google Cloud Console。若历史项目由 GMC 自动生成,可在项目下拉框勾选组织,查找名称类似 Content API for Shopping 的关联项目。 | 建议生产环境建立独立命名的项目(如 prod-evaoo-merchant-api),方便监控配额与安全审计。 |
Step 2:启用 merchantapi.googleapis.com | 在「APIs & Services > Library」搜索 Merchant API 并点击 Enable,或运行 gcloud services enable merchantapi.googleapis.com。 | 操作人需具备 GCP 项目的 roles/owner、roles/editor 或 roles/serviceusage.serviceUsageAdmin 角色。 |
| Step 3:创建服务账号或 OAuth 2.0 凭证 | 服务端脚本推荐使用 Service Account 若部署在 Cloud Run 或 GKE,优先使用 Workload Identity 免去静态密钥文件。面向外部商家的 SaaS 应用使用 OAuth 2.0 Web Client。 | 统一使用 OAuth Scope https://www.googleapis.com/auth/content。该 Scope 与旧版一致,商家已授权的 Refresh Token 无需重新弹窗授权。 |
| Step 4:将服务账号加入 GMC 用户列表 | 复制格式如 [email protected] 的服务账号邮箱,进入 GMC Next 后台「设置 > 访问权限和账号(Access and services)> 用户」添加该邮箱。 | 首次执行 registerGcp 注册或管理账户设置时,必须分配 Admin(管理员)角色。日常商品读写可按最小权限原则分配 Standard。 |
第二章:developerRegistration:registerGcp 前置条件与排障
启用 API 并配置好 GMC 用户权限后,你需要使用该 GCP 项目的凭证发起一次开发者注册请求。你可以在下方的 GCP 认证架构与错误码排障模拟器中选择实际场景(单独立站直连、MCA 代理商多子账户、双 GCP 零停机切换、401 与 409 报错自检),生成对应的执行命令:
Merchant API 开发者注册(registerGcp)与 GCP 项目架构决策沙盒
选择你的团队权限现状,获取零停机 GCP 绑定与认证迁移执行剧本
方案二:旧项目跑 Content API(保延期)+ 新项目跑 Merchant API
适用于旧 GCP 项目管理员离职失联,或希望将新一代微服务架构彻底隔离到全新 GCP 项目的团队。注意:Content API 延期豁免严格绑定旧 GCP Project ID,绝不可把旧请求切到未获豁免的新项目!
- 保持旧 GCP 项目不动,继续承接尚未迁移完的 Content API 流量(享受延期保护)
- 新建专属 GCP 项目 -> 启用 merchantapi.googleapis.com -> 创建新 Service Account / OAuth 凭证
- 将新 Service Account 邮箱添加为主 GMC 账号的 ADMIN 用户
- 用新项目 Token 调用 registerGcp(主 GMC 支持一对多同时挂载新旧多个 GCP 项目)
# Verify all GCP project numbers currently linked to your primary GMC:
GET https://merchantapi.googleapis.com/accounts/v1/accounts/4321009/developerRegistration
Authorization: Bearer {NEW_PROJECT_ACCESS_TOKEN}
# Expected Response (multiple simultaneous GCP projects supported):
{
"name": "accounts/4321009/developerRegistration",
"gcpIds": ["123456789012", "987654321098"]
}2.1 调用 registerGcp 的 5 项前置条件
缺少以下任一条件,注册请求都会失败:
- 使用正式生产 GMC 账号(Production Account Only):旧版遗留的测试沙盒账号(Test Accounts)不支持调用
registerGcp。 - 完成网站声明与验证(Verified & Claimed Website):未绑定有效独立站域名的空壳 GMC 账号无法通过校验。关于第一方域名与代码信号配置,可参考 《Google 官方数据优势最佳实践(Data Strength)》。
- 调用方在目标 GMC 具备
ADMIN角色:Standard权限用户调用registerGcp会触发403 PERMISSION_DENIED。 developerEmail填写真人或团队 Google 账号邮箱:请求体中的{"developerEmail": "[email protected]"}用于接收 API 破坏性变更、配额告警与合规通知。严禁填写以.gserviceaccount.com结尾的服务账号邮箱,否则接口直接返回400 INVALID_ARGUMENT。- 预留 5 分钟生效延迟与 14 天邮件确认窗口:
registerGcp返回200 OK后,全球网关路由同步约需 5 分钟,建议脚本等待 5 分钟后再启动大规模商品同步。若填入的developerEmail尚非该 GMC 账号成员,系统会发送关联邀请邮件,收件人必须在 14 天内点击接受验证。
2.2 registerGcp 请求与响应示例
| 1 | # 使用关联目标 GCP 项目的管理员 OAuth Token 发起一次性注册 |
| 2 | curl -X POST "https://merchantapi.googleapis.com/accounts/v1/accounts/123456789/developerRegistration:registerGcp" -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" -H "Content-Type: application/json" -d '{ |
| 3 | "developerEmail": "[email protected]" |
| 4 | }' |
调用成功后,接口会返回 DeveloperRegistration 资源对象,其中包含已绑定的 gcpIds 项目编号列表。此后你可随时请求 GET https://merchantapi.googleapis.com/accounts/v1/accounts/123456789/developerRegistration 核验注册状态。
第三章:绑定配比规则:1 GMC : N GCP 与 1 GCP : 1 主 GMC
拥有多个品牌 GMC 的集团卖家,或管理上百个客户 GMC 的代投机构,在设计云架构时常遇到 409 ALREADY_EXISTS (DUPLICATE_PROJECT_REGISTRATION) 报错。设计前需明确以下两条绑定规则:
| 绑定方向 | 官方配比上限 | 架构含义与工程实践 |
|---|---|---|
| 正向:1 个主 GMC 账号绑定多个 GCP 项目 | 支持 1 : N(一对多) | 可将集团的 ERP 库存同步服务(GCP 项目 A)、BI 报表数仓服务(GCP 项目 B)与 AI 巡检 MCP 服务(GCP 项目 C)同时注册到同一个主 GMC 账号下,隔离微服务配额并缩小密钥泄露影响范围。 |
| 反向:1 个 GCP 项目注册到多个 GMC 账号 | 仅限 1 : 1(一对一主账号) | 1 个 GCP 项目同一时刻只能注册到 1 个顶级 GMC 账号(Standalone 独立账号或 MCA 高级父账号)。用同一个 GCP 项目向第二个 GMC 账号调用 registerGcp,会直接返回 409 DUPLICATE_PROJECT_REGISTRATION。 |
3.1 多子品牌集团与多租户 SaaS 的架构方案
管理数十个子品牌或服务上百个商家客户时,不要新建上百个 GCP 项目,也严禁对 MCA 子账户(Sub-account)调用 registerGcp。官方推荐以下两种多租户架构:
- 多品牌集团、CSS 与代投机构(MCA 高级账户模式):只需将 1 个核心 GCP 项目注册到集团顶层的 MCA(Multi-Client Account,多客户高级父账户)上。注册完成后,该 GCP 项目的凭证即可直接读写该 MCA 下的全部子账户(例如直接请求
accounts/{SUB_ACCOUNT_ID}/productInputs:insert),无需也不能对子账户单独执行registerGcp。 - 第三方电商 SaaS 插件与 ERP 服务商(OAuth 跨租户授权模式):将 SaaS 官方 GCP 项目注册到你公司自己的主开发者 GMC 账号上,建立平台级开发者身份,并在合作伙伴属性中按实际角色声明为 Marketplace、Agency、CSS、Brand 或 POS 集成商。随后通过标准 OAuth 2.0 授权流,或让外部商家将你的服务账号加入其 GMC 用户列表,这 1 个已注册的 GCP 项目即可访问外部授权商家的 GMC 数据,无需调用外部商家账号的
registerGcp。
第四章:大型团队双 GCP 零停机切换与解绑方案
如果线上 Content API 仍运行在历史遗留的旧 GCP 项目中,你可以趁本次升级迁移到权限清晰的新 GCP 项目,同时保持线上广告与库存同步零中断。Google 官方文档《Manage and transition GCP projects》提供了两种迁移路径与两个排障接口。
4.1 两种 GCP 迁移方案选型
- 方案一:原地升级(Keep Existing GCP Project)。适合现有 GCP 项目归属清晰、IAM 权限受控的团队。直接在原项目开启
merchantapi.googleapis.com并执行registerGcp,新旧代码共用同一个 GCP 项目并行过渡,改动最小。 - 方案二:双 GCP 隔离切换(Dual-GCP Zero-Downtime Cutover)。适合大型卖家按模块灰度迁移,分为 4 步:
- 保留旧 GCP 项目不动,继续运行存量 Content API v2.1 任务若复杂场景需申请过渡支持,旧项目标识也保持不变。
- 新建生产级 GCP 项目,开启 Merchant API,配置最小权限服务账号,并将新 GCP 项目调用
registerGcp注册到主 GMC 账号。 - 按模块灰度切流,依次将商品更新、库存同步和报表拉取切往新 GCP 项目。客户端埋点可同步参考 《Google Tag 与 GTM 架构重构指南》 与 追踪与归因专栏。
- 待旧 GCP 项目的 Content API 流量降为 0 后,停用旧密钥并下线旧项目。
4.2 绑定关系反查与安全解绑接口
联调遇到 409 DUPLICATE_PROJECT_REGISTRATION 却不确定当前 GCP 项目绑定了哪个 GMC 账号时,可使用以下两个接口处理:
- 反查绑定关系:请求
GET https://merchantapi.googleapis.com/accounts/v1/accounts:getAccountForGcpRegistration,无需传入 Account ID。网关会根据当前请求凭证所属的 GCP 项目,直接返回已绑定的主 GMC 账号资源名(如accounts/99887766)。 - 安全解绑与 24 小时缓冲期(
unregisterGcp):若需将 GCP 项目从旧 GMC 主账号迁往新 GMC 主账号,先对旧账号调用POST .../accounts/{OLD_ID}/developerRegistration:unregisterGcp。解绑后系统提供约 1 天(24 小时)的缓冲宽限期,防止在途请求突然报错,同时立即释放该 GCP 项目以绑定新主账号。
下一篇:完成认证配置后,若需在大促期间每分钟更新 60,000 个 SKU 的价格与库存,请继续阅读系列第四篇 《Google Merchant API 高并发代码重构:替代 custombatch、突破 gRPC 100 并发流限制与动态配额治理》,了解 custombatch 下线后的并发池与动态配额方案。
觉得本文有启发?一键复制标准引用摘要
自带原文归因链接与核心摘要,可直接粘贴至团队飞书/Slack 知识库、技术周报或大模型上下文。