2013-02-20 2 views
2

Я пытаюсь понять, как использовать Google API PHP Client для доступа к Google Analytics. В частности, я хочу, чтобы upload cost data из других кампаний. Мой код действительно работает для получения информации от GA, я могу просматривать данные трафика для профилей, но я не могу понять, как загрузить.Google Analytics API 401 Недопустимые учетные данные

Вот код, который я использую для входа:

require_once 'google-api-php-client/src/Google_Client.php'; 
require_once 'google-api-php-client/src/contrib/Google_AnalyticsService.php'; 
session_start(); 

$client = new Google_Client(); 
$client->setApplicationName("GA-Tester"); 
$client->setClientId('xxx.apps.googleusercontent.com'); 
$client->setClientSecret('xxx'); 
$client->setRedirectUri('http://www.site.com/indext.php'); 
$client->setDeveloperKey('xxx'); 

$analyticsService = new Google_AnalyticsService($client); 
$dailyUploads = $analyticsService->management_dailyUploads; 

if (isset($_GET['logout'])) { 
    unset($_SESSION['token']); 
} 
if (isset($_GET['code'])) { 
    $client->authenticate(); 
    $_SESSION['token'] = $client->getAccessToken(); 
    $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; 
    header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL)); 
} 
if (isset($_SESSION['token'])) { 
    $client->setAccessToken($_SESSION['token']); 
} 
if (!$client->getAccessToken()) { 
    header ('Location:http://www.site.com/indext.php'); 
} else {... 

Этот код делает работу для запроса данных. Я могу получить список учетных записей, профилей, загружать данные трафика для определенного профиля и т. Д. Нет ошибок или проблем.

Когда я пытаюсь загрузить файл CSV, содержащий данные о стоимости, я получаю ошибку «401 Invalid Credentials». Вот код, который отправляет файл:

$send = $dailyUploads->upload(
    $accountId, 
    $webPropertyId, 
    $customDataSourceId, 
    $start_date, 
    1, 
'cost', 
    array(
    "reset" => true, 
    "data" => $cont, 
    "mimeType" => "application/octet-stream", 
    "uploadType" => "media")); 

Я проверил все мои переменные, которые я передаю, они посылают правильную информацию.

Итак, вот мой вопрос. Если все мои запросы GET работают без проблем, почему мой запрос POST выдает ошибку? Я не могу сказать, является ли это ошибкой с моим кодом или с настройками в API console. Может ли кто-нибудь направить меня в правильном направлении?

EDIT: Приведен код ошибки (минус идентифицируемые биты).

Fatal error: Uncaught exception 'Google_ServiceException' with message 
'Error calling POST https://www.googleapis.com/upload/analytics/v3/man 
agement/accounts/1234567/webproperties/UA-1234567-1/customDataSources/ 
xXxXxX/dailyUploads/2013-01-17/uploads?appendNumber=1&type=cost&reset= 
true&uploadType=media&key=xXxXxX: (401) Invalid Credentials' in /../pub 
lic_html/proj/google-api-php-client/src/io/Google_REST.php:66 Stack tra 
ce: #0 /../public_html/proj/google-api-php-client/src/io/Google_REST.ph 
p(36): Google_REST::decodeHttpResponse(Object(Google_HttpRequest)) #1/
../public_html/proj/google-api-php-client/src/service/Google_ServiceRes 
ource.php(186): Google_REST::execute(Object(Google_HttpRequest)) #2 /.. 
/public_html/proj/google-api-php-client/src/contrib/Google_AnalyticsSer 
vice.php(82): Google_ServiceResource->__call('upload', Array) #3 /../pu 
blic_html/proj/dailyUpload_send.php(60): Google_ManagementDailyUploadsS 
erviceResource->upload('1234567', 'UA-1234567-1', 'xXxXxXxXxXxXxXx...', 
' in /../public_html/proj/google-api-php-client/src/io/Google_REST.php 
    on line 66 
+0

Вы посмотрели на это? https://developers.google.com/analytics/devguides/config/mgmt/v3/mgmtDailyUploadGuide#upload –

+0

Да, мои запросы свободно основаны на этом коде. Я использую библиотеку PHP, поэтому она не выглядит идентичной, но мой код содержит каждый из этих элементов. – Lenwood

+2

Вы авторизовали область полномочий https://www.googleapis.com/auth/analytics? –

ответ

4

Я только что успешно загрузил данные о стоимости в первый раз. В торговле комментарии с Nicholas Pickering я наткнулся документации Management API Authorization в которой говорится, что:

Вы получите код на 401 статус, если ваш access_token истек, или если вы используете неправильный простор для API.

по умолчанию рамки только для чтения, поэтому все моих GET просьб работали без проблем, но я не мог завершить любые POST запросов через API. Я не могу вспомнить, как я нашел его, но путь для достижения этой цели в библиотеке PHP клиента, чтобы добавить следующую строку в декларацию клиента:

$client->setScopes('https://www.googleapis.com/auth/analytics'); 

Как только я добавил эту линию к моему проекту, Мне удалось успешно загрузить данные о расходах. Я действительно рад, что очистил это препятствие. Мне еще предстоит пройти долгий путь, чтобы завершить свой проект, но, по крайней мере, я знаю, что он сработает.

0

Я продолжал получать эту ошибку, пока не перешел на Google Console -> APIs & auth -> API и включил это использование API.

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