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:
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 "
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:
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
Vous devez vous connecter pour publier un commentaire.
Rappelez-vous, aussi loin que Google est concerné, "votre" serveur est hostile jusqu'à ce que vous nommez "friendly", vous devez explicitement liste blanche de chaque source possible de OAuth appel À Google.
Google est un clubbouncer, un gros, laid, immobile videur avec une liste d'invités de dire à votre demande: "je vais seulement répondre à votre demande si votre nom OU l'id est sur la liste"
Avez-vous essayé d'inclure, non seulement
localhost
, mais toutes les autres origines possibles?Vous devez une liste de toutes les variations possibles de l'url "root", y compris explicite IPs.
n'oubliez pas d'inclure
https://accounts.google.com:443
vous a dit de ne pas oublier d'inclure ce compte.URL de google, avez-vous dire que l'un des Uri?
Attendez que toutes ces interprétations différentes de l'URL, dois-je mettre comme les origines, ou les redirections?
Authorized Javascript Origins
sousRestrictions
. entrez une URL d'origine à un moment et vous allez vous retrouver avec une longue liste d'URL du serveur de. Si l'un d'entre eux correspond à l'ORIGINE de la demande, Google réponses. Si il n'en est aucun qui ne, vous obtiendrez un redirect uri erreur.Merci à tous pour votre aide.
OriginalL'auteur tony gil
il suffit de copier l'URI de la demande sur laquelle l'erreur est survenue de l'erreur de l'écran et de le coller à OAuth informations d'identification "Autorisé redirect Uri"
maintenant exécuter l'application.
cela fonctionne pour moi. Espère que j'ai répondu à votre requête.
Est ma réponse incorrecte?
OriginalL'auteur Asad Shakeel
Le redirect Uri de la demande DOIT être exactement le même que celui d'un Uri est stocké.
Je vois un /à la fin de celui stocké vous avez manqué à votre demande.
De sorte que l'URI, je devrais enlever le "/" à partir de la fin?
C'est tout. Cette baisse est / semble inutile dans votre cas.
OriginalL'auteur Florent Morselli