#php #authentication #google-oauth #service-accounts
#php #аутентификация #google-oauth #сервисные учетные записи
Вопрос:
Я бьюсь головой о стену, пытаясь заставить мой код работать. Я уже успешно подключился к Google Api, используя маршрут аутентификации с URL-адресом перенаправления.
Однако мне нужно, чтобы это работало как отдельная служба, которая будет запущена в crontab.
Итак, теперь я пытаюсь пройти аутентификацию с помощью «учетной записи службы».
Это мой код, и ниже вы найдете ошибку, которую он мне выдает.
$client = new Google_Client();
$client->setApplicationName('GoogleShoppingService');
if (isset($_SESSION['service_token'])) {
$client->setAccessToken($_SESSION['service_token']);
}
$service = new Google_Service_Content($client);
$client_id = 'xxxxxxx.apps.googleusercontent.com';
$client->setClientId($client_id);
$service_account_name = 'xxxxxxx@developer.gserviceaccount.com';
$key_file_location = 'privatekey.p12';
$key = file_get_contents($key_file_location);
$scope = 'https://www.googleapis.com/auth/content';
$cred = new Google_Auth_AssertionCredentials(
$service_account_name,
array($scope),
$key
);
$result = $client->setAssertionCredentials($cred);
print_r($result);
if($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}
$_SESSION['service_token'] = $client->getAccessToken();
echo $client->getAccessToken();
$merchantId = 1234567;//this a dummy value, I replace it with the actual merchantId
$accountId = 1234567;//this a dummy value, I replace it with the actual accountId
$accountstatuses = $service->accountstatuses->get($merchantId,$accountId);
Итак, это сообщение, которое я получаю при запуске кода. (обратите внимание, что токен создан, но я не могу получить доступ к содержимому ленты покупок Google.)
{"access_token":"ya29.NQD7MQz0cas9PhoAAADRPMlTVecqYXYh4fNoZfRMymQtSF4hwqJn31uobohLbw","expires_in":3600,"created":1404200605}
Fatal error:
Uncaught exception 'Google_Service_Exception' with message 'Error calling GET https://www.googleapis.com/content/v2/1234567/accountstatuses/1234567: (401) User cannot access account 1234567' in /home/sites/site1/web/googleShopping2/src/Google/Http/REST.php:79
Stack trace:
#0 /home/sites/site1/web/googleShopping2/src/Google/Http/REST.php(44): Google_Http_REST::decodeHttpResponse(Object(Google_Http_Request))
#1 /home/sites/site1/web/googleShopping2/src/Google/Client.php(499): Google_Http_REST::execute(Object(Google_Client), Object(Google_Http_Request))
#2 /home/sites/site1/web/googleShopping2/src/Google/Service/Resource.php(195): Google_Client->execute(Object(Google_Http_Request))
#3 /home/sites/site1/web/googleShopping2/src/Google/Service/Content.php(685): Google_Service_Resource->call('get', Array, 'Google_Service_...')
#4 /home/sites/site1/web/googleShopping2/examples/test.php(58): Google_Service_Content_Accountstatuses_Resource->get(1234567, 1234567)
#5 {main} thrown in /home/sites/site1/web/googleShopping2/src/Google/Http/REST.php on line 79
Я уже пытался найти решение в течение 2 дней, но любой намек, который я нашел, мне не помогает. Я также создал новый проект с новыми ключами аутентификации Api, но ничего не работает, и я всегда получаю вышеупомянутое сообщение.
Кто может мне помочь, пожалуйста?
С уважением, Мартин
Ответ №1:
Вам необходимо добавить адрес электронной почты учетной записи службы, которую вы создали, в учетную запись Google Merchant в разделе Настройки> Пользователь.
Ответ №2:
Вкл https://merchants.google.com /
- В правом верхнем углу нажмите на значок шестеренки, то есть настройки.
- нажмите на доступ к учетной записи
- нажмите добавить пользователя
- добавьте адрес электронной почты, который вы получили из учетной записи сервиса.файл json. (это там, внутри)
- убедитесь, что для добавленного пользователя установлено значение admin.