0

Я пытаюсь заставить клиента API API Google работать с OAuth, чтобы получить доступ к данным Google Analytics и Search Console. Я слежу за example here from Google. Я отправляю в Google для входа и авторизации доступа, а затем, когда я перенаправляется обратно на сайт, я получаю ошибку 401 «Запрос имел неверные учетные данные».Google API PHP - OAuth Issue - «Запрос имел недопустимые учетные данные»

N.B. Я использую Google API PHP Client.

Я искал часы и не могу заставить их работать правильно. Вот мой код.

В index.php:

<?php 
require_once '../../vendor/autoload.php'; 

session_start(); 

$client = new Google_Client(); 
$client->setAuthConfig('../../public/client_secrets.json'); 
$client->addScope(Google_Service_Analytics::ANALYTICS_READONLY); 
$client->setApplicationName("Tool"); 
$client->setAccessType("offline"); 


// If the user has already authorized this app then get an access token 
// else redirect to ask the user to authorize access to Google Analytics. 
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) { 
    // Set the access token on the client. 
    $client->setAccessToken($_SESSION['access_token']); 

    // Create an authorized analytics service object. 
    $analytics = new Google_Service_AnalyticsReporting($client); 

    var_dump($_SESSION); 

    // Call the Analytics Reporting API V4. 
    $response = getReport($analytics); 

    // Print the response. 
    printResults($response); 

} else { 
    $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php'; 
    header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); 
} 


function getReport($analytics) { 

    // Replace with your view ID. E.g., XXXX. 
    $VIEW_ID = "XXXXXXXX"; 

    // Create the DateRange object. 
    $dateRange = new Google_Service_AnalyticsReporting_DateRange(); 
    $dateRange->setStartDate("7daysAgo"); 
    $dateRange->setEndDate("today"); 

    // Create the Metrics object. 
    $sessions = new Google_Service_AnalyticsReporting_Metric(); 
    $sessions->setExpression("ga:sessions"); 
    $sessions->setAlias("sessions"); 

    // Create the ReportRequest object. 
    $request = new Google_Service_AnalyticsReporting_ReportRequest(); 
    $request->setViewId($VIEW_ID); 
    $request->setDateRanges($dateRange); 
    $request->setMetrics(array($sessions)); 

    $body = new Google_Service_AnalyticsReporting_GetReportsRequest(); 
    $body->setReportRequests(array($request)); 
    return $analytics->reports->batchGet($body); 
} 

function printResults($reports) { 
    for ($reportIndex = 0; $reportIndex < count($reports); $reportIndex++) { 
    $report = $reports[ $reportIndex ]; 
    $header = $report->getColumnHeader(); 
    $dimensionHeaders = $header->getDimensions(); 
    $metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries(); 
    $rows = $report->getData()->getRows(); 

    for ($rowIndex = 0; $rowIndex < count($rows); $rowIndex++) { 
     $row = $rows[ $rowIndex ]; 
     $dimensions = $row->getDimensions(); 
     $metrics = $row->getMetrics(); 
     for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) { 
     print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n"); 
     } 

     for ($j = 0; $j < count($metricHeaders) && $j < count($metrics); $j++) { 
     $entry = $metricHeaders[$j]; 
     $values = $metrics[$j]; 
     print("Metric type: " . $entry->getType() . "\n"); 
     for ($valueIndex = 0; $valueIndex < count($values->getValues()); $valueIndex++) { 
      $value = $values->getValues()[ $valueIndex ]; 
      print($entry->getName() . ": " . $value . "\n"); 
     } 
     } 
    } 
    } 
} 

Это в oauth2callback.php:

<?php 
require_once '../../vendor/autoload.php'; 

// Start a session to persist credentials. 
session_start(); 

// Create the client object and set the authorization configuration 
// from the client_secrets.json you downloaded from the Developers Console. 
$client = new Google_Client(); 
$client->setAuthConfig('../../public/client_secrets.json'); 
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php'); 
$client->addScope(Google_Service_Analytics::ANALYTICS_READONLY); 
$client->setApplicationName("Tool"); 
$client->setAccessType("offline"); 

// Handle authorization flow from the server. 
if (! isset($_GET['code'])) { 
    $auth_url = $client->createAuthUrl(); 
    header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL)); 
} else { 
    $client->authenticate($_GET['code']); 
    $_SESSION['access_token'] = $client->getAccessToken(); 
    $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/tests/simple-file-upload.php'; 
    header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); 
} 

Кто-нибудь знает, что может быть не так?

ответ

0

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

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