此处的当前代码:
SCOPES = [
'https://www.googleapis.com/auth/appsmarketplace.license'
]
def getAppService():
CREDENTIALS_ = appengine.AppAssertionCredentials(scope=SCOPES)
http = httplib2.Http(memcache)
http = CREDENTIALS_.authorize(http)
service = discovery.build(serviceName = 'appsmarket', version='v2', http=http)
return service
def getLicenseNotifications():
service = getAppService()
ret = service.licenseNotification().list(applicationId='THE_PROJECT_ID_NUMBER', timestamp=0, max_results=10).execute()
logging.debug(ret)
return ret
但它获得了403"未授权访问应用程序ID"。此代码作为默认的内置服务帐户从GAE项目调用,在同一项目下,与市场应用程序的manifest.json api_console_project_id字段完全相同的项目ID。
我确实搜索了错误消息,但得到了不相关的信息。
" Google Apps Marketplace API"在开发者控制台中肯定是ON。
如果我更换' v2'到' v2sandbox',似乎超时然后报告后端错误。
任何帮助?
答案 0 :(得分:0)
我发现了问题,即GAE默认服务帐户,我认为市场api不支持。如果我创建一个独立的服务帐户并使用SignedJwtAssertionCredentials加载它,并使用唯一的许可证范围,它可以工作。所以merketplace api不支持GAE默认服务帐户。
对于谷歌应用安装应用,它已经授予应用以域的任何用户访问指定的范围。但是我们需要添加一个" sub =" SignedJwtAssertionCredentials init param中的param告诉库我们想要充当哪个域用户。所以,通过这个,只要我们知道一个域的管理员用户,那么我们就可以充当用户访问目录api而无需弹出任何auth屏幕给最终用户。默认GAE服务帐户也不支持此功能。