0

GoogleのAPI PHPクライアントをOAuthと連携させて、AnalyticsとSearch Consoleのデータにアクセスできるようにしようとしています。私はexample here from Googleに従っています。 Googleにログインしてアクセスを許可すると、サイトにリダイレクトされたときに、「リクエストに無効な認証情報があります」という401エラーが表示されます。Google API PHP - OAuthの問題 - 「リクエストに無効な認証情報が含まれています」

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クライアントを使用して要求と応答を送受信します。それが成功したら、コード内でこれらのパラメータを使用します。

関連する問題