Google Analytics OAuth2: Comment résoudre l'erreur: “redirect_uri_mismatch”?

Je vais essayer d'obtenir cet exemple fonctionne: https://developers.google.com/analytics/devguides/config/mgmt/v3/quickstart/web-php#enable

L'erreur que j'obtiens est "Erreur: redirect_uri_mismatch" .

Pour installer l'api google ressources, j'ai utilisé compositeur avec cette commande:

php composer.phar require google/apiclient:^2.0.0@RC

Installé le "vendeur" dans le dossier racine de mes dossier du site. Mon index.php et oauth2callback.php les fichiers sont situés dans le "public_html" le dossier.

Voici une capture d'écran de mon erreur lorsque vous allez sur mon site:

Google Analytics OAuth2: Comment résoudre l'erreur: “redirect_uri_mismatch”?

La chose étrange est que si je navigue sur le lien ci-dessus inclus dans le message d'erreur "Visite ...... pour mettre à jour l'autorisés..", j'obtiens ce message d'erreur: "Le Client OAuth N'Existe Pas "

Google Analytics OAuth2: Comment résoudre l'erreur: “redirect_uri_mismatch”?

Si je clique sur mon uniquement disponible numéro de Client, je peux naviguer pour voir les URI qui je vais capture d'écran ci-dessous:

Google Analytics OAuth2: Comment résoudre l'erreur: “redirect_uri_mismatch”?

Comme vous pouvez le voir, sous Autorisés Javascript origines, j'ai http://localhost liste, et sous autorisés redirect Uri, j'ai mon site en direct, suivi par le "oauthc2callback.php" l'extension de fichier.

Je ne comprends pas comment se débarrasser de l'erreur que je reçois. J'ai essayé de remplacer le d'URI et de mettre en différentes JavaScript origines.

Aussi, pour une raison sur cette dernière capture d'écran, il est dit que je n'ai pas l'autorisation de modifier ce client OAuth, mais je peux faire des modifications.

Le code que j'ai pour index.php:

<?php
//Load the Google API PHP Client Library.
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_secretes.json you downloaded from the developer console.
$client = new Google_Client();
$client->setAuthConfigFile('../config/client_secrets.json');
$client->addScope('https://www.googleapis.com/auth/analytics.readonly');

//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_Analytics($client);

    //Get the first view (profile) id for the authorized user.
    $profile = getFirstProfileId($analytics);

    //Get the results from the Core Reporting API and print the results.
    $results = getResults($analytics, $profile);
    printResults($results);
} else {
    $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php';
    header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}


function getFirstprofileId(&$analytics) {
    //Get the user's first view (profile) ID.

    //Get the list of accounts for the authorized user.
    $accounts = $analytics->management_accounts->listManagementAccounts();

    if (count($accounts->getItems()) > 0) {
        $items = $accounts->getItems();
        $firstAccountId = $items[0]->getId();

        //Get the list of properties for the authorized user.
        $properties = $analytics->management_webproperties
        ->listManagementWebproperties($firstAccountId);

        if (count($properties->getItems()) > 0) {
            $items = $properties->getItems();
            $firstPropertyId = $items[0]->getId();

            //Get the list of views (profiles) for the authorized user.
            $profiles = $analytics->management_profiles
            ->listManagementProfiles($firstAccountId, $firstPropertyId);

            if (count($profiles->getItems()) > 0) {
                $items = $profiles->getItems();

                //Return the first view (profile) ID.
                return $items[0]->getId();

            } else {
                throw new Exception('No views (profiles) found for this user.');
            }
        } else {
            throw new Exception('No properties found for this user.');
        }
    } else {
        throw new Exception('No accounts found for this user.');
    }
}

function getResults(&$analytics, $profileId) {
    //Calls the Core Reporting API and queries for the number of sessions
    //for the last seven days.
    return $analytics->data_ga->get(
    'ga:' . $profileId,
    '7daysAgo',
    'today',
    'ga:sessions');
}

function printResults(&$results) {
    //Parses the response from the Core Reporting API and prints
    //the profile name and total sessions.
    if (count($results->getRows()) > 0) {

        //Get the profile name.
        $profileName = $results->getProfileInfo()->getProfileName();

        //Get the entry for the first entry in the first row.
        $rows = $results->getRows();
        $sessions = $rows[0][0];

        //Print the results.
        print "<p>First view (profile) found: $profileName</p>";
        print "<p>Total sessions: $sessions</p>";
    } else {
        print "<p>No results found.</p>";
    }
}

Le code que j'ai pour "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->setAuthConfigFile('../config/client_secrets.json');
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php');
$client->addScope('https://www.googleapis.com/auth/analytics.readonly');

//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'] . '/';
    header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}

Tout ce code a été prise à partir du premier site web de l'exemple, à l'exception de quelques petits ajouts à faire correspondre à mon système.

Ce que quelqu'un sait comment je peux me débarrasser de cette erreur? Ce que je fais mal?

OriginalL'auteur LatentDenis | 2016-05-18