Google Analytics-OAuth2: so beheben Sie Fehler: "redirect_uri_mismatch"?
Ich versuche dieses Beispiel funktioniert: https://developers.google.com/analytics/devguides/config/mgmt/v3/quickstart/web-php#enable
Die Fehler ich erhalte, ist "Fehler: redirect_uri_mismatch" .
Zur Installation der google-api-Ressourcen, die ich verwendet der Komponist mit diesem Befehl:
php composer.phar require google/apiclient:^2.0.0@RC
Dieser installiert die "vendor" - Ordner in meinem root-site-Ordner. Meine index.php und oauth2callback.php Dateien befinden sich im Ordner "public_html" - Ordner.
Hier ist ein screenshot von meinem Fehler, wenn Sie auf meine Website:
Komisch ist, dass wenn ich navigieren Sie zu dem link oben, das ist in der Fehlermeldung enthalten "Besuchen ...... zur Aktualisierung der autorisierten..", bekomme ich diese Fehlermeldung: "Die OAuth-Client Existiert Nicht "
Wenn ich auf meine nur verfügbar, Client-ID, kann ich navigieren, um zu sehen, die URI ' s, die werde ich Abbildung unten:
Wie Sie sehen können, unter Autorisierten Javascript-Ursprung, ich habe http://localhost aufgeführt, und unter " autorisierte redirect URIs, ich habe meine live-site, gefolgt von der "oauthc2callback.php" Datei-Erweiterung.
Ich nicht verstehen, wie, um loszuwerden, die Fehler, die ich immer bin. Ich habe versucht, anstelle des URI ' s und setzen in verschiedenen JavaScript-Ursprünge.
Auch, für einige Grund, an diesem letzten screenshot, es sagt, dass ich nicht über die Berechtigung zum Bearbeiten dieser OAuth-client, aber ich kann änderungen vornehmen.
Den code habe ich für 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>";
}
}
Den code hab ich für "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));
}
Alle dieser code wurde von der ersten website Beispiel, außer mit ein paar kleinen Ergänzungen, um es passend zu meinem system.
Jemand weiß, wie kann ich loswerden dieser Fehler? Was mache ich falsch?
InformationsquelleAutor LatentDenis | 2016-05-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erinnern, soweit Google betroffen ist, "Ihr" server ist feindlich, bis Sie nennen es "freundlich" ist, müssen Sie explizit die whitelist jede mögliche Quelle eine OAuth-Aufruf von Google.
Google ist eine clubbouncer, ein großes, hässlich, unbeweglich Türsteher mit Gästeliste sagte zu Ihrer Bewerbung: "ich werde nur mit Ihrem Antrag, wenn Sie Ihren genauen Namen ODER die id ist in der Liste"
Haben Sie versucht, zu denen nicht nur
localhost
, sondern auch alle anderen möglichen Ursprünge?Muss die Liste alle möglichen Variationen von url, "root", einschließlich der expliziten IPs.
vergessen Sie nicht, gehören
https://accounts.google.com:443
Sie sagte nicht vergessen, dass Konto.google-URL, meinst du wie man die URIs?
Warten Sie, alle diese verschiedenen Darstellungen der URL, soll ich wie die Herkunft, oder der leitet?
Authorized Javascript Origins
unterRestrictions
. geben Sie ein Ursprungs-URL zu einer Zeit, und Sie werden am Ende mit einer langen Liste der möglichen server-URL ist. Wenn einer von Ihnen entspricht dem URSPRUNG der Anfrage, Google Antworten. Wenn es keine gibt, die funktioniert, erhalten Sie eine redirect-uri-Fehler.Vielen Dank für all Ihre Hilfe.
InformationsquelleAutor tony gil
kopieren Sie einfach den Anfrage-URI auf die Fehlermeldung Auftritt von Fehler-Bildschirm und fügen Sie ihn auf OAuth-Anmeldeinformationen "Autorisiert redirect URIs"
führen Sie nun die app.
dies funktioniert für mich. Hoffe, ich antwortete Ihrer Abfrage.
Ist meine Antwort falsch?
InformationsquelleAutor Asad Shakeel
Die redirect-Uri in der Anfrage MUSS genau gleich sein, wie eine Uri, die Sie gespeichert.
Sehe ich ein /am Ende der gespeicherten vermißten Sie in Ihrer Anfrage.
So wie die URI, ich sollte abnehmen "/" vom Ende?
Das ist es. Das nachgestellte / sinnlos in deinem Fall.
InformationsquelleAutor Florent Morselli