2014-11-29 1 views
6

Когда пользователь входит в систему, я хочу проверить, установлено ли в вашем домене приложение Marketplace. Похоже, это теоретически возможно с Marketplace License API endpoints.Определите, установлено ли в домене пользователя Google мое приложение на рынке.

Однако, когда я пытаюсь использовать «Попробовать сейчас» функцию для Customer License, User License или License Notification конечных точек, я всегда получаю 403 Forbidden с сообщением «Не разрешен доступ к идентификатор приложения».

Например, если я пытаюсь запросить LicenseNotification конечную точку, я следующее:

Нажмите на тумблер Authorize и нажмите кнопку «Авторизовать», чтобы разрешить эту сферу для моего зарегистрированного пользователя (который является Google Apps Admin, которому принадлежит приложение, кстати).

Для applicationId я затем вводю 12-значное поле «Идентификатор приложения» из настроек SDK Google Apps Marketplace на старой консоли разработчиков (также известен как номер проекта на странице обзора приложений консоли разработчиков).

Когда я нажимаю «Выполнить», я получаю 403 «Неавторизованный доступ к идентификатору приложения». Я также попытался использовать идентификатор проекта (то есть «my-app» на странице «Обзор консоли разработчиков») вместо идентификатора проекта/идентификатора приложения и получить тот же ответ.

Я что-то упустил?

В противном случае, если кто-то знает о другом способе для владельца приложения GAM запросить список доменов, которые он установил, это было бы идеальным решением для меня - я не мог найти ничего подобного.

ответ

6

Хорошо, прочитайте еще немного и понял это в конце концов.

Отсутствие информации о том, что для проверки подлинности конечных точек лицензирования требуется использовать Service Account, а не обычную учетную запись пользователя. Что имеет смысл, почему функция «Попробовать сейчас» на страницах документации не работает вообще.

К сожалению, мы используем PHP, а google-api-php-client еще не имеет служб для API лицензирования. Тем не менее, проект клиента показывает an example использования учетной записи службы вместо обычного потока OAuth2 пользователя.

Я использовал этот пример, и украл немного исходный код из call метода Resource.php «s вызвать Customer License endpoint, чтобы проверить, если домен имеет установленные наше приложение или нет:

$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 в конечном итоге добавят истинную услугу для этих конечных точек, но пока это обходное решение не слишком ужасно болезненно.

+0

Мне нужно было авторизовать учетную запись службы как-то? Я до сих пор получаю эту неприятную ошибку. Спасибо. –

+0

Человек, это было так долго, я больше не могу вспомнить. Надеюсь, вы поняли это! – brettjonesdev

+1

Я продолжал получать 403: Запрещено. В соответствии с этим [ответом] (http://stackoverflow.com/a/20786740/126183), что, наконец, работало для меня, было в консоли разработчика, чтобы добавить API Marketplace, а не только Marketplace SDK –

0

Лицензирование API может помочь вам получить информацию, которую нужно https://developers.google.com/google-apps/marketplace/v2/developers_guide

+2

Да, это конечные точки лицензии клиента/пользователя, на которые я ссылаюсь в своем вопросе. Однако, как я уже упоминал, когда я пытаюсь запросить этот API из своей функции API Explorer на странице, я продолжаю получать 403. Кроме того, к сожалению, похоже, что в проекте google-api-php-client отсутствуют эти конечные точки целиком , :( – brettjonesdev

Смежные вопросы