Curl-Rückgabe erhalten

Hallo,

zur Nutzung einer Google-API soll ich gemäß Anleitung wie folgt vorgehen:

  1. Open a terminal and run the following curl command:
curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&code=authorization-code&grant_type=authorization_code&redirect_uri=https://www.google.com'
  1. Google OAuth returns two tokens, an access token and a refresh token

Entsprechend habe ich ein Skript angelegt wie folgt (die notwendigen Angaben habe ich natürlich in der URL ergänzt…):

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&code=authorization-code&grant_type=authorization_code&redirect_uri=https://www.google.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close ($ch);

Zurückbekommen habe ich nichts. Aufgrund dieses Themas habe ich das Skript wie folgt ergänzt:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://www.googleapis.com/oauth2/v4/token?client_id=293754290671-mmrg6tnb71nbjrrotesjvqgtii9ja0tf.apps.googleusercontent.com&client_secret=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&code=4/0AX4XfWiZUani9w2n3Z1QM0044r6x3ldLxSRg0tzr-gKwD0MWgYA8UDe0Qsi5zx3zziSfQw&grant_type=authorization_code&redirect_uri=https://www.google.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
echo $result;
curl_close ($ch);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

Immerhin hat es jetzt eine Rückmeldung gegeben, allerdings eine Fehlermeldung wie folgt:

{
„error“: „invalid_grant“,
„error_description“: „Bad Request“
}
Warning: curl_setopt(): supplied resource is not a valid cURL handle resource in /var/lib/symcon/scripts/12345.ips.php on line 18

Kann mir jemand weiterhelfen, wie ich an die Rückmeldung mit den beiden Tokens komme?

Danke und viele Grüße…

der Fehler kommt daher, das du die curl_setopt() zu spät gemacht hast, sogar nach curl_close() - da ist der handel ungültig

hilfreich bei der Umsetzung von curl-calls, siehe curl-to-PHP: Convert Curl commands to PHP code

bist du dir sicher, das der o.g. curl-Aufruf funktioniert? Bei mir kommt

{
  "error": "invalid_client",
  "error_description": "The OAuth client was not found."
}

Vielen Dank, demel42. Die Überführung von curl zu php hatte ich über den von Dir geposteten link gemacht. Das Ergebnis war das erste von mir gepostete Skript, wo ich überhaupt keine Rückmeldung erhalte.

Deine Fehlermeldung kommt wahrscheinlich, weil in dem curl-Aufruf noch Daten zu ergänzen sind, für die dort Platzhalter stehen.

Mit diesem:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://www.googleapis.com/oauth2/v4/token?client_id=293754290671-.apps.googleusercontent.com&client_secret=GOCSPX-=4/0AX4XfWiZUani9w2n3Z1QM0044r6x3ldLxSRg0tzr-gKwD0MWgYA8UDe0Qsi5zx3zziSfQw&grant_type=authorization_code&redirect_uri=https://www.google.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
echo $result;
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_close ($ch);

also curl_close am Schluss und die beiden Zeilen davor ergänzt, bekomme ich nun diese Fehlermeldung:

{
„error“: „invalid_grant“,
„error_description“: „Bad Request“
}

Ggf. hängt es mit der redirect_uri zusammen, die ich gemäß Anleitung mit https://www.google.com gesetzt habe. Wie bekomme ich den o.g. curl-Aufruf über php dazu, dass die Rückmeldung („Google OAuth returns two tokens“) in IPS ankommt?

Ich habe den ergänzten curl-Befehl in die Console eingegeben und bekomme dort auch eine Fehlermeldung, obwohl ich das Projekt und die OAuth-Credentials gelöscht (auch nachdem ich die Infos oben versehentlich fröhlich frei publik gemacht habe ;-)), neu aufgesetzt und alles noch einmal versucht habe… Ich komme also bei Google einfach nicht weiter - die Console meldet:

curl: (3) URL using bad/illegal format or missing URL
Der Befehl „client_secret“ ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl „grant_type“ ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl „redirect_uri“ ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

Also, so klappt es, wobei XXX, YYY und ZZZ durch die jeweiligen Werte zu ersetzen sind:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://www.googleapis.com/oauth2/v4/token?');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "client_id=XXX&client_secret=YYY&code=ZZZ&grant_type=authorization_code&redirect_uri=https://www.google.com");
curl_setopt($ch, CURLOPT_POST, 1);

$headers = array();
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}

echo $result;
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_close ($ch);