Signatur
Beschreibung
OAuthException ist die zentrale Ausnahme-Klasse der PHP-OAuth-Erweiterung (pecl/oauth). Sie wird ausgelöst, wenn OAuth-spezifische Fehler auftreten, etwa bei fehlgeschlagenen Autorisierungsanfragen, ungültigen Tokens oder Netzwerkproblemen während der OAuth-Kommunikation mit einem Dienstanbieter.
Die Klasse erweitert die eingebaute Exception-Klasse und ergänzt sie um zwei zusätzliche öffentliche Eigenschaften: $lastResponse enthält die letzte HTTP-Antwort des Servers (als Rohtext), und $debugInfo enthält Debug-Informationen zur fehlgeschlagenen Anfrage. Diese Informationen sind besonders hilfreich bei der Fehlersuche in OAuth-Flows.
In der Praxis sollte jede Verwendung von OAuth-Methoden wie OAuth::getRequestToken(), OAuth::getAccessToken() oder OAuth::fetch() in einem try/catch-Block eingeschlossen werden, der OAuthException gezielt abfängt, um OAuth-Fehler sauber behandeln zu können.
Wichtig: Die OAuth-Erweiterung muss über PECL installiert sein (pecl install oauth). Ab OAuth 2.0 wird häufig auf eigenständige Bibliotheken wie league/oauth2-client gesetzt, da die PECL-Erweiterung primär OAuth 1.0(a) abdeckt.
Beispiele
OAuthException beim Request-Token-Abruf abfangen
<?php
$consumer_key = 'mein_consumer_key';
$consumer_secret = 'mein_consumer_secret';
$oauth = new OAuth($consumer_key, $consumer_secret, OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_URI);
$oauth->enableDebug();
try {
$request_token_info = $oauth->getRequestToken('https://api.beispiel.de/oauth/request_token');
echo 'Request Token: ' . $request_token_info['oauth_token'] . PHP_EOL;
} catch (OAuthException $e) {
echo 'OAuth-Fehler: ' . $e->getMessage() . PHP_EOL;
echo 'HTTP-Code: ' . $e->getCode() . PHP_EOL;
echo 'Letzte Antwort: ' . $e->lastResponse . PHP_EOL;
echo 'Debug-Info: ' . print_r($e->debugInfo, true) . PHP_EOL;
}
Vollständiger OAuth-1.0a-Ablauf mit Fehlerbehandlung
<?php
$oauth = new OAuth(
'consumer_key',
'consumer_secret',
OAUTH_SIG_METHOD_HMACSHA1,
OAUTH_AUTH_TYPE_AUTHORIZATION
);
try {
// Schritt 1: Request Token holen
$rt = $oauth->getRequestToken('https://api.beispiel.de/oauth/request_token');
echo 'Request Token erhalten: ' . $rt['oauth_token'] . PHP_EOL;
// Schritt 2: Access Token holen (nach Nutzerauthorisierung)
$oauth->setToken($rt['oauth_token'], $rt['oauth_token_secret']);
$at = $oauth->getAccessToken('https://api.beispiel.de/oauth/access_token');
echo 'Access Token erhalten: ' . $at['oauth_token'] . PHP_EOL;
// Schritt 3: Geschützte Ressource abrufen
$oauth->setToken($at['oauth_token'], $at['oauth_token_secret']);
$oauth->fetch('https://api.beispiel.de/v1/user/profile');
$response = json_decode($oauth->getLastResponse(), true);
echo 'Nutzername: ' . $response['username'] . PHP_EOL;
} catch (OAuthException $e) {
// Gezieltes Abfangen von OAuth-Fehlern
error_log('OAuthException: ' . $e->getMessage());
error_log('Letzte Serverantwort: ' . $e->lastResponse);
// Fehler für Nutzer aufbereiten
echo 'Die Verbindung zum Dienst ist fehlgeschlagen. Bitte erneut versuchen.';
} catch (Exception $e) {
// Allgemeine Fehler separat behandeln
error_log('Unerwarteter Fehler: ' . $e->getMessage());
echo 'Ein unerwarteter Fehler ist aufgetreten.';
}
// Wichtig · Fallstricke
Zusätzliche Eigenschaften: Im Gegensatz zur Standard-Exception stellt OAuthException zwei öffentliche Eigenschaften bereit:
$lastResponse(string): Der Rohtext der letzten HTTP-Antwort vom Server. Kannnullsein, wenn gar keine Antwort empfangen wurde.$debugInfo(array|null): Enthält ausführliche Debug-Informationen, ist aber nur befüllt, wenn zuvorOAuth::enableDebug()aufgerufen wurde.
Sicherheitshinweis: Die in $lastResponse und $debugInfo enthaltenen Daten können sensible Informationen wie Token-Werte oder Server-Details enthalten. Diese Daten sollten niemals ungefiltert an den Nutzer ausgegeben werden, sondern ausschließlich ins Server-Log geschrieben werden.
Erweiterung: Die PECL-OAuth-Erweiterung muss separat installiert sein. Prüfen Sie mit extension_loaded('oauth'), ob sie verfügbar ist. Die Erweiterung unterstützt primär OAuth 1.0 und 1.0a; für OAuth 2.0 sind andere Lösungen empfohlen.