用户登录后,我要检查其域是否安装了我的Marketplace应用。从理论上讲,这可以通过Marketplace License API端点来实现。
但是,每当我尝试对“客户许可证”,“用户许可证”或“许可证通知”端点使用“立即尝试”功能时,始终会收到“ 403禁止访问”,并显示消息“未授权访问应用程序ID”。
例如,如果我尝试查询LicenseNotification端点,请执行以下操作:
单击“授权”切换,然后单击“授权”以为我的登录用户(拥有该应用程序的Google Apps Admin帐户,btw)授权该范围。
对于applicationId
,然后在旧的开发人员控制台的Google Apps Marketplace SDK设置中输入12位的“应用程序ID”字段(在新的开发人员控制台应用程序概述页面中也称为项目编号)。
当我单击执行时,我得到403“未授权访问应用程序ID”。我还尝试使用我的项目ID(即开发者控制台概述页面中的“ my-app”)代替项目编号/应用ID,并得到相同的响应。
我在这里想念什么吗?
另外,如果有人知道让GAM应用程序拥有者查询已安装域的列表的另一种方式,那对我来说也是一个理想的解决方案-我找不到这样的东西。
好吧,请阅读更多内容并最终弄明白了。
我所缺少的是以下事实:授权端点的身份验证要求您使用服务帐户,而不是常规用户帐户。这就是为什么文档页面上的“立即尝试”功能根本不起作用的原因。
不幸的是,我们使用PHP,而google-api-php-client尚不提供许可API的服务。但是,客户端项目确实显示了使用服务帐户而非普通用户OAuth2流的示例。
我使用了这个示例,并从Resource.php的call
方法中窃取了一些源代码来调用Customer License端点,以检查域是否安装了我们的应用程序:
$privateKey = file_get_contents('path/to/private-key.p12');
$serviceAccountName = '[email protected]';
$cred = new \Google_Auth_AssertionCredentials(
$serviceAccountName,
array('https://www.googleapis.com/auth/appsmarketplace.license'),
$privateKey
);
$client = new \Google_Client();
$client->setApplicationName('Apps_Marketplace_Licensing_Check');
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}
$url = \Google_Http_REST::createRequestUri(
'appsmarket/v2/',
'customerLicense/{appId}/{customerId}', [
'appId' => ['location' => 'path', 'type' => 'string', 'value' => $appId],
'customerId' => ['location' => 'path', 'type' => 'string', 'value' => $domain]
]
);
$httpRequest = new \Google_Http_Request($url, 'GET');
$httpRequest->setBaseComponent($client->getBasePath());
$httpRequest = $client->getAuth()->sign($httpRequest);
/* returns JSON array */
$result = $client->execute($httpRequest);
$isDomainInstalled = ($result && isset($result['state']) && $result['state'] == 'ACTIVE');
希望google-api-php-client项目的人们最终会为这些端点添加真正的服务,但是就目前而言,这种解决方法还不是很痛苦。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句