使用AppsScript调用Google Marketplace API获许可数据遇403权限问题求助
针对你遇到的调用Google Marketplace API获取许可数据时返回403错误的问题,可按以下步骤排查解决:
1. 确认应用ID完全匹配
确保API请求中使用的applicationId是Google Marketplace控制台中你的应用对应的数字ID(即你上线应用URL中的977246938879),而非GCP项目ID或其他标识。代码中硬编码或传入的ID必须与Marketplace后台的应用ID完全一致。
2. 校验权限范围与授权方式
- 权限范围:确认已添加正确的API权限范围,获取许可数据需使用
https://www.googleapis.com/auth/appsmarketplace.license或https://www.googleapis.com/auth/appsmarketplace.license.readonly,不要添加无关范围。 - 域级授权:由于是同域表格的AppsScript,需通过Google Workspace Admin控制台配置域级委派,允许你的应用访问域内许可数据,而非仅依赖个人OAuth授权(普通用户无此权限)。同时在GCP IAM中,确保运行脚本的账号(或服务账号)被授予查看Marketplace许可的权限。
3. 验证调用身份的权限
- 运行脚本的账号必须是Google Workspace域管理员,或被明确授予了查看Marketplace应用许可数据的权限,普通域用户调用会触发403错误。
- 若使用服务账号调用,需在GCP创建服务账号并下载密钥,通过OAuth2库实现服务账号授权,同时在Workspace Admin控制台为该服务账号配置域级委派,指定所需的权限范围。
4. 检查Marketplace SDK配置
- 确认GCP中启用Marketplace API和SDK的项目,与你发布Marketplace应用时关联的项目是同一个。
- 进入Marketplace SDK配置页面,检查API访问设置,确保允许当前项目的API请求访问应用的许可数据。
5. 调试API请求细节
- 打印API请求的完整URL和请求头,确认
applicationId在请求路径中正确(例如GET https://www.googleapis.com/appsmarket/v2/customer/{你的域}/license/{应用ID})。 - 使用GCP的API Explorer测试调用:以域管理员身份授权,直接发起请求,若能成功返回数据,说明问题出在AppsScript的授权逻辑或代码中;若仍失败,则需重新检查应用配置或权限设置。
示例代码(服务账号授权方式)
function getUsers() { const APP_ID = '977246938879'; const DOMAIN = '你的域名.com'; const oauthService = getMarketplaceOAuthService(); if (!oauthService.hasAccess()) { throw new Error('授权失败: ' + oauthService.getLastError()); } const apiUrl = `https://www.googleapis.com/appsmarket/v2/customer/${DOMAIN}/license/${APP_ID}/users`; const options = { headers: { Authorization: `Bearer ${oauthService.getAccessToken()}` } }; const response = UrlFetchApp.fetch(apiUrl, options); return JSON.parse(response.getContentText()); } function getMarketplaceOAuthService() { const SERVICE_ACCOUNT_KEY = { "type": "service_account", "project_id": "你的GCP项目ID", "private_key_id": "你的私钥ID", "private_key": "-----BEGIN PRIVATE KEY-----\n你的私钥内容\n-----END PRIVATE KEY-----\n", "client_email": "你的服务账号邮箱", "client_id": "你的服务账号客户端ID", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "你的服务账号证书URL" }; return OAuth2.createService('MarketplaceLicense') .setTokenUrl(SERVICE_ACCOUNT_KEY.token_uri) .setPrivateKey(SERVICE_ACCOUNT_KEY.private_key) .setIssuer(SERVICE_ACCOUNT_KEY.client_email) .setSubject('admin@你的域名.com') // 域管理员邮箱 .setPropertyStore(PropertiesService.getScriptProperties()) .setScope('https://www.googleapis.com/auth/appsmarketplace.license.readonly'); }
注意:使用此代码前需在AppsScript中安装OAuth2库(库ID:1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF)。
内容的提问来源于stack exchange,提问作者Andy Evans
相关产品推荐
相关产品推荐

